From 3e0c9b43a20c551378112ce8dd57d58abf6349ec Mon Sep 17 00:00:00 2001 From: Amerlander Date: Tue, 22 Mar 2022 17:36:19 +0100 Subject: [PATCH] V4 updates for beta testing (#147) * change simulator svg * change radio image * Remove google fonts cdn * change color of 'advanced' button * font fix * font fix 2 * display fix * change fullsceen simulator bg * Continuous servo * handle continuous state * adding shims * update rendering for continuous servos * fixing sim * fix sig * typo * fix sim * bump pxt * bump pxt * rerun travis * Input blocks revision - add Button and Pin event types - merge onPinPressed & onPinReleased in new onPinEvent function - create new onButtonEvent function * update input blocks in docs and tests * remove device_pin_release block * Hide DAL.x behind Enum * bring back deprecated blocks, but hide them * shims and locales files * fix input.input. typing * remove buildpr * bump V3 * update simulator aspect ratio * add Loudness Block * revoke loudness block * Adds soundLevel To be replaced by pxt-common-packages when DAL is updated. * Remove P0 & P3 from AnalogPin * Fix Sound and replace AnalogPin.P0 * remove approved extensions * V4 Updates from remote Repo * locales * add storage functions * fix storage functions * fix int/float values * decrease decimal precision * reorder blocks * Update BLE Settings and Storage Blocks * Fetch MicroBit changes up to v4.0.18 * Update timing for LED Matrix usage * use 32kb ram (mini v2) * resize gatt table * Revert "use 32kb ram (mini v2)" This reverts commit 4b15592f0f0eacfc1a2e826f34682bc589faf16e. * fix missleading indentation * add support for 32kb and 16kb ram * only MIT extensions in preferredRepos * remove extensions without MIT License file * add updated extensions * add extensions with MIT license Co-authored-by: Juri Co-authored-by: Juri --- .github/lock.yml | 8 +- .github/workflows/codeql.yml | 51 + .../compress-images-on-pull-request.yml | 12 - ...{pxt-buildtarget.yml => pxt-buildmain.yml} | 7 +- .github/workflows/pxt-buildpr.yml | 31 + .github/workflows/pxt-buildpush.yml | 39 + .github/workflows/testghpkgs.yml | 7 +- .travis.yml | 27 - .vscode/settings.json | 1 - .vscode/tasks.json | 19 +- README.md | 2 +- calliope.code-workspace | 13 - compiler/combiner.ts | 131 + compiler/tsconfig.json | 23 + docfiles/offline-app-trademarks.html | 2 + docs/about.md | 7 + docs/calliope/02_Hero_CalliopEO.png | Bin 0 -> 25308 bytes docs/calliope/03_Hero_KidsLab.png | Bin 0 -> 21844 bytes docs/calliope/calliopeo-header.png | Bin 0 -> 225522 bytes docs/hero-banner.md | 21 + docs/projects/name-tag.md | 7 +- docs/skillmap/img/space.png | Bin 0 -> 17588 bytes docs/skillmap/img/spacet4.gif | Bin 0 -> 85563 bytes docs/skillmap/mini.md | 37 + docs/skillmap/space.md | 81 + docs/skillmap/space/activity1.md | 172 + docs/skillmap/space/img/space.png | Bin 0 -> 17588 bytes docs/skillmap/space/img/spacet4.gif | Bin 0 -> 85563 bytes docs/skillmaps.md | 19 + editor/dialogs.tsx | 10 +- editor/extension.tsx | 33 +- editor/flash.ts | 750 +- editor/tsconfig.json | 11 +- faviconDescription.json | 2 +- fieldeditors/tsconfig.json | 2 +- libs/blocksprj/pxt.json | 3 +- libs/bluetooth/BLEHF2Service.cpp | 58 +- libs/bluetooth/BLEHF2Service.h | 65 +- libs/bluetooth/bluetooth.cpp | 23 +- libs/bluetooth/bluetooth.ts | 5 +- libs/bluetooth/pxt.json | 12 +- libs/bluetooth/shims.d.ts | 8 +- libs/core/_locales/core-jsdoc-strings.json | 96 +- libs/core/_locales/core-strings.json | 97 +- libs/core/_locales/de/core-jsdoc-strings.json | 420 +- libs/core/_locales/de/core-strings.json | 399 +- libs/core/basic.cpp | 212 +- libs/core/basic.ts | 61 +- libs/core/blocks-test/pins.blocks | 30 +- libs/core/blocks-test/test.blocks | 18 +- libs/core/codal.cpp | 19 +- libs/core/compass.ts | 247 +- libs/core/console.ts | 104 +- libs/core/control.cpp | 52 +- libs/core/control.ts | 71 + libs/core/enums.d.ts | 18 + libs/core/icons.ts | 364 +- libs/core/images.cpp | 6 +- libs/core/input.cpp | 145 +- libs/core/input.ts | 88 +- libs/core/light.cpp | 72 +- libs/core/loops.ts | 38 + libs/core/microphone.ts | 27 + libs/core/motors.cpp | 33 +- libs/core/music.cpp | 42 + libs/core/music.ts | 53 +- libs/core/pins.cpp | 85 +- libs/core/pxt.h | 1 + libs/core/pxt.json | 73 +- libs/core/pxtcore.h | 3 +- libs/core/sendbufferbrightness.s | 53 + libs/core/sendbuffernrf52.s | 82 + libs/core/serial.cpp | 29 +- libs/core/shims.d.ts | 407 +- libs/core/soundexpressions.cpp | 28 + libs/core/soundexpressions.ts | 59 + libs/core/storage.cpp | 57 + libs/core/storage.ts | 68 + libs/core/touchmode.cpp | 53 + libs/devices/pxt.json | 1 + .../_locales/microphone-jsdoc-strings.json | 2 +- .../_locales/microphone-strings.json | 3 +- libs/servo/pxt.json | 2 +- package-lock.json | 17583 +++++++++++----- package.json | 14 +- pxtarget.json | 122 +- pxtwapp/pxtwapp/package.appxmanifest | 2 +- sim/compat.ts | 7 + sim/dalboard.ts | 62 +- sim/public/icons/jacdac.svg | 1 + sim/public/sim.manifest | 12 +- sim/public/simulator.html | 18 +- sim/public/sounds/giggle.wav | Bin 0 -> 65070 bytes sim/public/sounds/happy.wav | Bin 0 -> 54318 bytes sim/public/sounds/hello.wav | Bin 0 -> 24110 bytes sim/public/sounds/mysterious.wav | Bin 0 -> 210990 bytes sim/public/sounds/sad.wav | Bin 0 -> 74286 bytes sim/public/sounds/slide.wav | Bin 0 -> 57902 bytes sim/public/sounds/soaring.wav | Bin 0 -> 360494 bytes sim/public/sounds/spring.wav | Bin 0 -> 91694 bytes sim/public/sounds/twinkle.wav | Bin 0 -> 298030 bytes sim/public/sounds/yawn.wav | Bin 0 -> 123950 bytes sim/state/buttonpair.ts | 10 + sim/state/compass.ts | 14 + sim/state/edgeconnector.ts | 79 +- sim/state/edgeconnectorsim.ts | 1 + sim/state/microphone.ts | 28 + sim/state/misc.ts | 68 +- sim/state/serial.ts | 17 +- sim/state/soundexpression.ts | 60 + sim/state/storage.ts | 36 + sim/tsconfig.json | 18 +- sim/visuals/microbit.ts | 630 +- targetconfig.json | 272 +- theme/style.less | 7 +- 115 files changed, 16788 insertions(+), 7690 deletions(-) create mode 100644 .github/workflows/codeql.yml delete mode 100644 .github/workflows/compress-images-on-pull-request.yml rename .github/workflows/{pxt-buildtarget.yml => pxt-buildmain.yml} (90%) create mode 100644 .github/workflows/pxt-buildpr.yml create mode 100644 .github/workflows/pxt-buildpush.yml delete mode 100644 .travis.yml delete mode 100644 calliope.code-workspace create mode 100644 compiler/combiner.ts create mode 100644 compiler/tsconfig.json create mode 100644 docfiles/offline-app-trademarks.html create mode 100644 docs/calliope/02_Hero_CalliopEO.png create mode 100644 docs/calliope/03_Hero_KidsLab.png create mode 100644 docs/calliope/calliopeo-header.png create mode 100644 docs/hero-banner.md create mode 100644 docs/skillmap/img/space.png create mode 100644 docs/skillmap/img/spacet4.gif create mode 100644 docs/skillmap/mini.md create mode 100644 docs/skillmap/space.md create mode 100644 docs/skillmap/space/activity1.md create mode 100644 docs/skillmap/space/img/space.png create mode 100644 docs/skillmap/space/img/spacet4.gif create mode 100644 docs/skillmaps.md create mode 100644 libs/core/loops.ts create mode 100644 libs/core/microphone.ts create mode 100644 libs/core/sendbufferbrightness.s create mode 100644 libs/core/sendbuffernrf52.s create mode 100644 libs/core/soundexpressions.cpp create mode 100644 libs/core/soundexpressions.ts create mode 100644 libs/core/storage.cpp create mode 100644 libs/core/storage.ts create mode 100644 libs/core/touchmode.cpp create mode 100644 sim/compat.ts create mode 100644 sim/public/icons/jacdac.svg create mode 100644 sim/public/sounds/giggle.wav create mode 100644 sim/public/sounds/happy.wav create mode 100644 sim/public/sounds/hello.wav create mode 100644 sim/public/sounds/mysterious.wav create mode 100644 sim/public/sounds/sad.wav create mode 100644 sim/public/sounds/slide.wav create mode 100644 sim/public/sounds/soaring.wav create mode 100644 sim/public/sounds/spring.wav create mode 100644 sim/public/sounds/twinkle.wav create mode 100644 sim/public/sounds/yawn.wav create mode 100644 sim/state/microphone.ts create mode 100644 sim/state/soundexpression.ts create mode 100644 sim/state/storage.ts diff --git a/.github/lock.yml b/.github/lock.yml index 974f87a3..a1d7e6e1 100644 --- a/.github/lock.yml +++ b/.github/lock.yml @@ -30,13 +30,7 @@ lockLabel: false # Comment to post before locking. Set to `false` to disable -lockComment: > - - This thread has been automatically locked since there has not been - - any recent activity after it was closed. Please open a new issue for - - related bugs. +lockComment: false diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..4b136025 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,51 @@ +name: "Code scanning - action" + +on: + push: + pull_request: + schedule: + - cron: '0 19 * * 0' + +jobs: + CodeQL-Build: + + # CodeQL runs on ubuntu-latest and windows-latest + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + # We must fetch at least the immediate parents so that if this is + # a pull request then we can checkout the head. + fetch-depth: 2 + + # If this run was triggered by a pull request event, then checkout + # the head of the pull request instead of the merge commit. + - run: git checkout HEAD^2 + if: ${{ github.event_name == 'pull_request' }} + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: javascript + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/compress-images-on-pull-request.yml b/.github/workflows/compress-images-on-pull-request.yml deleted file mode 100644 index 4f747770..00000000 --- a/.github/workflows/compress-images-on-pull-request.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Compress images -on: pull_request -jobs: - build: - name: calibreapp/image-actions - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - name: calibreapp/image-actions - uses: calibreapp/image-actions@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pxt-buildtarget.yml b/.github/workflows/pxt-buildmain.yml similarity index 90% rename from .github/workflows/pxt-buildtarget.yml rename to .github/workflows/pxt-buildmain.yml index c0726c87..60c501d2 100644 --- a/.github/workflows/pxt-buildtarget.yml +++ b/.github/workflows/pxt-buildmain.yml @@ -1,9 +1,10 @@ -name: pxt-buildtarget +name: pxt-buildmain on: push: - branches: - - master + branches: + - 'master' + - 'main' create: jobs: diff --git a/.github/workflows/pxt-buildpr.yml b/.github/workflows/pxt-buildpr.yml new file mode 100644 index 00000000..22907593 --- /dev/null +++ b/.github/workflows/pxt-buildpr.yml @@ -0,0 +1,31 @@ +name: pxt-buildpr + +on: [pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [8.x] + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: npm install + run: | + sudo apt-get install xvfb + sudo npm install -g pxt + npm install + - name: pxt ci + run: | + pxt ci + env: + CHROME_BIN: chromium-browser + DISPLAY: :99.0 + CI: true \ No newline at end of file diff --git a/.github/workflows/pxt-buildpush.yml b/.github/workflows/pxt-buildpush.yml new file mode 100644 index 00000000..cf699974 --- /dev/null +++ b/.github/workflows/pxt-buildpush.yml @@ -0,0 +1,39 @@ +name: pxt-buildpush + +on: + push: + # main/master has its own build that includes the crowdin key + branches-ignore: + - 'main' + - 'master' + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [8.x] + + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: npm install + run: | + sudo apt-get install xvfb + sudo npm install -g pxt + npm install + - name: pxt ci + run: | + pxt ci + env: + PXT_ACCESS_TOKEN: ${{ secrets.PXT_ACCESS_TOKEN }} + PXT_RELEASE_REPO: ${{ secrets.PXT_RELEASE_REPO }} + NPM_ACCESS_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} + CHROME_BIN: chromium-browser + DISPLAY: :99.0 + CI: true \ No newline at end of file diff --git a/.github/workflows/testghpkgs.yml b/.github/workflows/testghpkgs.yml index b9e57f36..ca4d29f2 100644 --- a/.github/workflows/testghpkgs.yml +++ b/.github/workflows/testghpkgs.yml @@ -11,9 +11,12 @@ jobs: strategy: matrix: node-version: [8.x] + branch: [stable3.0] steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 + with: + ref: ${{ matrix.branch }} - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: @@ -45,5 +48,5 @@ jobs: uses: actions/upload-artifact@v2 if: ${{ always() }} with: - name: logs + name: logs-${{ matrix.branch }} path: temp/ghpkgs/*.txt diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c1aaedba..00000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -language: node_js -os: linux -dist: trusty -node_js: - - "8.9.4" -before_install: - - export CHROME_BIN=chromium-browser - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start -script: - - "node node_modules/pxt-core/built/pxt.js travis" -# - "(cd libs/lang-test0; node ../../node_modules/pxt-core/built/pxt.js run)" -# - "(cd libs/lang-test1; node ../../node_modules/pxt-core/built/pxt.js run)" -# - "(cd libs/lang-test0; node ../../node_modules/pxt-core/built/pxt.js test)" -# - "(cd libs/lang-test1; node ../../node_modules/pxt-core/built/pxt.js test)" -# - "node node_modules/pxt-core/built/pxt.js testdir tests" -# - "(cd libs/hello; node ../../node_modules/pxt-core/built/pxt.js testconv http://az851932.vo.msecnd.net/files/td-converter-tests-v1.json)" -sudo: false -notifications: - email: - - touchdevelop-build@microsoft.com -cache: - directories: - - node_modules - - built/cache - - libs/hello/built/cache - diff --git a/.vscode/settings.json b/.vscode/settings.json index fc770a23..e0fa1cb2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,5 @@ // Place your settings in this file to overwrite default and user settings. { - "files.autoSave": "afterDelay", "files.watcherExclude": { "**/.git/objects/**": true, "**/built/**": true, diff --git a/.vscode/tasks.json b/.vscode/tasks.json index c3601922..bc1f2f0d 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,20 +1,19 @@ { - "version": "0.1.0", + "version": "2.0.0", // Task runner is jake "command": "pxt", - // Need to be executed in shell / cmd - "isShellCommand": true, - "showOutput": "always", "tasks": [ { - // TS build command is local. - "taskName": "serve", - // Make this the default build command. - "isBuildCommand": true, - // Use the redefined Typescript output problem matcher. + "label": "serve", + "type": "shell", + "command": "pxt", + "args": [ + "serve" + ], "problemMatcher": [ "$tsc" - ] + ], + "group": "build" } ] } diff --git a/README.md b/README.md index 7ddd37a9..8d6b9b59 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# micro:bit target for PXT +# calliope target for PXT diff --git a/calliope.code-workspace b/calliope.code-workspace deleted file mode 100644 index c925e61c..00000000 --- a/calliope.code-workspace +++ /dev/null @@ -1,13 +0,0 @@ -{ - "folders": [ - { - "path": "../pxt" - }, - { - "path": "../pxt-common-packages" - }, - { - "path": "." - } - ] -} \ No newline at end of file diff --git a/compiler/combiner.ts b/compiler/combiner.ts new file mode 100644 index 00000000..8c898bbb --- /dev/null +++ b/compiler/combiner.ts @@ -0,0 +1,131 @@ +/// + +namespace ts.pxtc.extension { + pxtc.compilerHooks.postBinary = (program: ts.Program, opts: CompileOptions, res: CompileResult) => { + if (!opts.target.isNative) + return + const mbdal = res.outfiles["mbdal-binary.hex"] + const mbcodal = res.outfiles["mbcodal-binary.hex"] + if (!mbdal || !mbcodal) + return + + let outp = "" + + wrapHex(mbdal, 0x00, [0x99, 0x01, 0xc0, 0xde]) + wrapHex(mbcodal, 0x0D, [0x99, 0x03, 0xc0, 0xde], true) + + outp += ":00000001FF\n" + + res.outfiles["binary.hex"] = outp + + function hex2str(bytes: number[]) { + return ts.pxtc.hexfile.hexBytes([bytes.length - 3].concat(bytes)) + "\n" + } + + function paddingString(len: number) { + let r = "" + const len0 = len + while (len >= 44) { + r += hex2str([0x00, 0x00, 0x0C, + 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42]) + len -= 44 + } + if (len >= 12) { + const numBytes = (len - 11) >> 1 + const bytes = [0x00, 0x00, 0x0C] + for (let i = 0; i < numBytes; ++i) bytes.push(0x42) + const add = hex2str(bytes) + r += add + len -= add.length + } + while (len--) + r += "\n" + + U.assert(r.length == len0) + + return r + } + + function addBlock(blk: string) { + const leftoff = blk.length & 511 + outp += blk + paddingString(512 - leftoff) + } + + function wrapHex(inpHex: string, dataType: number, deviceType: number[], keepSrc = false) { + let blk = + hex2str([0x00, 0x00, 0x04, 0x00, 0x00]) + + hex2str([0x00, 0x00, 0x0A].concat(deviceType)) + let upperAddr = 0 + const lines = inpHex.split(/\r?\n/) + for (let i = 0; i < lines.length; ++i) { + const line = lines[i] + if (!line) + continue + const parsed = ts.pxtc.hexfile.parseHexRecord(line) + + switch (parsed.type) { + case 0x00: + /* + const parsed2 = parsed.len <= 16 && lines[i + 1] ? + ts.pxtc.hexfile.parseHexRecord(lines[i + 1]) + : null + // if this and next line can fit in 32 bytes, concat them + if (parsed2 && parsed2.type == 0x00 && + parsed2.addr == parsed.addr + parsed.len && + parsed.len + parsed2.len <= 32) { + parsed.data = parsed.data.concat(parsed2.data) + parsed.len += parsed2.len + i++ + } + */ + addData([parsed.addr >> 8, parsed.addr & 0xff, dataType] + .concat(parsed.data)) + break + + case 0x01: + flush() + if (keepSrc) break + else return + + case 0x04: + const newUpper = ((parsed.data[0] << 8) | parsed.data[1]) << 16 + if (upperAddr != newUpper) { + upperAddr = newUpper + addData([0, 0, 0x04, parsed.data[0], parsed.data[1]]) + } + break + + case 0x03: + case 0x05: + // ignore + break + + case 0x0E: + // src record + addData([parsed.addr >> 8, parsed.addr & 0xff, 0x0E] + .concat(parsed.data)) + break + + default: + U.oops(`unknown hex record type: ${line}`) + break + } + } + flush() + + function addData(bytes: number[]) { + const newData = hex2str(bytes) + blk += newData + } + + function flush() { + if (blk) + addBlock(blk) + blk = "" + } + } + } +} diff --git a/compiler/tsconfig.json b/compiler/tsconfig.json new file mode 100644 index 00000000..6fd4ee8f --- /dev/null +++ b/compiler/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es2017", + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "declaration": true, + "moduleResolution": "node", + "isolatedModules": false, + "out": "../built/compiler.js", + "rootDir": ".", + "newLine": "LF", + "sourceMap": false, + "typeRoots": ["../node_modules/@types"], + "lib": [ + "dom", + "dom.iterable", + "scripthost", + "es2017", + "ES2018.Promise" + ] + } +} diff --git a/docfiles/offline-app-trademarks.html b/docfiles/offline-app-trademarks.html new file mode 100644 index 00000000..cbca69ec --- /dev/null +++ b/docfiles/offline-app-trademarks.html @@ -0,0 +1,2 @@ +Micro:bit and micro:bit logo are trademarks and/ or copyrights of the Micro:bit +Educational Foundation. © Micro:bit Educational Foundation. All rights reserved. \ No newline at end of file diff --git a/docs/about.md b/docs/about.md index 52461817..3eb4ec74 100644 --- a/docs/about.md +++ b/docs/about.md @@ -78,6 +78,13 @@ input.onButtonPressed(Button.B, () => { We have tons of [projects](/projects), [examples](/examples) and [courses](/courses) to get your started! +## C++ Runtime + +The [C++ micro:bit runtime](http://lancaster-university.github.io/microbit-docs/), created at [Lancaster University](http://www.lancaster.ac.uk/), provides access to the hardware functions of the micro:bit, +as well as a set of helper functions (such as displaying a number/image/string on the LED screen). + +The [micro:bit library](/reference) mirrors the functions of the C++ library. +When code is compiled to ARM machine code, the calls to JavaScript micro:bit functions are replaced with calls to the corresponding C++ functions. ## [Command Line Tools](/cli) diff --git a/docs/calliope/02_Hero_CalliopEO.png b/docs/calliope/02_Hero_CalliopEO.png new file mode 100644 index 0000000000000000000000000000000000000000..57ace95671515c7c07dfaad8d11b469cc407fce2 GIT binary patch literal 25308 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 Ci%xm~ literal 0 HcmV?d00001 diff --git a/docs/calliope/03_Hero_KidsLab.png b/docs/calliope/03_Hero_KidsLab.png new file mode 100644 index 0000000000000000000000000000000000000000..086b254f1ada14fb0f469f7ff12e877a994152e0 GIT binary patch literal 21844 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/calliope/calliopeo-header.png b/docs/calliope/calliopeo-header.png new file mode 100644 index 0000000000000000000000000000000000000000..e08948d803df535873f0109a11da452d2c60005d GIT binary patch literal 225522 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 z z4^8R}eH(NDMgu)sJ^qrB^JJOK(i9?x!^lGZZTH>y2zS*4*q6CLl){q6>|1OmjZhRp z#{QdssijV6@9bb+Mml4+V(kX*F!G4o<8x)9_3D8EwN6Y7_GI&dX(qbharDe4-_~!T zqvo*MMz4{cvQf5JMT|PZFYVuqpFHv>F=nR<`uRza^!_~2b4 zJCMO*)G-`hB61DJ_rET?Fsf<4UlVM2C6-81C)$E@E1C`X>0<(JiDjY?8<|bN;ns?@ zVB_0@OZo_yMSo}lc#JcA8~5-9daj(QW02(YDUtELcF6XJii;4vM1&?^s(S}lS77c? zlb9ZH=3IXxI~}KMdo4&wUIVRbK&D_?LacSslc=0KFutw%hRrO~{rHinO~KkL|HxrK zk6)esFvvNhgY17o-|_95+uZFzR-Xr1pX=;CcDuiAY4Mo%*vY~XDsBTxaT>g5lA9>dwQe8GTR3tt8rudEgW$!?{sZw(bYtfAWYt9Gv&mr7Cxcto1fh7R(M zxAThCD)vmzHr-vA8bOp#fWrPM;Mg4{xr1K}=HuB=Ppf0YBDhaWG$;noo>eR9RZBfn za7>eiZ0m*FvNJrgN(p!EJhl1ffFH2k>(BiEJ(#Se*v-WPv#(!dTm&lkl?(q&0#&56QO;C@#PvFZ$iC?-xmJBDBxfhRg>QB;~cqX+JOun=xlJ5tSAt)w%F zr>FDXlaA47s$+4W7UH3w33wq&L1L`2Fer*T!*6u@oQ&iR#!Lr6b4 zT2f2LFy!{pM7`SEL?k+u45#DIwd&`7w1mm5(nIX_S5;S!_M)yg1Ppmqq783^_Aye4 zX6^6HhY3q#ZYACP?BJ!tkl}iis6qtZhm?x1202G>$(~WJLw4p%e4wmfT3kWfsp(5i zdNAK<)H0)QBABd7&F7Q!a3uu~C{ezDe!cJ6AAN>`VSAW~G z4W+z$J`8LR22sS!OifZh(Nbb{4t%+lW9u#pD+?q$8vJPhUDGpM2sXIscdk^ZEp4Re zK>7Ik!OY9cAxh{}F^2Nj>rgC8rS%fKNn-1iJ+&^OLnL5tmmT(fvIOPCw3vvOEIbS9 zzUa8}Vg`d2RV06AVI<)^u2>8b@g&&~P1!MHw(PS~E&%U%+0I9wev)lW7?!56-@i9V z3~7rjSn+93KvB3Rif7N>c?xscvKt4lH*vjmNuD5Z$I->~TrU1fHs-H8kIzBG_>68| zS_83Yco^wU+|9m#hjc!S0@3H+9GYQ=Y=4fNqyBXY%sL|sV{y<-E_12PIp7yu>k0ZI z$v}$gqqkJ7`^JEl@O?MhBxN>$`w?*q@}g+P$yHrOgCXE+~;>uZZ)Bo0A{ zJ>KJ=dUlqM5mdtlaC=oIr%pnitUvy5 z@XyOKaYtPw@{N(e2WrIQx8FEmUB^s<7-<61%uXINiX~eooO0bc=%CNc%0Ni)LRhG~E;J8h0UW!9#gmsMm)!3dq!WXX^iHkaJ-nVn zqeN+3O0>}7hY5Tt6hxHs=1aSPKSPgbC9W%4MVe?CB5bi@-c&ZvOYMna+ANVW%G3Ms zgY*GTcAbxx?>pCyie7sZ$qZ;W7{yeI?Z;seRN)BQ9J#skcI_q{V-J6?0(@h{Db&?`i=;)WH^Ve#l7#2YVY`5 zn1x`bZ)AJvzJ88td3s6SWbt=_N~OM&H{|S7O zSb1qkpd+cl>eSD^`%N@^%J2g<#4bddJW8H+rLA9J3RIZf^reQkJ|p?4rzQDR!`=6^ zpR+@*82n9Ru^c24Y?9;H5$YI6m~`p;tO~z-5d_Q##tzk8+xV2#aJgyhz9=Gt9|lz>$B7mbw2&2+)Inuy2pf!kh_6CaKZJeo;txtr#q9Qd^u4-t z%!kWPh~N2_ZB6e7bUZs4YifC{{U=qo^jGRv++njw4o?_@XP0FvbIWhp`lC<$7+6$pAQI`J447yl|-mi_$$%NIMrQ`T=1$ z8nix$znOb|ywccvlb=AWFz*eU$k3Fl?ahC7>*>0Bey2%3tIuU2RL;-xe`ZUh=~M;1 z9(!TfGb@`8?jL*I6%n&#B=A4GOaSzWR-*klqu}PMbB%wPJ3E7OerL142@GvqytwOH z^Y#3gc;b!5j~h2cwlcsn&E>GlOB8fHw6vFk^gpDFf5ls`47nP~OwGZFJ*p;}YhLFS zyTx)2tf-@u-B4FAK~O~RJvwYr*7$q~y-@#}7rC-=u%pcpe{*Z)8U5rYJV?~e=Qfl( z$;8e8SUmm6#K5lq7?QXD_MvUeiU?9x*)QR|fVgrxWQ5qS{?(*seq;jo2!K?nQTfVt zjBYO8o1g8u+%OJliIVccHJ_9Bm$g>n23J%R;3wWJ7S_u+A$<|!A}!9^P*TL5hzc@T zQ#efIjN2!^M9x@>6P*6oh_~Bfp&If^L zcj+6U;k!sg6NTdb6+S=EBF4zN*nbiII0C2bt!Tg+ z*e^0pLb1(9@}^J~V$OSx2_|<~d?xVhu9vmEdbO+&ev90kHmUsvR0As3t1qU~w=je$ z-DztV8Sabet}h4@v`~`>mp3KUzR+^FjHy3hRyzZD`7GP)W#LvII{^qvwfV3dWV=Im z-u3GDGmZ!)nxY*TTX&l$Y%^ab%?N>vxL)}Y#zc;jg9Qj!7lD;|9@1S*bf;;Zt^C#y zW#IO*K-3v2+Qh(^hw{BuL{ofL65-Ftr>Wp8BL)wVVDFi#1bTbG5RU7ucOdK4(A=S_ zLKedq{XWHy5R=%IM(WNv62qs*Y}l!(9epm8L&x!AgD^Ji>A%0-t8*s~CR|QAn2aY- zEgxQ93VXuIeuGQLv4l4~%cap|${9S^H|z5@ zwm9GEcKw}IbQoM9ryU3}ai~W>%nR<1_W@p&(ZP#|FP6{wzmlZF(yETF5i>(XNW1Y; z&|H)CkSBg|yu;6ok$m*P-e8qjY8Wy4vtjqd!}I}mN1^d8SXbZ*J=1d*kW8ZZjJdoU z6dM-tPW(l!DXh*k7wk+wcyea(EeeH1C#T84>=3gF#g-mOT%T4$gXtLSD&uaK^E>`X)mLqw_%b9?~y`O4VQtlwZ7l5M*|< zKU|KN(TG#*6?Ry|gM9CybuR>L@Q{&NAw{xE#+yt_H&^4AV0M!_>YyJKWU zQ7Y%@#(h(K)Mc28P}Z!f(UM+Bm+I9*s5!MRd`6p%SlhII^fj}i6a>8y`ZI9A!64o6Bi2r}Kn~%_eAZL8 zw+cFJO%FqP>)t8pcWn-yVIzk(((ert$GBb)hz6oi2giJ8WbEBH^kUbWZB$`TT0DBO z6~7|x-0T;8KxoF|@_3K7hSpha5EgA#!jS85*J$8Fe??U;yUk1f5RHKm(9IZ?NT@qnk z=VKWhpiR>z9`y4h@ZIe1bL~nL_n!>lf0P!x4==2yc1n`RNuXS!f;{??!iD;OJOb0w z^g>=X3SOJTFRrJ;nO-E)b#4_U8j&elxhkD(NuHu6yuKNnPk-)uB;vOjw#~)?Kj|64 z&QLjrxb6hAlNI66#5VmPy8V_{pT;|+8t(YuQ4o7|S{Ez5t#yQXd5I}1EY(Wl@A4Pm z3`~ckfG|doH3|xNExw)^A%Vz3-^g96*LshpGQ6lpepDmx&UfkHTg;Q3!}&kn&-6&c z6YiG$qLQK+A$31iU<^z@53|h-qjVy$`~Z);8;wLE)C+0PB*6)WWOJxc4ya+Lru^`Hm8?#ns6yZ$?i;U>6;2TP=bXGPyG`OB^hktpZY z8Rf;GuPS~tLZKL}hw17VctxQRLNxumbV>5G^T_y1@tvWgR{!GM5r$VJ`|;iTK?`-)t_%FUaQ=z9~)&*`=Ej z_f+_8A?-3%*0lRnwXdf#FLcM~Jg>lf@yu;O!aU|Xd`hN@b9owt8ea61-cfrrW6$AR zGh!pC0>QRzl}I*lSL^M}-kIHXjxDjdV_OC|W01riDlc>P4F23cmU~!&XLmIJ>TwR( zL&w1Ry)187Ei(iH(}G6@o+9U`DMr*5*H54k(t4>*T*S_z5gi!^Lq$N;DRf^ViUjU=N|hS79s;&S2=4G;MeBB`w7Eilc%BUG0%CgR!>!-@Z9D)&F5IP_ zQ8IJbwZiEM`K?E13qElCD9Ju4D}%Q(3#*R^+Ha$)cr6`J5p2|Dpdn?f4m%i@emQwP zmKifm53``a5EdyQ#HAP<3T@tR)|h`77oZ)MSBx`5`n$>Pg+VG0y5=(>g%9JSl(HRDI(FlW6vkf%`~O+52hb z2Zo2xJ6Lu;x{eSrY?z-?VZpnf1M6)230vZQ0v`qSPGYEM3zM&WX4-_GDxW7t}B9ous9uRo>1{!l*8+GO;5CxT;NR%Q01VR0~Sa3Q9Cv(NRCTT>MNuK&mn2@#P$eJ{Z;2T3=2 zV|U(NICWD>TExQ*!&yP!K@-sIIt~AtEKjNV%8dS8`i3`@^6Z`(=h;M&WXZE;o5oL) z?YW-bxnr68a5p(fEFh^`7ib&KOr&DKx%}wCAR>M;ElG=R23eqFCh-UPQM%w!NN8O?{=9Om(-i5jaBKqVIYEN{1Dw z!m5kMohH}%sTW~(9@AQ|=J#gRtw@0(-2id+;b|IXKJ^xIgI<-OWy)?^A&|#|!sLK0 zqo@?r$U2H%7wFDbL~~qHYyI!(1*m^KH@hBN6X<`*6iwU?v)rE%h)O|2+8*|mV}3hV z2<bg#qdO4nQu>FiSITz&<%?;2&Qp)z?1bOM*9b4oUU`i;hz|o$#Ne^U`4(# zR{EcS!~g)Z8XN~nQWoBHApUtM2vE!0A6u24y%x_bg?iQh*y=l$F$#HfphSC`wPMmiT%YUddpX<4-srSyW>hV;8tiN1v~}AB$XpQnW)fNXPcHoevqLN!+f%z$T|SqU_Y3C} zp4jQmPZs=`m`%QsNE+3zzIwVM#41#3f+#LP3FMHhdP@zjLsG+Uw%H($ezkbXLVcCa zJ0VMtjUv7Kgz-Ti_qTn`dKSjkZxc;0fcY?76cREyA5FZ50vkwi~(KyxfUA%65h=0}hwA89~zi}V3CT+SCpxm`q*gVkS^ z(^FiE-$A23H2pb-AMCu}TfTgr1S4D7F!sc*?XQE#w8ThcXAsiq`E<&L^h~PR|DRDA8+5p$6$xozRUPZupQ1-#860E}A6pjb{_Bgme+8 z7N##Xw|fLuGIg71xqs>Deb6-derH#3hk;{BP^z-P8D^u*00-Kg(H zPN~%k&^)~R7SQOLC?~3`fSvx%s7_auN<~%t0ds}r{F>jJYAX4*;#Bbd6)79M6d#R5 z2ov3>O5Z+a0E7RQo;|~OaNhKB$giVYZuJ^=_VtM=NCYaDp%QLVe;+RsCA!EqLZE15+0cuA zyD*TYTJ7Lv8Pzl{!U8b3#SOob++2UbHVXn#5H`rv_Qw`4B9T_s)O$il|2L8A3usj? z5aJzteh?40xChopY9qCP!WZLLM-L#hcR{Sbn(JOTh_!Tava5~ZyR3a|udqGJ0Kb(4 z%0L*DDG0K2>{GX9hH2Lq$^(Dt#qXigd*jlB&%adaDEo^MAj@8pP8=SMS7A*3Al)^p zG=@R|R`PSC(^Ov~wOm+Wx{cL03uwc@KZHJ2{L#+*qxAble;24D`0sKs--mRtUaIFV zgcp)&)_)03FDJPD6S!fkFD!I>V|$vgv(qR;s?{sFppq=<6S~o1Ja>y6=e~%1vx-7$1PbIRLHK4U>aQ{cN4e8rjNyffJsXUg29*TT zqO`*$r|4zEHEEwzc;pAc+rbyiD5|qBxFPm4fSI$z@m(O|-g?JP4OI!NA5XFsU4=Ly z(W4hR^&digYa*`wUR&?Jda(0hZ)&~tc~8U&V;nh6lht^f>cl#E;Md>@09YpwXJwHZ zU02>dT01{6*Q2h?CCWAu|MZp+H(lyMzn0?73(qH0*~CzW_*&SFpSN%8oxUv5zB1_| zK;Bon39s($|65P`d`~-Q4eB`Z>qA!P3@Y}|0jo9g`Y4@G4g9L~#hiz3mJ5&WL~4oT z&<`tuD^Q(r+{kKNb0>FDG(;M$vflnBtzP1cT>-{*K-6je$zPzJw`zTi#EwMUxh3U8 zWY57g3JhU}JiDJuIejBxY}Rpa-0G|>I^4_!n&~+_LQ1<2KB)46S|oNK1g>Ad3jSBA zArO|qgZq+Ru=hQ7~s?$sNXbk1+?qRy0XEQPWPO2wep0|JL?Z0+4cMTpme%R4RGgHh$dKviKd4>$P3c*gTPh;T47`T3m#3vg#$vUYOk z;^VF5-gDy4@PzB%_CeL8bdrMtW%5ykkYb3OG&JU52TfhZtY7br*%?)R17>D;q1rLI z6ou^EM>;w9idBx6yxd>0SAC~Q)9JhMFyoof%4IZ;M7CFSLGWuPA`03;xIiqXkiOm% zH~uL-+7Syr-Ab_^BH0twApP z$vggvo;A{uU)?n}0wqNGZ6nG(Uu1PyzY3419x{OGAohw*zX_t~=~i4$G+tHa%ljQK z9t?NK zrfLq*l1Y|J<`}8uS}}5>3kbMckUxRg&i>w+%UmIm!E zS7jd*0mlP3Zopn;&q`nP#gr*2LzpH$7k0nxP1%FW*eSIKz)9t%7+NzlrygsnBpvk| ztgM)B^|eG!6ad|w?m`*JF^U=?>w~c|-WUi!k{M9zp9=2B)Ds!VI-!H#UVDS=N;ebk z`@u6?MMp@%4<6@38j1@(8~2A*w?XvT{Ipe8N@Q1lhG9Er%KLbPSHC&PJ25;nH`h*9JS=3y|pqBCt-e zMm{$(qqM-?2U4kL+<$4nT_fN#nsIyH_@$Q)y6*6Vv8xs%d^_l{Ii!;qJ0Ew_7{I28 z@Sry`L1wq6;FGDYha1}8U5_4LnMT*AP`}?pq2Jw2;A?+W(C(XpGJiFG$4M5bRp7LR zBIn;HeJ~yyJ*BWXou~whp-?EBz0E^_d$BZIXL8#TwaLuKx{G6Qy9pi=c{5VWy97bT z(xJn?i$*SD!d;YJf%)0tBCiIp{B~MIC8u=G5dOgj;3z>6XvnA2foK%uaTU7$wZcim zUC#7RPHxF~A|Abzsf0O`)Q&2cg73Pevev~?mu0VQaVWT3{ypA4i=!#l(gC~NB2z?F zI3@*!U@;mYg9mnVfMwW-|HO^JY4-6|+O1cdxt5dm;K4K9GMBCBc(BDwA<)kQc0H)(18kjm&p0+$Gee~o zfrD>ve_}QHeTS_&k!9ta>qlngoi7qUlZ|9iYSN{-rJXYBc=+P#hehLUUuFmc7wN8z z5)sdDVXH?uFDVJ}oGK5{Hna+3{{R*efrRv37jW$z43+%+>t!$!)^&H+N;Tpj5Q}2$ z>c9$HGmz;Lsrm6A&k++c^ST;PyYd^PzK=J=0eVN+Ue;gI5P@cW^vGXe`Y5qow?HGT z@_9Nk_TPnFIwt6(1uakSf+bXANu0Qc2tFgZ6`nGHGJiIYyYdK?p@{x zY4VD?F4W;#RX~4oqWuV|_k|@-bv%1qx4Ce*r8kA|+u57r(Ky zLE2f;9}>rSbShG)9KtY9L*g}i7!2~bHuy#*56+wEV9rE$MHbj9#9C>O=#86Ax%L1Q z)_uJob{*MkiC~*srih#UAo7GTw1QEiAZQMXFM?L$3HA8}mVAS94DjPu4;O+o3GlZ` zav13KL}aW0P=@Y=e0nTn@bhs1!{B!dCLl$NQ-Ps(3rXH;llmIB$b~YuF7o=oV39wr zsfHwDtuN4`PKj!CXOyr4Vg45dtaHmhM2QfM#RhkcH1*+&jnPzZ^sfqq!n*3u<|b7P zFUCp-b#Gp?F)(;mO<)zdWDOrQ?f3gb#Gf-s1H2IT{Z=CoWGB?wzg)~rk4R`qm<)`6 z0JIl!NC13h@^JSCjBruI3wBOso|zYC_l zLavudQ?iCXF(SA!fzgT;P1dLfX##-_%CNb7iU*mtALUZZO6AniSzn*(V3QVAHkhPY%;eCY zm_JGIpoRyRb2^{RS~E39mMMqG{n~7t=#M&ZWxJ3_NntO zYYILpxxTiZ>KWFeszDho+?k)Gjm-gnxlO!|N0vZ;|WUMNR2d5qM)C^J0GrfMQC^;=HVx+2J&`NYhKho#;}I zH^T#;zuh=ypofW1$W#aJj~edU9@UBlUhnDn2-Cx=w@4On-o^R1C2^u|b>URR<+%+Y z^>vX#z?b(|Z9~Jvtu;d?Sl~$JnU2zv1DL=I66q=&1YYh7Kg#b}?6uo-`%kod&I}td zabjw`b%)epm4*w1w@Kl~0H@Lvf_#sypf160R=ZA`4HBt2nIUeyvNP`~Y@4}E4T|;0 z88_y!!7eHh>E!si-{3#2!T8MGWz`ZTrDVsZ_-A@#BZTf?P&B~r>%c}MLkmE$yI;OT z$i|)q0y)Q@N#M`~wXfej13}Hs5Z_p*yURgrIOhPZu*--q7sMcDAFy$WHuP07)CQNQ z{Ms?&hTYx+30-IC9o3gddsQ4Q29}>k0Y#bI|?{zexAY~`;>$C@FUNgVR-xN&x_fi0=1y4wU zIrW%*ddd#S^MyRqBcv+ewcmY`s?G*!EqZv5#ovJTP#MMgmN}AOtYAmbvgiOlA!2s;ACfEb;3iK!7qv>zgt8m+&7lV@!e^}DE=;{rpgVWI|eXtJGtvbG)Q zM%vQoUA+|~ut~^sgW7w8jnv?ksQIjNVbc%>6={k+!vR;$I3rj@YmVJ4Nmu~&87veC z=O@5LOWzZ|pvK&%?EW))cTN&67=5c)2-|46hn{bL%Jc$k zRbpa**#EGSj`GGIdVHQ!!V&2Z z)7@WdavUJZl&!4o=}zvjWu9+U5+8g6*!2v-K z&rt2ng%Dr-U5=7p6@?bX{l!WH-`K~~`uiGDY!@8h0*9)zRglKoK9UKFeFS-w&I^gg z6X&_uS`c|ps=yVy8i{O*9R76AA$ODXK_@)J;1#V=6k>>2d&k%265rZo9>8B_O)rX= zX&|u)=2(jrh&>#I2_*b^@`!scU7pMOC1C|)#qj?3=u16eXb4i7*1W?s$$0wOWo`6< zsx0sV{2GR?Fp2`|ty6Ko7W1$M+2cG9B-xEhc$8tMF`nwM6hBr0g}_5(t#xR({h2-% zvh0r=xsau|hK2V3NzCVgG1bW!Xu?Farf+o#p|l}hGi~RF zh*JlOP7XOB*nvxkw;^@=oD76^N5pyu27#R!xpns(i9{;9W{esk5V>2fpqJRB1&zg1 znw8PAy-6M?=1&0&nQz)C(4Sk4&H@VeELoo@3^WXs(#|bie`A5eXVh8bzUupQVaiMff~hBsxZXsM+gt z>pt=jn%CDV051!9{`X)qLDwP-$@A><-Cmzcr`&sD!+!v#)2lC!jcpKs&$2qK>8=;m zagwwe3WC;V_2m88((PDx)D4B(!A7(ImE8_`YKaL;u5Uw<-{TuI(OOk^L$6pV0Px7a zwT$v`mpz^Ou1GATsv$L*Du{wyK#=PkKeW^Aho2FYcbd`LdH(eKHv=X)nUp;_FcY`B zuO1F#+pnK)PoDuJ3||IuU*pCn)nap!sisfZRVrm-afQuS;4-<3G>MobZ`<+bre*7y zqItg@zvWk{qIKY4Yo7rsrBmoNyRCKP*>ecPgd_?7XR6`Wh@IBbxF+pMYvl6ZkhAsUV+nlx_ZGHSR8G~c?tpcLHH$hkONN_#Q4B?^7QQZS?7 z@#c9B!tG9TNRG3@F(uRjcDVWa9@E{kzrI^DoQAO~5)J6b;i;c&(}1USOemv>-n ziFwqqe&nd$r`3DaJyZxFpTg!o|6BPM9e)>%t5r})xVr1sbWqqM|MUI$)C^3lY202y zdBg8^)?VDz+PXT(@3EUeo=Vt6#+A!2GGZ!c&-oD;{1yJ46&d>8{`AtRCZ!??~jK1+JAUu+WC8EgUt#*fw-q!$qYHg7&FMpY4_Ntgg+DJ zzSOBO`oM@#61X+a5Fa2szSr5A1S4PV=N+G2@byR!`#Sw>lCkoFuX}ctIRf>{!&~`pg!))>juAP&u#NNe1B%#2fCKfI~*O| z1d=}X=YFa-@O>^8D2BzJ@x^e}H6*cNqcw~un<9rV-!%AmP|+Al6zoy_RgCoU(bpwi z4DbKKx!DEkm{1@fwTer*K>ez1Q`Q6uvYDSWNb%0 zj^E|4ySEWg6u5Zx^IB+rpWbIWx#4Gg(`$GK-XVsH|9Yy;Zwu;P`#mOFeZ!r!bcLPu zDg(soBI=y=L*o<@DwaJM+bzx!@QnUo*ZI6}A}OANdv%SSP@nbu`Lm=ZsfSMVqNiRk z3tF`X5Xg)dLZd`+GvL1AD6}_K=K{uqhU56v4AeOX^uK2dVdzQ9TT%;$pBbkuXY@oQ zPM$+)rU}!m@pFMi*sq1(rw`0@v7*qB^)S3es-m=;(_pLJ^W^AyNnAa% zxLncTm5GbfOa+4UJiA|q`ta(+`lrx*CLk%M$%C?^Dx%+->LYt~dv%-Pz#1AhJ_}fA zUEwNiTt@y6PhY_`eY9RY$OfB-#G;opoFPb{vg;|b z`gcAdph9(|>qWrO1fwzCz=Wg!Z%bffM+^X{89-q0D22OTz{L6*m99mc zF!QErnbX&o{+^^jU!;3i7tQr5!MCddb~`>v!uP8>WCPhfKbMF1Ny3DmMc;O4yx3mL z&NCg6a&Cqg>yX}V1LSA2r~=a{C#WV4LXIi+urDkOJo)>2?vAW-z~X1T7qVRB0Kx%* zfIQg>5UARBep9EbpZE4aWOs|&c1H}L{bTCclqTNvXaJ`PO@<*aJLJwq&*a&62bAO5 zV{=Twe%|I6`nr652qys1W%x_Fhni?7TCaIezEoHoSFg`mFc50Z<7;q($|eJ36cJ`X z{alMhQ}7Uc4uDZ$0EksVUgk};>n!a)S;%>{x{T0g!Y8%dSekAwINS+Gj9Bom$?!D7 z@xbxjcA+Sp!Sv_yn{UnjxF>+WPU9qx#>g!#oB-bgM+pR;-QO70rW%N}6qd`*m^@77 z%)uV%OJCBaRVWen-QU>qyxQy2z1cOhx+?9nxqj*FKRMYwZ_Q1BZ0lC2Mby>neUGD5 zr^@n8mVsAYqcyhx_qOF0sT4SBLz8@TJ*bt%JMWk-N!B@Bs;=L0(4u9SJLp&}Wuk_x_Iof| zz}%dfAi+cnPG=JUme7+u}i1j`)6lM!6To9w-&zjoi-ALN;HSIR!-!Qn)0a!RF89Ss6#*c|gG}I3sCh}a5 zyX3_{hH0kF@*}hLLo1@<5&d8{)>w*2{exEfyTvKD3bnaLIu{IIF4(IQ!c~U4+6q{2 z%ZfrjO7Jv`5g9V15iU(pG|9qq$%_LE&+g9HVglMPvwL4N#Am@5lS<7kUX0)>m?)@ZuKvymqulV>KzW|8@?z+r-hH9ZI;Xw3QLRh6o*e zm3IFY8=W-#q%`wYjT4s&w{R|@-|cU63vjBC1l%6a0UMR**!i&co#)B%UzKot`sW~n zj|@DitwN_arXCAs|5>@qs<=moZWdU?GD67U))A6nt}XKHIRWz38X?q!1KHLZhZ9Il z@^AU9)KK}E$M5_CD zi>1N}S*l-0=%@Rl1(1xZw7)~p9Z`-)x6YJ)p6vE%buU55gjRh+x$+0=cAK=bJlqG>lX3G z9P@ldiHo)U&Vht;4z_UxF0VF_Q`7Wk;5U()PP+({Mt8?1fg$>c@uFMhGGCf;7#|q>W9COg-Y5&k zEOGpeY}C2Ruo{7!7vKz#$ET`fs?-oE97=l9;aOoyAC%{TJ#<>(3;2+TqeG={u?XxL zYQU(8)`BKf$y^a>SqjR@TK&g!Q@@w<+Fc$+SH~mXJt}4Ng(fn_UaP}k6lt^shA_3{ zZ_t1JVblv4=-J|UGbN(zFvHsZ@8zSZ1}-ppbw*&Gs#okJ5Q8{k&3cr_k;RL&-{!$<9g?YoDD| zywtp#y-kv0Bi+DyVMZjU3F3+@JG6pjzG$@+uMo(iuL4qnJmEU}00Ij`W0Kg9R#iD6 z5-(qdgAf=;?PCJV9fjnIJ-|hQK%fwnt1LjAxvou8pLyZ$HGc6k0m=`+AoIl>2e0X5 zFcTk^?{*aRky=*9^+(F3irmHv!kIDbcP6xGGbMlSv8Bs8qKtOlUz_)0aGHQhAwqo? zia0^OUv6gQf_xN$&ZGoKT)3;R-xboBMna}f#mUr=fT*}_*zxRF()HcM+h$FA8l}cC zo!hTT*Q9)@Kb5vtx})NsyM)NuD7MQXbdm3!QO;BAaYcw-~0MptH1{bF=`m->9y@98Z*3Po$1r3 zRS~Ep0)|CZ?mZ!1yId8@p|Oc$AZyr%G;NTQMyH!IDD=_U^EOpbaXA6h?|SCwXHUhG z0d3m-c~2s;K$Spw6n%m7(O5$Ul}U!B=|JhS-5_i_d!>_L!l@qt#asxV$QF$o!aLtB_;NucTjI8-+&`r3{mq5V-- zh!TyX8fNefj-_lS*SKhw`GshrWZl1VG`n4ZyUM1wT%KY=Mhw z3_?x?lXGGW6rEE4+Me7zqmJ_TEYzH%!=fOi3MC|8PC!AP%DR(A zGdLT#W#0-uzm)@KvhH2Y@|y#%%#CZT;jPTcRnSDKFM5x^ed@b%TLh34)dAh%E_`Mog!p(o;0U*TzMPFIylqa)T#+UNE$C3AGrO z1-~*xLGZ$Oc5pcVCFqHw(BD6w{z)Ln*374nD(a8>!E#@{_a4P4(Uy;*lvP z;IIr?a{*Sw>B$7^JJbs(m*<_Uiq=Ur0lhl z@-ghulS6B|FJ`-w+ys2WZ})PR4f>DZkrJN$?rKz)!DkFNT&G`SsO9OaY7#&U`o9a6 z+3%7$K?)tV3K**MrbZC)BcGtLTWnxfZ03iZ?I`pZy51H0=~|MJYbtdiq=eP$_zd=EGpMhA$*JGJ(_(kkYQWuP!{k@66ga*`5r=V->=ZS-st-o?CwD z`^aL5A9-8TvwPTA_E&jHJ5u#}G#HAZZ{*l!7H(;DMVXW)lBJZaRLY zuNw5rD73M`N$*WLoE8bY{9Q;~aBsHdzYm^BB}lv9rAvEzNy33Mgt+($k$#_8#GZd} zH?spEk7KiuM_)ddwt7`kNdnQW#k7_CE+M^ZNGI*3+KQmz-%TlJ&w6Ise_?k|_6hBJ zwJ%^dv3&Jm_E*h5LgcY@CFHbY}9j5DTjyfRNtEPA6 zc~fQM9ce^1nvD^O7i0tp+DHjr)mZEBoc;9gtlI9XY9cjl<*{Xn*`G@jc(N0-FFZL$ z`v-izwU{mTr=K+Zk1Nxf>aAJ3F77u&wq^YL^37IWEgZ?zsIe8G+!m^I8Vna`{@SMt za!>ChaOPhP7Yy5`d&6%EFP>*Lo&J|mnsb#-;AbvYDkrL!@Ti7r#$QAdS#d+_F&!9v zba|KZy)mR8#j~ood_n7Ve&Rb-p9+E>BL*rAIX!nBRSW&|wJMmAp)dL2AzL>>Z0`F{ z8=*BboEmg3z^i~cSee-164Lbx-dM;JM(zU&4Bu7;n8uDCC{Nv4U(+u&A7~GGk1WVk z43WZy8D@28OV zX*ibcA2o-6X)voh+9Hs|Q1$kqlG*Xt%3sY5MYul@e%xJ&oR3tr`kn-&T| zy`s|n*j0)%5C?=B2lW zQUuC+xZ;tx5$sVF1FDpTjo5_68&gF9tRzf>T`BP#TWrTSus0jvq3O72f^>3cMIPz> zI~HRkcM6vA(qnP2b>4?Ck#&^O9*hCC9Q67KJLCvOJn32&TBq=w<%^+F60+dnF8pu? zwEz-c2omO;&oy?0C}AcT^gqcjbFMzEcXIytsu{)e#1vx{9)J<2Bckp(T@_>;2@L0?~>s!4VXaIW3IC11JAaJSsv zM4fYyi2dASXXy{p}B&#vbDI%OgXGUFAAS!W8BWclBdnp8IBk#zQtsS2Y5Y@mU$%0=R~k zDVU?nR_WHng~nsJy+k>|cmP#h&EBdINq8Fi5TpkZrBqIY^)xb6ROA5$B;P#52A#5p zHEi+r1W6X^Db-0mQn$m+E+leqEx`KB0!ZaD$`5mzDXfr)`;7k0Q^oK`rVSF$eJ~f~ zdg65y9>4d5Zoj+jmu>1~N>j!(ykX)<1Dm}Dv(m*{;Z7ZG&Gj?^7xRCY&};@=^F2iT zVc2uVmBb&OU2X+tp45;-16^(S;6p+ip6j->t!43$IkbF1<-ac9wV*ccGASWGd-A-Dt*Sq-sH0(S|LKAzu<= zx!C*a5l#C_V=JM155RyWMTT2KNIf(<8pb#&_yEOA4`ai8C$FI@H3<6)?h-dvDJxyKC9*$y}S=7a*$$8%{77Tj5kB1|w)i(vd(^KRMB)~ynddUh?gNA&cZ}MABuO(Fw}TJD zIEh($aXdSdiD`d+-0o6+o`&>$A|~5h7WOpTA9AnK<6a?Jt&QcJe3pqBqW+<0 zvk$Wxfw+idnY=ib6sC6x`KaRO*$Tb2K9hWTDfMO)C4z(l3$7MY^V?z7!(?kHk>$CF zN>UV2wW;`&2?S668flGetloY;t-iY|N5W&MH*`b=0B-E}FJG8BAvQjIso%N#{5T=3 zkvduIkSjM`*IQvD+OwSgor4NyiY>BOn|5N4*m*9~AVk8+%HuL&s9B-I#r2|)Epj*~ zb%Il}Nk&uO36k*p=NUWjjiY6)aPJ4>Ff}dWa7>7|uuMPQP<)ETQvG>8sP`u8Q+aTV>X7W_A{_V2GVt3Ifg?EVCQ!1(F{KlVAL)kI(4oe4ziA zqk;i$QNYo^pu?8s`!3nw%-JWkJpX^KW!uENqiU;O4D?!$&Wc<#VdDiDmEL6P4 z#OqM-ZM)j0f3&1yv!hRx(5d`)r|KglYZf?su%&-`S3N@u^PbS$SesdQ9|a8m%08Fb zj{7UwMd`&0A#Y<6Er=OP)w#sBW54diuDL~^a1Y3)u>Vo7#-ft(iByLKiRx)fVPa`7 zb?}B0d{}E&pnx$;iL(2C7*m-cP$?&k7JqwSc0Zh~@}38W%})@5(Y{TL-RD3g9$e=zaxydO8%Rc zxRr^s`&sJ2mLJD8<0Ci5Gqam7+QO?$H&5==(DTTPK|L*(=+jBPoC?Lf1ONU<(s?*i z_5XkTF4x7ywXc0I+0?a1#p-mcd-@`F=o9EMs}_BKU6 z^Jrv^dJMj+CxtcjinBdfaHNIFd5+LR`3?(jVrfB7K_v*!e2m}~_yw!fMDjc*cib;B z4h&gd7FS$zIx1ow`h4rP2cS5L87)j$qJP%tMj$)4KEiXcr}6UfT{%qu^}3t-&Mh9x zDC%mjL>-{%U96!#tx~+UX93vEiAetTD;edP4%sfKPBm*xKr^Kd#m7E7RZh=Cg=XL4 zsp-67hS-UNJhs9Pq2$S}5TXtd1Nq)+eD#B_LUJM-<+DP;C8e32%eCL6MqjFR>i){6 z5ya?DpiOZ8(0kjzKhcCJuLM625*w-Ieis`?Ekqm7UrwclmAk;O2us=Z2YLosQ0R14 zD?#kP&#-lxoy%gb?t3*uQ>)i(*b)uMRvlHR?MsiI|7YnPHN-C2?SMX1zY1P-z?e?~aEgl{;8ip4 zAG?Z2;t0%w5Fl2phZuG_ez`)6#iAaRJ^?d*^f5Y05B6$pO2VWX3N(Loj;?uifybct zvq@z-R_E#mR%S_slrpA(KmA4KQaK{-rX*IU0<2(aB^W2IG~GEHrl>Ctw`cEdBkEzwmm zQz+OY?4`ud;Ip5X4_?i^V(09C%L-gQN0Te!z&H8v;$dn6-jDON%?6J?9+M6Ec zOl!1`<{`zcN@gy6GZGbPyrX&wguU5oe!ft-l4vQ)8Vv?R+@1Mm@Ov!a@4Xj+%9_9M zbYtbni<9p2^>V1~ZDj$k&Zl^5Ll^98ilKAw8zp5^hf906d02;`T9R8YYu^nzo9U_{ zf*e0xDrWl^=w?rCTze1C#Y`OzEIYlkJ~VgR`40(9>x4Hjp_>@l@>}GDBZm}Ayqs(a zynmkBrmHQ=G?aO0&V}kGzANX?_XxCA_Jb;5AX+*%`Lzfl!08HP9K2z)+0#krfVzOWnul7)J1L# zRPW!1_{ipI-J2CcT-db8zzYE|YJt_&f)mfJar#@|SYfnQ<;A0?9|va01lRB(u5b>1K=+v#0fL0?t?aFKsR`rRW*?3@$zIO2am?;h zJC3KSOMEn9s^xcI^_4$=s1}t6b%q-ra28drroF3xa^+v_@~kz%1v;enYTshfA@4L> zpcs=72R}fvn7DzBvPt{3|B#r=t4{do$(nj&wZDFL0r0x44j1$L^)<8~Z`l_BTgTAR zEx|;ImfzTlrCsZrw2wFvkl2FD!9J^`xny1tslYpjp@rCSRX6bBy4-uEwl-!)Un`-e zXn%aCl6*Ooy6>tUhAT?1wSs4ulk^U)xbCG!yS2T}&zT=GMu;_L%6=TI_jjK795@({yKV*-mVxx6$H? zOAJ99^Q$|R<6z1D12yF2;qj3dhTLUBm5#KIGY3lvCyXDLi+{^_n!>K{^@y1X%?^#K zpp@2b8gwe9*God1SL7Pfi;VLw=*mhdiSB(}OLeX?=259t>xqgZ{>))NLwzhsfdb;+ znsdJY|6~jjKiM8yAX_jocRLL$9-FXK|K_^*Sq6hE&gCzyx;GtYdawC7IBexHgT4$# zKSE8dHKj;B?Brmxkk1MKil#&PlxWqE51x=8(JCH#I1MIwxcJO2v^;s=KNnOZ2;eH` zOd0t`l4PKTW}7%x8ZR75yi>5g{t*Z}yZ%v-prR0YlT9za5|zq+mB&9 z!)H#HRtGyioegnGAu23=t036ra9KV_HHw;=${hzQ-+sEUBEqE&@#ijH0Y`A-*l(;T@Vix~a!PeXc${s+~V8N25dzcJTaw0XbQq;(w3#TMv<~=8^MtU5d(E zQ!}Th0+u`VR&0}V&)3Yh0$PW9|9p}^seJ!V{A4z2zIRyS{oLn!_i;!ZWo@$3`&Q`Y zr@tLoXg~l4mWHfyyZ>8lTe;nc?oeg==ZJX?S3B$Tm3EBP zliFKSMDiM|Rg^T33(sH7grWZ}P%BL@vCeMjeM`C`1Nf{2GH^m|7I|amT>@%JBw<@$ z5@N`HHGGiyPm>@@7P3B{?ZZ(UlDyyuIwo9b6o;A^sTBqHDWH}hCy(XGMY*&_RQFk5 zA`kG?iqzNhco3q*B&)7C>j z6>{;Ah&5cpyri6EEiJ+u%P5NgV>z$>NiHXeqpKMERF-FtLHxR`q!_RjD`so{jt4a3 zDH%x|-eudqgD2v7IJ%GsCK8Q9Z+9^&hmAIx!iH|YpHth}axY)!tPG=RLkl@|9-v=| z{qR2geyF`nDLV10kW`As;X(f~P&MaxcZINkb?v@fpK2AR6_kc19cStBEW0ed%TY6%@bqs%ZKYOg^9G#KiGWGIFa zs>{%Pmk6zmq#xgmsLiK-CbVmXg~1|>&!>Jc2GU>L{p@q7{<@~76cK!tGc~^R^4Z>} z1UnM~7=RM%z{{5i{lp5+Mt0$v^73?(1;=>6F&b3$CplG7iIs6u?b;&c9+4dOp7-(N zJ)F7lb2*(fu-TO0)f6DrL)cq?b7=D5wkRDJc!L{8HgJ`cz_pe9-g#tPnXe~HV2f4p zXABKmRi-78p)`^BotT?VF=R*Sm||2QB0v$(s2XSr!Zkdw5nh7;N1I23dj`_Y*YQP* z{rDR`t!^zmLI+`)Ng$U~V_>E7U#>-6Icv2?@o$(^o!!Zuz7sA0cvtTN&8VobECx53 zo07Vw&YG(1tezk9aItAJ#Y;pL4q?NnESoRyjG7yP&*i$W)EASPq^zs<{jYV}%Xe$w z#_6OyfwVH|t)@HNqcmr`8lxm6;y@98J}@=?FQRtNLGOPRu-1)64S}iO?*>A04E(Kn zKizz*H>bz+W^70L0%8e`D#8cN{ex?g&x5yqO(!%oa?OrUQ2fZ05a+Xq@oN}7rZX=- zcJL9fEyA`b*-I%?`qlkQ=SHHf7Db4KWdyNgM$Z{bzuqx)hcFoBBG|}b8%NBC4S+AmWTk$RYY!-GQi)Lzf@$hU=GU} zv$(>*bKkDek*p7*86-99+?nsqR+EFRg`Uu8VT60oFi(%jXtL{A#OdyDi{z*)^c&4J zAdYFXx9Hzp{+vQ9*fTYpQ}M??kzM&&zcvDdAPP;aqM~u!?&h`vynN$#{7pq(kcbS{ zJ&{kDxv+ND`qbs2OU@s2Yj2c8;dj@t&Bg$Rs58VS`-HubN>gbk;^ql6FzpP?;TD3| z)z%-80b(Q2i^$J{d~&c*IyU27Gnf_pcQpPph{e|hUk1IXF(4@cWrhLlpe=`Us^64` z-~c%}{jcNF#lh*~@#w}@1&-U`l=zljP7=whz%0Wbe zu0U~ks@E|>0qT+)@7)xGp8zwBxF^QGusGgpnJ-oGA)af|I{LWW{1_Z%+eZTP7j|*p zkKkNlfe$}H9*``+^W}FwFXoe%r)N1EOLaO5PNY8-et37pENQ95YZ;Mfr9GeTkDrp` zf&Tkk>Zr%4g{hl2rJkL@%MgsC%ia`%p`zAzxhq<4%Srqiev>UEqC%lhj?Kj9vO7H} zonSM+d{n7%`Z&Jx6>rt%LV#+a2Rwjs>S3l>>;XkG6%WInJSIDH3xlSNQK6SM3+nQ} zjosFbW>5;)TRGQqK=kT7JUmm9gYl`rZ24(OK(rL`n9~J*!VB8i$n1^>N#{{H6rUjU z^pd|Gce&Xd>_R1RIJLv6r)87Z=BU>yaWQ%2102d#~jwXUyJ#@NvvB>Dpz zIPW=e3lX$sm1GBt)uWuTpRIRuz#3H&nolR=9fpaMpKJaM`D_DWrek_-cp}i^+e}!Y z0mD|JNu5o})+eIy&al3?a~? zN-_tquei}@dMp15H5A52ocqzu!Ubkx+P=jXHfl|$a7t8JSLT!!=m|)S7O}6Ae((VH z`IYJwA)m{f+FzEzIoXFamGJqFv8&@T3Zh`e(>J#jEHxF2d+h=Mt9k|4MSw7z5k({V z`Z6q!Ht*Geh!v%Ipc|@7j3Mj4Grg*0;b)L8k84Td++f*^9v5Box_bBT)!`B@ZyC=a zhRUHYd_3Y8-@Gd3{l%I{qrUHI3btsn9=?#=+L7RmhU9h_{RjH^jYLG4)hupMtLz*+ za3sg4UHkb;V|IXe=QnWUdTv|sYs$Lj<$vHej!S4TiBshP@7tN1hu2)l@o(Eq=v;;c z;5}?C*wpO;J;*dcV!`HVl-&g7gBFEGUefu~<#o%n!hxVkC;DeGv(yO~lqm{~8l~a} z+XaQ@e*}R+ROfrE%cQTD3M7|C_q^(I12kJX0;Bpz&)9&kLbGP?#C(7UHyw%kDne(N zdo+z9M+7!(@{8u&mWi?25?Q8#24ls7^Y{}VVxNeq&3QB>ugbJbvf(Q3ggniLw3{m|dnPehatjcg;X`NsOK_Pg~cyI||F-8&5vJu1_DS zyBk9M-1V4eDgLXM=etjPpg+-`v9^FPC>jAi@+mIpFe)&3bnAutt=nP!0Akjk!j6E$ z*fx}pG>@+My2(4SjZ1gs^%4F5d8daewS4ZWkHHc2BWkRaA=_pATmIHaCB039X!4;n z#qd`4Th)NC^Ljf9a^*)y$xvAMF58uE!jbe4@wEgOnB!1aEcl@Sx{ra-2LBS<7WU;#DOSU)R}@ZEepXQ)ow{31IS2~@ENiOny`g6Sq2yU0W02_ zrWwD_fkE62l%$q|spA6X$hJ2kyPmyG(>H&O{Aa4^8?(iJ2?l9GhZY%OC6A4S(>tx* z*!OIQ?|yRHlOh=`_F8eI=f1EbXe7r_w#TrXskz`xg!M9Qr*}T>!IMxFD}AW7SVY@w z@Em93%^CW|C}Qpp@x|TAfyr=Q=z;`T1%szB$X|fiiA0+;^MHue> z3;pxtV;`Y}JbkK%`)e{n3x)xk&X>!2i2CE99)CJy6*^@|0_>Z)9 z`w5KEQJ`I=)LUD-a+LQSUv@+_1fjO@(|7N

_B&PAHYx$@XJDvk@mrH7N<@qok34 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 i4yxg03m0`^!2b_t0fVYBnPiXv0000 { }); ``` -## Step 2 @fullscreen +## Step 2 Look at the simulator and make sure it shows your name on the screen. ![Name scrolling on the LEDs](/calliope/tutorials/02_nametag_animation.gif) -## Step 3 @fullscreen Place more ``||basic:show string||`` blocks to create your own story. @@ -33,6 +32,6 @@ basic.forever(() => { }) ``` -## Step 4 @unplugged +## Step 4 If you have a @boardname@ connected, click ``|Download|`` to transfer your code and watch your name scroll! diff --git a/docs/skillmap/img/space.png b/docs/skillmap/img/space.png new file mode 100644 index 0000000000000000000000000000000000000000..e95416bf2518d52da30938ee96221330aaf58014 GIT binary patch literal 17588 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 literal 0 HcmV?d00001 diff --git a/docs/skillmap/img/spacet4.gif b/docs/skillmap/img/spacet4.gif new file mode 100644 index 0000000000000000000000000000000000000000..84aebc51ded477c3ab445da5941c4fdced6dad69 GIT binary patch literal 85563 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 literal 0 HcmV?d00001 diff --git a/docs/skillmap/mini.md b/docs/skillmap/mini.md new file mode 100644 index 00000000..2c23ed22 --- /dev/null +++ b/docs/skillmap/mini.md @@ -0,0 +1,37 @@ +# Build a mini Explorer +* name: Build a mini Explorer +* description: Learn to make a Galga-style game by following this short series of tutorials. +* bannerUrl: /skillmap/img/spacet4.gif +* backgroundurl: /skillmap/img/space.png +* primarycolor: #2EA9B0 +* secondarycolor: #d6f7fa +* tertiarycolor: #5d416b +* highlightcolor: #FFFFFF +* completednodecolor: #504c52 +* tags: beginner, mini, first steps + + +## mini +* name: Design a mini Explorer +* description: Let's explore the depths of mini! We'll add a vessel for mini travel, create some enemies, and make sure we have plenty of fuel for the journey. +* completionUrl: /skillmap/img/spacet4.gif + +### mini-activity1 +* allowcodecarryover: false + + +* name: Prepare Your Ship +* type: tutorial +* description: Get your miniship ready for an adventure! +* tags: easy, sprites, scroller + +* url: /calliope/firststeps/firstSteps +* imageUrl: /skillmap/img/spacet4.gif + + +### mini-cert-1 +* name: Congrats! +* kind: completion +* type: certificate +* imageUrl: /skillmap/img/spacet4.gif +* url: /skillmap/img/spacet4.gif \ No newline at end of file diff --git a/docs/skillmap/space.md b/docs/skillmap/space.md new file mode 100644 index 00000000..4e0d8da3 --- /dev/null +++ b/docs/skillmap/space.md @@ -0,0 +1,81 @@ +# Build a Space Explorer +* name: Build a Space Explorer +* description: Learn to make a Galga-style game by following this short series of tutorials. +* infoUrl: skillmap/educator-info/int-map-info +* bannerUrl: /static/skillmap/space/spacet4.gif +* backgroundurl: /static/skillmap/backgrounds/space-comp.png +* primarycolor: #2EA9B0 +* secondarycolor: #d6f7fa +* tertiarycolor: #5d416b +* highlightcolor: #FFFFFF +* completednodecolor: #504c52 +* tags: intermediate, space, projectiles +* alternatesources: github:https://github.com/microsoft/pxt-skillmap-sample/skillmap.md + + +## space +* name: Design a Space Explorer +* description: Let's explore the depths of space! We'll add a vessel for space travel, create some enemies, and make sure we have plenty of fuel for the journey. +* completionUrl: /static/skillmap/certificates/design-a-space-explorer.pdf + +### space-activity1 +* allowcodecarryover: false + + +* name: Prepare Your Ship +* type: tutorial +* description: Get your spaceship ready for an adventure! +* tags: easy, sprites, scroller +* next: space-activity2, pusher1 + +* url: /skillmap/space/space1 +* imageUrl: /static/skillmap/space/spacet1.gif + +### space-activity2 + +* name: Ready, aim, fire! +* type: tutorial +* description: Equip your ship with projectiles and special effects. +* tags: easy, projectiles, kinds +* next: pusher2, space-activity3 + +* url: /skillmap/space/space2 +* imageUrl: /static/skillmap/space/spacet2.gif + +### space-activity3 + +* name: Here comes trouble! +* description: Watch out for danger! Add enemies and countdown lives in your game. +* type: tutorial +* tags: intermediate, enemies, kinds +* next: space-activity4 + +* url: /skillmap/space/space3 +* imageUrl: /static/skillmap/space/spacet3.gif + +### space-activity4 + +* name: Fuel Up! +* type: tutorial +* description: Use an extension to add a fuel gauge to your ship. Make sure to refuel often! +* tags: intermediate, extensions +* next: space-cert-1 + +* url: /skillmap/space/space4 +* imageUrl: /static/skillmap/space/spacet4.gif + +### space-cert-1 +* name: Congrats! +* kind: completion +* type: certificate +* imageUrl: /static/skillmap/certificates/space-cert.png +* url: /static/skillmap/certificates/design-a-space-explorer.pdf + + +### pusher1 +* name: Blank node +* kind: layout + +### pusher2 +* name: Blank node +* kind: layout diff --git a/docs/skillmap/space/activity1.md b/docs/skillmap/space/activity1.md new file mode 100644 index 00000000..07b704c4 --- /dev/null +++ b/docs/skillmap/space/activity1.md @@ -0,0 +1,172 @@ +# Space Explorer + + +## Introduction @showdialog + +** Let's explore the depths of space! ** + +In this tutorial, you'll design a spaceship for your journey. + +![Flying through space](/static/skillmap/space/space1.gif "Blasting through a starfield" ) + +## Set the scene +**Give 'em something to look at** 🔭 + +--- + + +► Drag the ``||scene:start screen [confetti] effect ⊕||`` from the ``||scene:Scene||`` category and +into the ``||loops:on start||`` block that's already in the workspace. + +► Next, select ``||scene:star field||`` (instead of ``||scene:confetti||``) from the dropdown +and watch as you blast into space! 🚀 + + +--- + + +```blocks +// @highlight +effects.starField.startScreenEffect() +``` + + + +## Draw your ship +**🧑🏿‍🚀 Time to choose our ship! 👩🏾‍🚀** + +--- + +► From the ``||sprites:Sprites||`` category, drag the ``||variables:set [mySprite] to sprite [ ] of kind [Player]||`` +block and place it at the end of the ``||loops:on start||`` container. + +► Click on the grey box in the middle of your + ``||variables:set [mySprite] to sprite [ ] of kind [Player]||`` block +to design a ship of your own! Are you a rusty pile of scraps or a sleek, futuristic rocket? + +--- + +**Tip:** Don't feel like drawing your ship? Once you're in the sprite editor, +flip to the gallery and choose from premade images. + +```blocks +effects.starField.startScreenEffect() +// @highlight +let mySprite = sprites.create(img` + . . . . . . . 9 9 . . . . . . . + . . . . . . 9 . . 9 . . . . . . + . . . . . . 9 . . 9 . . . . . . + . . . . . 9 . 9 9 . 9 . . . . . + . . . . . 9 . 9 9 . 9 . . . . . + . . . . 9 . 9 9 9 9 . 9 . . . . + . . . . 9 . 9 9 9 9 . 9 . . . . + . . . 9 . 9 9 9 9 9 9 . 9 . . . + . . . 9 . 9 . . . . 9 . 9 . . . + . . 9 . 9 9 . 9 9 . 9 9 . 9 . . + . . 9 . 9 9 . . . . 9 9 . 9 . . + . 9 . 9 9 9 . 9 9 9 9 9 9 . 9 . + . 9 . 9 9 9 . 9 9 9 9 9 9 . 9 . + 9 . 9 9 9 9 9 9 9 9 9 9 9 9 . 9 + 9 . . . . . . . . . . . . . . 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +`, SpriteKind.Player) +``` + +## Control your ship + +🌟 Let's get your ship moving 🌟 + +--- + +► Find the ``||controller:move [mySprite] with buttons ⊕||`` block +and drag it into the bottom of the ``||loops:on start||`` container. + +** Now try moving your ship around on the game screen! ** +Your ship will move with the joystick, arrow keys, or **W A S D** keys. + + + +```blocks +effects.starField.startScreenEffect() +let mySprite = sprites.create(img` + . . . . . . . 9 9 . . . . . . . + . . . . . . 9 . . 9 . . . . . . + . . . . . . 9 . . 9 . . . . . . + . . . . . 9 . 9 9 . 9 . . . . . + . . . . . 9 . 9 9 . 9 . . . . . + . . . . 9 . 9 9 9 9 . 9 . . . . + . . . . 9 . 9 9 9 9 . 9 . . . . + . . . 9 . 9 9 9 9 9 9 . 9 . . . + . . . 9 . 9 . . . . 9 . 9 . . . + . . 9 . 9 9 . 9 9 . 9 9 . 9 . . + . . 9 . 9 9 . . . . 9 9 . 9 . . + . 9 . 9 9 9 . 9 9 9 9 9 9 . 9 . + . 9 . 9 9 9 . 9 9 9 9 9 9 . 9 . + 9 . 9 9 9 9 9 9 9 9 9 9 9 9 . 9 + 9 . . . . . . . . . . . . . . 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +`, SpriteKind.Player) +// @highlight +controller.moveSprite(mySprite) +``` + +## Stay in screen + +**Uh-oh, if you move off screen, your ship disappears!** + +--- + +► To keep your ship from exploring beyond the edges, find + the ``||sprites:set [mySprite] stay in screen ||`` block and +snap it in at the end of the program. + + + +```blocks +effects.starField.startScreenEffect() +let mySprite = sprites.create(img` + . . . . . . . 9 9 . . . . . . . + . . . . . . 9 . . 9 . . . . . . + . . . . . . 9 . . 9 . . . . . . + . . . . . 9 . 9 9 . 9 . . . . . + . . . . . 9 . 9 9 . 9 . . . . . + . . . . 9 . 9 9 9 9 . 9 . . . . + . . . . 9 . 9 9 9 9 . 9 . . . . + . . . 9 . 9 9 9 9 9 9 . 9 . . . + . . . 9 . 9 . . . . 9 . 9 . . . + . . 9 . 9 9 . 9 9 . 9 9 . 9 . . + . . 9 . 9 9 . . . . 9 9 . 9 . . + . 9 . 9 9 9 . 9 9 9 9 9 9 . 9 . + . 9 . 9 9 9 . 9 9 9 9 9 9 . 9 . + 9 . 9 9 9 9 9 9 9 9 9 9 9 9 . 9 + 9 . . . . . . . . . . . . . . 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +`, SpriteKind.Player) +controller.moveSprite(mySprite) +// @highlight +mySprite.setStayInScreen(true) + +``` + + +## Finale @showdialog + +**Great Job!** + +--- + +**Try your project on the game screen +before you click finish on the tutorial.** + +Is everything how you want it? You can always go back and edit steps if you discover you'd like them to work differently. + + + +## Byeeee + +** 🚀 That's it! 🚀** + +You're all set to travel the universe! + +Click **Finish** to return to the main page where you can share your game +with family and friends! \ No newline at end of file diff --git a/docs/skillmap/space/img/space.png b/docs/skillmap/space/img/space.png new file mode 100644 index 0000000000000000000000000000000000000000..e95416bf2518d52da30938ee96221330aaf58014 GIT binary patch literal 17588 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 literal 0 HcmV?d00001 diff --git a/docs/skillmap/space/img/spacet4.gif b/docs/skillmap/space/img/spacet4.gif new file mode 100644 index 0000000000000000000000000000000000000000..84aebc51ded477c3ab445da5941c4fdced6dad69 GIT binary patch literal 85563 zcmcG#Wn7bi-|v5IgE6{0932v)%h>2{X$b-8MjG7cRJvnyBS7O9!+#qGz%gymW2Y-C;C|1kf9a`J|v$|2stM~IT zb>aHj=y_@kiZD^I@0Om6Tv{Q>z?Utr#9KP!ZaVhr0$)Tc0s!4<-#&4VO<)BSEH#0W zu>8F6T*3Q+ZqG|}p0(Z1DG^jGHj&TNlnZsa9~&#!bywAOa_Lvs=2fgT&v;b8R4OR$ zCu}HC)f@nEINo{T9^E7<8%YCLU%=Tg5~cvaObEg?K;+sWi%3i( zB><2$0L%!8B?3U4g6Sx;09wqxB{&QqV?t`=MMn(KD#YetO6l*{Nyx@2Jbwph#@@dF zL@d2UP%HSJLeiszlH#ypFvuuetS;AQg$h;6hD_zYm#-uA((>M0ntQb@9)=B(wxD*Dvq0%hKUg9{p4dn)uws_hqAc`TyKOWcyO4^Z_?c8q1G%=Ws9v?IyFo4uJx_s;$%BMKOBGhCUnh65;THmQ-2_*5jlBfswnNeA zV4tBu%%LjJBPHUCsO4Cm^2$e=8@$HmUWj*6NCI9M51dU6TQL~J-qpPE90^|72oV~g zV^5TDLzg_e6SuedJQr8aELm8jM}gVF+%_7{q-7n=d=*(~0Cy5|+{vaiwC13s%lGKb z1h1@@kk+~^SM~&Ss=FYbVAX~XZ1I`Xo1A_vp!y;r=x=miqQ)X}=GW}Vx;z^~s_uYe8D){g)F2;$1BCP z(Es}?DOuO0bBXW3VtV28dlR{SrT2bOwqO4lJMo@rT?}2#|Ngr++-!UPJMJim%vIf^ zm(pMj2X_hv;F+6&Y3I9f%YiU*g~g2#k5X zIZ(NzYfhOR&iw0g&;d7voF1jZ8o5oUaG}c;Zx9Pp@JMD{L!turwK#M|hSe;--6N5) z&d!?Z*2|enOP@g->Y%|dlM|s0L`1}Q5D`SSa48VFpGV14`L?tUZZ}amE^m7Tq|yt- zy8r28@n(!MxE$JI5JnNE9}QIMJ}aZ*N^Bh-gR-D$Y~k``VQ2v7$k{S1&5lksDQ~Tz zDv?LJpEY7A!s;R^_i~9#pqu_09rCCcysxS)1A@F`%__=&(@1egI}BfA34viAtx(7Y zWebT7QX9ke7`{cupvo2T1iQ)QcsF^Zd?(X}C(9Mue#FLEq!BS}S1M0}r-)R%fgav{ zjTf*I>z_Wkc03SfJ$Mp(gaYAu1XQeY8zkj}g?ML$^Y{2qC(CdtaSlDFp*>d*CU}6W zNIXn#z8(kWrzX|<+)d}lknzNjy5dc2GLw@I#QvL)y{KuGktdu?vYFM=t~&w=omR>P zle_?_jMHO>KjJ1*82XRZSYSrxZeO{InG#>dBIIHX3&xY` z=Dt@%{#wt|DwjbpI|+?L)6h-q<{$^8^)-yJUd0=Rc@&8k){J9RG@c>fogij=uKVJMg2rb4F@FF#3sDwcYAGTNQf&oo z>**o=NXx?ELQiZag-1t&iFzU1>|M}AawR;`)lIm9x0*@d4tt=Y6oDharc$z-X8Mfu zEbrG!n>`C4M4gck#pCu;v|lbO9>c$lr%XLKxxWJx5N&&@286Q?p!0W{@!>brn7R&1|Nc0DhlVAUUDiw z7!TqwvAylT8zkZ}7+-GWxzX@Zi`{Fg-&_un-mYNy*c6ot{X96M^9fQOsL5}0F0ZZX z+?^Pm-aamV`ziL&q6C{K#aPYpr=>NC?$8jS&!F*S@AjYLWa>PoRU9=&CmHWga%aThm7=psM|2SSlUroFc{a|F<@UcA{Wn0 z>|ejTUv&TS{Y0{aRmQU~#feen+&yOmlf~$)+t}$fR1OTCmA+2FVDYl{0LerLilST+wG&=A)TuQ z8AIsw>0Zw~awe)hgyA#Tik zqr`Prij!#h?5OzTa8v!S7599 z{8KilIv{buZtL^?>o4YQRl`fz)3@J#U&Uy@rTDn|=N0W+c3|lKdF~|9pQw3Ahu>3d zw9!XAJXRIW3R0)Xcqj7~%p_Z>?Rpp|R?R z?_28@+dMW$^3~hwmtPBgU0Z(N_G0zz4UOIKUBh}`4CQT$&Mfx6NO3%wFGKzZwj;7a zM&*GWCGW>`1;YQ-O8d;!U|0u5Wd_KEPCW*u+SNR8e1DE zQjx*K87$Uw!fk?iW+SdTlpn@ZRkyQ&1P&xX2_jl{XeYsMF{;n>U6u3WE&V~Z1|a^T zNSd{PA`T#pIlv&r^bRJ%%dQd&PSX=i&!e>?+e#3fdlEq9v`*f<74VoLvOM)Iu@%~r zY|@Gw&$ajLah})If*!HNe3HEeD@ixwQ>t_{1_1BD`?37gfqT@kf}i$El3wEECsU?l zc_0ZQrV!%nYATCt3TrGM;WG|0zN%YF*V5Bf_qFaY=n<*2iAs@0D=3YE&dx@GVsI9pAlU01Pwt=qf44bc0}6bQp+}vX+27!N-tN-V>S6E|AQ0jArs0&DIbRB}et! z67Z~f$B1#KG#fLN1THSgE!{$MZWn(OqjxK0c|D_sGnHM zc$|zx@~E_UGf7=5Kt98!J^;uI`ok(Z3KMOitxlYaV2`BwmSXb;K^2RTh20gSNF8>F zTmER7}hGQTk zVB9Gtt{1jQ|KYVJnuX{?(o!XQJ0C`a->a`JLnqKt8~FVYkIQbnKf7<(L2mT#$yC5X zjYzD&fb&DANLZ*y!9GeYoas!%5iTxNY=yAl;fS9#9O|Wcl@y6oFH#Ox?qm2g5rs#l z1o!plSZ0NDvB8ST-bAbPvk{ztl`C181L@Foz5Ovd32YSUDs(jHhyecBVwzYfMe#}u z0(=UiF?u;55{HeqOe3V7m>{FQ_8`uI;>{;EhTHTluL4WSS#>bDwe2>M_F}5FXvlYrA8T_ z(eQ}jt8eKI31$5Ds_)Yhuo>;6WrCgykq>`<%eAaf8Wg|* z7Jc6^{g={y)kFIoO;ytsj3I$+s1{Y0;^3tE6N5;OnHN@lEF3?g`q7|} zk1odVTU|djTMUfk*QC~(G>3dTSjLJAF29x4kGo34}e)mpq_<`egx-kW9IE!+IasickSBp}dpT@~jnn`)pPL4}Pb6(J5 z`nCVHAgQ;B@U08CX{Y}Zk{oGz2NcjagA%Sf^W?<7?&!^q@B>;xn2{8tN{n$ zsxzBc)hG@6(#fyuKR|ty()>_WD_9t0y$Cfgdvp1Xu%YXZQ&B@V5p5e9l;!XF5y#S> z6@=pW!FXaqCV6z?OezFF0T{lw;|y3NTpbVc*KmEKrM8h1rV|SXdH3`7EqxnLvo@RR zqtr+`#j&1XQkvj3V-owIVecz6V80yn)#T60;@NEG-QS8cdir-Uv&PYyCS!_oM51HH z{8seDC2?;~>BPgyl_pUob-s4u^H$-uy|1nxy0)7dg($wt^wjBHclFz8YeAEeoX&;E zJDcFs8PtE@V393q7+@4iklZGM!CwL56X=fa99li45xYAl5tJDZ#?koCa1gKdE8NYp z4(&S%z(?t^&rnc@{)z6B4!q7^zPwj%*?ZmwQ~GY;ycNmK{ZQ0Ie~PxRtm-QF^Sc9! zq(~{d^=P547B=?^@8g%x1+R;B6&mk(k-E2ut`7KnCRA;35M>DY}G;3bik0ipz!yq9;Q^MMs`F-VMHWoOeA?2**#eAV4{vYmjWwb zFx2ZP%u1L_h{1=k_btuC!^F?#$*xCrvYLjDrSB85^%-P=DA{af?S~l2(z67(WKQ5Z zX>8OjPo$J_IDx~!XLQ=#I0!*&oWR@-nyNB_2Z%6ouHi%`)Ov+j{fQI|+1=;n0l7zx zf$`{~!7RsUND7C0`)hVjI93_52H@rOqHsw((AvQp9PK4WPgTIJiXae7vb%>{H4K7_ zRY<*B-=Y>fAJ%y$0+e+Y{{B`9f+12k@FoBPorwyIwJDfvI~oB&#FKtem5}tw6iHX5 zxVO`o%|Q3KI21X?eDpGEFd=cLby(9)P9MSmS9S9#ir>zfCXIDT6{7B-_p3tU67nX{ z@+=Id9EZ^+VKhF^t6tZF#I$ikQ7T+|9zsUO3h;V_im96%6H3n$|C(qI6^NR+P3Hs0 z7Z{RrozlU@>TyJ^p3nVip(Ke*`#ckE3uVAPLZcsE4tO6Jd z*7ZO<_AtKqvr!UP5t_rqUtKffKmGdA4|i92;Zv7lF~dQqSrZ)pu$eZ{A~G4=vB z^j=PomqV^@1cKUAx0LHCdabQDV#0E`Fex+NQ+C(&>G|<$&6PqoWZ%utM%|LnpN`nR z!!CzGeS<=DzSCtwEfqGpLG${ON+z#QmQ&o zY_KwC%8UxN#Hm{SROgx3_0^9EK&Abi7Rt*mFFs8{EI^fus42_YbRngd#^2O1L*)MK z9g&)~Yb!^?CflIzvNCV!4Ll#yNZOoLiAapvk2A#P>~sp5&I` z{Q0rHe!bF{xJT;PN!rnM!Gu>l4oAC+AoN{%!!K^$BMK=2^CG?a#{NAbH3Aa1y?VB( zlp06NeSP{%5zl=NGIwsgr41Ir4%~;Fui4Jc?eYCmO_oX@ntWRNoK}l3;z4$6PL}jC zV=V7`eiCF_vdXFKjAA3(&BgEgGTE+5DZ>|Nmk$uQ9C z^-p~}pTAW(LTE_au(+FU;S@5+CFx8I zx((p=`X&OOK00T(^v!;TirM9h23#Aw!UgNg@DA+9NIFy6D^ze=&#kGVc2^(vm4pwy zKJmIAx5`cG&&^@GI>vRCa0mM%$eTsfOme72(H&nZ?a$c@{9y8;>UA*}mJ9IeI0?SI zWzc4q)cdpI*KXHATb+~IQy0bo@lVSl-pj!MgFaAzpYX=ajRX1r&<9rxMuYul=Kg~| zM6(mwSsT3#HiJHUIyTte?NK68&2LvMd}*cx%P$FZwLdXpeVxobG-& zL>6kjd3Am`U-M#U{LSm{U)TELuWxC0b^bWrn|``l-}UC#_v6i*X#H*1?_Zavhi|nV z-rm%9hRSki9656I;5Jt7>~6Uxt7CvB;Di6^(ZFaz4d5#6wgKsM}`WM z^G&qA5y#)Uw-Jwc$FrFr_R(Q8QEI1h^Vyw?J@y1bejOx8$ixa0yN|01fYbpGGD z#;xZD7xSgcS|VHhw3I{$WV+Rkzn!wWSTjzhMN}16BI?nGBFa?|0i~l1265B71)9j= zGkG-Z6!N#mDxfT4ta<2sv^;jf7XGmysKopPS;~?C!U2dBjNMC-@7*7uwS+ZSxTl%Y zauiVzNpn|dK(Sjm;Jep14iEjYy13lhR;`=b2+^ZJ7ZY~E!zwIhRa-aovYe0Zk-sp< z3tU_?6qLT7ESyLLmUPrwip!{!bc3H9T*NwNWUZgPY6R`P*$4#bHcT6kkmoeEF0WEE z;vRNheY!pI79ec?((O&Z;0}Pe6NGw*2xm(vBPGm|D1v;G5JXAy2)VAGrgOG{3QlYU z0Ur;ljskxU6wZ_)aU`N~t44=xm^aG>4B*R4%e@!+el;;@5vb~guLhvKySq}ln?7i8 z-}nU-DVBT&0*uyVat~p3r_CA9&S-VDiG63UE$$*en)%iF0$mKBeP{5MANJKY*DtqB zQjI2qmO#qaA@AsY7MFb{ID^;ZGDwv__xIyD@n5b5GCXVFaD2JkUikb&3;;&0ctETJ z>Nmtdq<0XUau|CScAUI;41@$LSv|pB$m9Whu0HffL*+NZ2<^J~&SdmnsKZfTB%Qj0 zKy6E58~g>kN#VPhY?kZ!-w*x4 z*8id_A>WxyfKIEC3w7SOpQSD1hyGo(7E&U-;)S!9$~sw$23b)*Vd+QK@W;|L$IPYh zU9wQr0=CSaxb*krphg~KcUf?XKnf~ylm%pW?C9tzxYo$aJG%k)qZqd1i3r+f_O^wU zMKsrPd*q57VYvLq)&UxQH6}Vbv3u4V)OoOh3xzU=4-W5lNd89aC-Hbo=G4xc$rKKa zyjrRy40A*82$4v-c2A-*hiS^ykbc~>q)4&(u)8NePM)I`BH^IeYz?FxEBhl-?HoU4 zH5HrZ&igj-8#5=zl45i32*t<7uBsL|^*kdjM!vdIRm);6wUP?O^Pn$DILsD@T}4S` zBMcC0J;`tm-qf&-QpKMX7NO3vGirssdlc&FE$C^d0*B}Iw5O2$K7oOA7O3q^r|$&5 zejJilH0Bm~n!83+AvLHv?v-BcIRBu8|wnz1EZCO9g} zYEvmWXOhf_VM$G{)f9{ z&8MRN=PudhMMmhv5dKGW5DX5n1aj}M#FB~Hg{j`S%Luq)ikK=H5nVdJI|1`29bzaE zCWi0f0b+M3oG4HZ7-{BH7B?2i;3;}nJy)cK5jn0pU7Kqn$FG_lp{_H_v@Qy(I-WUN zd>sKtQ6zzFda3x0uf_t~8WbR`hax;RdPtoX1qc%6( zuIOZxC0ywES;?_+en&1e7uNzsPBC5|F!(0X{2|6p zLj!ww$vxd@UZv$(6u|q480Y6WsO*P4dY_6~bXTMg!kqTX-B>@B6(`6ru$QLjRd1Fh zrIqql)QX4~`a-&|N6M(gVm@tAwSNN*)e}%>8q{zwuiLKiuYkrd)U=BJWKWd6p zbhuSF-Kz%1Z-3{2N9!OK&)mEg%K14&aSAwObVo35rkEf147RPm3*up<)0*cDy~qa* z;N9YQ4eI;`4c2!*-;ljs`}5nOP&Zieio)Y3x!G2;J5P}UBV8M4|K-Zho#VmR56C@h z-;MuNg3`Aay<}wEe1+EsALPHq=EaP}}z9=V60cv;T`mNq(8nE#aMLI$Wv=9ZGSR?eB7LcHQ>A z+}Q4Z3PJ(aZe26peuZ!EXydMMEQ5=5>i873`@j|&2-LY-*tOzUO2p(t;zX2CB<&;H z>#3uypvXwjBY({F7jlEOX{q^EQxi#)6=w&|@uEQh{ z2LH--+zoa>LXs~r&`$VU!bhqY5ZdzVRc0qd13^JaRfxZ+Kz2lo1gNtB)MYA~g$w;8 z#pVI=^;?fVrY|?9@M`^F4^I#l#!5s?CXZJ&n6xoQrhKX zQ11ukL10z-i<{`o@>|dHI+#{S*ygkuISTSeJtY#}7JMjzx?0|#ktc@=lipNk{N6lc z{a_Rs8l9`6PncY}BOW=W?rH%7FW2Hz#5qPVE&=$P&G-a95n&O=C*bp=A>!(QYY3wS z5{GS`o5YRmL*^)D;f0u@99gw?=ub*4n9~7e_EOeV;n7pW(qW2D;6v=k(&FasJvvu5 z5WfFe3E?I7E#h{*Vav3?|}&dtf{yyG;k(eB2AfKBeq5~r^tD8K=NDx2RlDj@7tF9Q2j1#he^&f z<<2W(op{%j7@u<8vv|Z;`#$wJF z16JZ!EfLX1G#d$>7w@E=eI{!2ZFdeyRGFJZ{nlmUt#;c+F~ zg5bkPjKAiGv|3+gjvYOg{k1UhthKpyT)DP|942>PZ|m;1TtmQT}2*6>FK`8qP>!^c5K8giT zMAm%(i0OZKh)zo}WNiP{A*z03Q+Up)U!7)bU8bJOZSyYpFB9bw*&QUr{Ou4q{0J2B zZ#u*hf@nU)k!DBTGWmS9{8!}FvtOM}g{H0^%C z%Ez;4zG@z&PAIE2?kN*5914DP>WPD&f~Mltsh$+e)hw-jC{PmM zjhD<`Q#A&BAI6Xc)FA%Z&OzE=*PNckSFxz@Vs{<+T4UljxR8m-B_yuL@#QHcY5z@( zM3gK|7U$!$7PZL4xrdd1c)@E7CiL;49t!#Sz@f> zo^~dD=krNCDtiT`3K-j(BiyYY=`|`Gq@<=_7^=s|Qxs)^t}Kq1_*q$s{WueWau%5C z#k)oJjf24L^k&lR&+UQ_QN7>BostmI?+%AhGBq8O0U z-|(gDD$3W;%S^D5raE@?@Do+w{^E;B9>L%|j)0l<`bP|pfoMFp_M!p^iBzz4A4}%P zViu~VvN8%a<6fBa=>&^B)7+%Wt=}S} zaLPAdhXj=bTH@7ZUC(EY?d#4zn)`h|pRa$G|!9(<#k#YTxw$WAb93zxkaDD z@4idkb9HTg_#D?(7+l+=#_wzI&VRSv4x_C1_qYKWG$=_(P}&if>iBXq^&b=Yk*q`r zPm-b8b7H^z*e{y1Vuaqj!7>LG-bl-boF0JeL8Ay(_H+H}O2-$v(H_r-#6uCbo|?b9 z1R-3bJ)psbnX)^(U|4uKm|GkU7^G{jUR*q)gEw3(in7j7BnAmdoH*lq3{XSJ-cD0k zYBXg0v~Id}{p&>iMJna_>sx<1l_0qI>_FBr_=E_EBS-)d;arAw3-02ANDy4ZgeJr~ zWw;x&oD4)bHyyVz5Ti2@Mmw5wB$9;rll*}&>oS-3v9UB^)&!yDr5r&Umu%WODdnyH zBHU{dWZ%2&ubz}y$kAf5Nah0tUztnv)0ppF_$nSi$mS|=@VzU`XEIhcyqIdyD3i}Z zIR1EX1E&i{E)holn1xObKX|W~;~5!|HNYx{1tpV5eN8lCl*1#lj^YiRz_8D---4{g z3tN#S9lk1fP&_XebGeI;s9wcKPD-i-YNY5Cl~V9`&}jTrP8HcJ<(_`hfh+a}kD)>B ztCp8EZnp>l^$eJ3U=3HjUc{`fHV;YyA!xF-Tttph z2Z+Si1H^KSB{KC03l0v?bx`v*fuWJ&HuONtlkLFfzsn*x#sdn^TW=nh&WyYcBTU=o zLjrR51Ck&LxELD41YKaNO`Glfw9pWL4@t-u7S1(upUm1p-pHWuorxRB?Tm<|9q0_Sk~XQHa*G7l0px2vKXwWyhf^e!2j<13d=xfe&g4>}$-=t0_IalN8q}Z#ufD z+venS?X@8GLG?*i-=PRE*Jy5B69Z{d0AzvlMF1DYZ;>U1#JqXW3S|JSpcHfl(jN@7 zmSdiBP%L!&U(}O(SeP35sJ^X6vo<2-=)vm|voJLs7IYt+To{k)dj2MHAFFe7k53={ zvfoU|D^HKpn>8}>5yG^F%+Gkgv?G(*@fKya7)rQ6mBwe&_#5p|7gza(&513nj4_Ah zeUg`&1UX+*?dSHx<*#18x~}inS{*JTz84n}5IMU0^$@O3`bKtL41AS4J6t(<^!}~< ze)fk0Su%(;K5=J{Ad^m+$ftv?4!UsgyGNKd#>HC3zrySe6 zESW6~eEta}(nu+C7B=5zH9o9bT$^+!YoP^4+LMtdL0D2}{d&v+)|8hDZkgNY8TTLe zHucxo5FEtS_9i()nd0z=?fqyf*cNr)@Sw4s1Vw5~XtjL_-o05a<7N3`Qv8tiEA#A7`?XgHl{M4Qi3!O{oU|8;e>eZ^MeyD41`J=-LG!11A?UI~x2NZe>tC4M zhFm}UzW%j*{H(2WSMzJ&;;)s*AcDyPHiZ?=QBw1?gTJ{jp4mUfWT- zXzZz$U_vi0Hd=n}F3-O6B6yOCPwa6K1sTPQdpfv1s_v}Q_dV>ZFYi>&ukd&JYIvG{ z_<2Zj@*H1h%+vHWBX4dRgvvkIDctAkNLf{uiYO7!pyLhk=baC_k8?rcDj0&-B8}NS zTK-W!*d%o!l}yd_#{2xm$4SaD_*YH)H2l2=j*Y=vlJ~b7ckdj7C-3YkCw|r(S;O&Z z`=tW5__>2Ec=^N+rDOb-j4}(gS0nKtPWB75C|2p!m4x4W&#r9&{iW~9_f?z8!=?nH zSq5Z2%+UaxC%!jJ+S>v48pg6faATYz|G)>;B*8Sp+v5 ztxh2M|1xH)zPomG8WTTMscPzi(pv7`mh#<%IFIpuFS^M&Lq;8Jg%(J*O zMENQTG507rs7IRj2U1DQk~~Zz6Q{Dd{A89#9&ExfjJX>qdC@E{=p5*M=!Oo_0ybiqhg4dh* z!P1&T0EW+wMGQSejACj*bE{#nhaMn;WG0U!1RfI{@KToY2NCj5tgnX>jrf^H5*h$K zDEe>R5HBj3%SAtx2p$_S=^dSZFbwODiR1s9DzQ*NVns$q+t(PJ%{>QbDK(BGQMYL_ zKToQ53!fH1_plK(G9`vlJFyPMkBbK!O3-(mN=s5$7#z!3_2PKLbKDO0E3i?fK`hjJlcpLnO`p3y1oXCt1SxBpqB|=(Y z5-foiBB3hgaXr`bNlZ2a;BpUIZ(3prsy$f~{3<{mfto1ZYAriB1_8`Hw9~b&Ya#n1cHI2_1ne0l+(Ydf<*fuAkm8~NFqtFV8r(;# zfJ5#;uoZV(yj26Bn~By%0W<2)acRJ=q*roetN==x0fvLhCkXkb8cDs@a7;H74kEuI z6X@&)FMD6#mFFhu>hAq*1|#vn784$=K_%O7owI>kEa{O?f9b2_f7um2kCO;{=(&Z@-Jmq!pB&dhZunUypGCK#-%m|!am zXw5TuK{p13pxWVfqp+1uIH;!Mv+Rm<2_tS8cR}S4aI51MS7(E?>^+a?k)_K>uIT!B zDUio=g)JmtPo@;Lm27C1%R$Z-nR>a-12%!66k^E%{IcYP16vWe4t0tHDmhmy2Jb;} zvoV)#25(iFz}uO4wzCuXRMI;^-;*?>Vv6MK?r|YvHewU0Q?^i(5=WP8jfnOhV(>yF zzZGnZ_hc)JyPrh9d06vypm)w|TUf-12{~VgX#PPbAj`X<<3AA29<)IT z;z9Q4r)+-+i^It)5&N6y>sYZiv*|cgD(I(TVjo4|()>&GC!YnLmB5Ls{*&mJ@@Q76 z8I4S3ygDmGBvxtIt4-&8IxClQt>p9?nJ)NwR-po_)`?b|DP}mYyfX^X%N&`xSuj-T zi0iR{|JSsP_^;6=xC#Gr{;4tJe>b{1R_Omemc5ylojgjmA-);Qs-{>E{ySaD{$?|L zGnQou=BXHoqrO>`P5xb!6*{}TWcoXnEm29XKkgS(PZhiK19-Sur8f0%ESuB#m@>bh z8E3D}luP$ltLnV@<@9SH-=?_w0V`rC0k3EWJg)7-7=TiGUH~2|B1I7rU4! zJXWc_q;G#|mmVR?s8pNPxJjJEso$mXs##GS<4j_F7mfmhX^tYmxN5#DP~Rg2r<9lu ze7ZZ_&tUA+IW4$DJ8wwfc$`Z1o*N0(O}}cmQNyiqT#Rl-?M?(~-KcTbl}=dA+u)Pl zduY^~j`L?vvpW9utBaYVuddM_>~2zQ?Nim#RSb-)a?R@MM;im05vGEbrxN(vuX1H6 zGefq;x{ajYoIt7U(|B^>9f~}7O7wsGRrV_J38R`w6)-+n4x|{z`?7IE5%JgP?h#u} zINfT;mLe&j=Qdo~bShhE29Mi6B||s@hB-JS_BZ7dvblG%=&K&EC)#sKv$BG=lyY@^ ztk9@*pO3L?gaI>qMFmb5CzNnBkw}b}WwovxzE4usUa?qXV?}{VD0ZkcMCwr$yQvf_ zewM^MnxO=nvpZYjaB+-cOOpZPa}Y(~b5R?hudCj<7tts>*D3rygW{7Y<#14pkU{X7 zV`-?+1Ymr`?fTJ_^4l-oIQ;-M^vc-QG7JkY9<^3g&CVpQl@CC%{UQ>BMe;DL3qiEp zBi^>-KasndXCHI%B3~BgetFd(Bez^}@@#*z8;6pJ+y-w?P65}80teyI2IY6sq%ty} zZrm;hdJsK0-VVhS(fmu~w8z~Ln_i?x4{pL(91aEBU@-kKR|)?pxiW&QR%B%8NYsk= z#nQJ4UMd@iaQ{_pvsv#_p6H~`r|#}*Qla0Ot)SH4o@v=zke9RQA2csNn#+47%vn{8 zJ?OxDU3;`?CLTous4h#r0>&{H8wwmuo^$Eiy<1cYS*p5xnbiGf61x z!B(2R%Bq|OBG~|*?)R)H2w$MFA8gDt(6L*|4*MwwnQoX*00a{)wh#~ zE!N$34;pH2cOxa%7}0y=KP)ak_gb330d)nO#T8y_^`KKFJ{(;T?pk&5mtI=iK80z~ z8Z>y7lK1Kuk}uq)u)P_0?;He2qoE9UA{6(jRa27aKIxJM73+d3INaf%SRvPYgFHCM zHQ)y!^3Y-GpfLOE& z=cZqs5@jQCNgLo(x(-k5PLci1O2aSyU8_B29G_2xXC_KQ8#Aw6h2?`$N^jS2q(-FCn-PvjHeM5y zBWhw|QWC^dYAM#5^vM>Evv8eLT?SJGnSf?S%+Hx{J3O73NH760zZHhju*Ohe%$kIO zIQ{W?_jJNFF0z>4LH?l`As(p*8q&zAuSo>1zl#}Y^#7)B%wF?RV&Zmt{I_J3LIl^V zi5j7hwYrQu4WAfMM(sj6Ls3~TDZ^?rT1=+|s1^F7KJW>#`BS*F)T@&%GxU-zJ`|{B zI$Y8Jx&Kxe*8`2mUzabjW@Y7N@pPJd4N5B2?fV2{LLSV|5Sn@C9vi}2J_$p@zR}0> z1tIqUc=bX+DnuM}95sfG2yDF^0C5^F8eppk2@{Cf!6(j^K{}D6sa2x&jfvbe(QMZj zLz;VQ4lQanTs1|d^3RO4=zDXTt;e40Td1V>_}XbbCaK^gZVD*IqJBP+9&ylW%9$J8 zk$C;%dd%ZlQ{Jw|uFT?(8>8D)@SVR=^pxHp^iLBOPjgR>@#nUPf7o4KUdMM zQra-%8jKXq8`r*o-v;UN(mw_8>>4Q$`HluZ_Fol3Tb_y}m2P|aO~)PkRJTmsHmqpF zy?EnZyU;-0raw)tEe@#6-+ zLas7*z9;CuUO^bX$CyWD9%BtNPZes1ELyM`-SRz9>Xng=vtz6eF+<_w_WKB9+Tg1N z#R3p=k0m8FqRFsYr0(V_#;rm~-+JcAtqob6lZ_NI-7XUCsmz=K;t6p!$1P$%P!pep zCoF9dcRxuvI)r*pU->TFj%jY%0&BWEb~tOwjOZ7f$7;V>F{{3)TD^Nw6eGyWC8dbh zSztlh-~8E#HwYEg_3`W{{?`CYkyY`#4Bhf($E{p%-iX5+t*<>uO2 z6->>i;_xqgqq zm7Zu?ZLJVU!Q_V~=R%h!?cYJ+(1mOIw?(?lw-8eah?{Hqpia!Ir;_W~P#z58n>Hp< zS_k_b&?}D$)KiksEd)v*>ALc`>X68P+&)lI$lnlo^V);ak0NpB}Wy1a^+o7zp(o%X0}#T*G? z#TXBQoN5a4CPCC^i=bJ#zCGQ3-5mZIV~Zv zzG;{@03RRS--m;7Jsq#?V(=dHnMa3{kW|A5CZ+1(Hzo`Toh2qUZZP>0=xSPieZ)J$ z&?wvi*9U@VVU#CxZkpU{i?Hh@2v-_fVKLAk3LzRAeHGdzig+OBw-SNNO@s%YCjUal zW+{5Q7^!+h^NBsi^K6C>X3!%xpmy}qD$V>!5I39ayYJhI(p~b)`;)74iz=tf0R$`| zj3RsdAqoD=+Ax0^yzVqB+;?rC>Q443MKOp0#tR+&<7~yE1aVh}XH`!_(h;p+hBH@X zKSFxt;=eM;CUh~fN~|86+oR;)eC-gtp~_W4fO+%t^V8qDoT`GU30M~%;@20aP83{; z=E~qB;NA@xoPs?Ws2cnSqe>S(XqA^_lmU;c0z2N2<}GBHTJk8(3#&cE`7^f3R1#e`HAv>26#lLk6PuiV5v zT`8jEEK7*hVI-l9=1^wQZ-5wa8tOwnA=%QbW0Y#p0VSf!7B)B(bT#YNQR6}q9%7b> z4f3>n_iy${h~WYPM`*Z3ks_hnLS$*{%+Q&E?n^yr7-tFF>+nH5Uhm{b-8j_!gEt}$ z@Nu$qhiO0`QW*l*fQKAYa7e5=;Y0l-nxJ^RPPm4`6Ly-Io-V;-8US~oJg`_IRaDXz zaC3!J)CB8ir$(pYY}kU?fC|E)U#NKmePnt@x0GdqM&CM}|PiTd$&d>n01(OO&_IgByl*$?9qlO~Hb#%7J^6SJOm+R*E1hyLEtdxtGrduTjtQ_Zh(>wmsT}js|uZAY!ScYPjHs za;^RjNSb!Yfna(h-oqPbU;|}LCpC-ipaOU%R#Q}D5i(w`N@(hq-Fthid*i#0jE*^k z>o6q+{X@{v#Ztggiqa&Kh*~%@e}6fYyRetPRUG$t&YpoivOlkawU1Aycz$T-8JS07(v$b_9{MnL_tIqq)Cd2ma7UUsse?mEl% zeaqvhfKFA}T_3%YumlTLiG1>-&{vDFpDX9yk_M9$mkeeH1c9&c9Al6IJXUzsf~p^F z24{{ofHHXV=KOh&yplE7H<{aBqBKoI9nbJEE+)?LU+UpzH0y`#tS#kaN5~gG^IITBQ~( zQSHufrlL6Ir0258KHn9wz5g@2cL{a*L9HVvzZ#2I8Mn8a`&hquPex(mGCp4mdpzEy z#{Q_u*Kg=z#i#J4b~F&x0?zkne}fm>Hi@d7gSdn}fz7kl&A)OM%Bn8aDpW1^3|=kh z&MY_8I34nO1dTXz*k#$=US=?PMMD})&{`k8j1)|(N$vA#X{3VDOz^W$Ym*?GX_OCL zaxu`~3R3o&kM|toxyi;o#OVjLJuEmf<{qVZDC9-0p!%qmca0#gfU=*tFtW=Nuf40w zYQ%Y8=ze_mTH5AvjDhZr?sFTJ(1?sQzXyY{|{+v))zSu?b=^baxXV{ukO7Z zHh%XdT7*J2t=pqf-*sq5EoF~-(wy*2jC-Z)|m8fxh zq7$(0EIpd84Hy)8$~x~aLKRuBy47Z7suEEyj$xn=NTZ3t^I=sh$k%~M8C>!+#^Dn3 ze+F^)6n=Ty-g)1mIfmMPfw+7Jo~oJ}6H7YC-{>Mw$oUb(RZ%chtf%yeg+Q&JG~%8M z4i$K`GsOMd695Q!hqCU*-F2F~x%l3AZFnh8ANSZkr^!E2pk4qXn?L-Re@>JSATKiF zalria$a?H&kg~V!q#Tu0fBS2sBx+wtZHLK8L4o$!uIAa**x~jQhwgy4UjkyHoLTCf z0%@Lvt%cyqBl6h=^TV7yJ(-fa5Lu;H$ z+t}Y78}2_kwhB??-}%MA64`&}7paKD82>Wy8(2|RHeQ?f?L6%HuH6(evXj?|?0ea= zPyb3}7yseoG-LCN*NJR`8-TwO*;QhoxfkZIQvm-;WdFKp`_Du+wqv6j-h8+6miew)^Z~cWj?O5{X#ESQbhhV>>p12k+$0k+{nIhN$t*YZHGH#WcE5Eg3M~^2fw4 z*DYX705f@XZQ>uDsCIg`>}Pg?HSvFZ|MuF%58`F@aKRH_MM8u#!vHuH$*bY8qYP-c zuaff`QX&n_2FAU)ZX@sO?7SMu`P#G8RdVo2s?DMaE-bm0(+RoSo@5Kds^p+w@k zIAF#KAoQ7t|IT=v;8Odvf{^Wa@iVCkc`Y$XN_ADF(So&NxM;=>S5TG&27v1`3JlA# zu+4@N(v!&B5SY!bs%1Wyja_E5%>k4UiHoX@r_)!hb7wl-vfVCR5OWTLhyJ*U66@b7 zBIKk(2XbY^V4w772}N|6QWUeOmS|T@#YPI@?aC^ED#UmszP9yhGA_s1#bw{S`pyRz z*o!jQeogZV|G^_TiA_9|NJ|tL9!lVY@Dx!A;Y&9laXs`fTd)NI?23ZAq1_Pd0wY_E z;V=UQUteuG5HATQ;Rc8zs&I)`3!{yr7(8CewW>M20??e*b)Mca{Y)-IvT*?Hwon%m z^UZT1e>`${(FF!i$zq`5d3uV8d~(4LF<||gygu5wYOw+4a6xY*=Ri#{Sdp>D`x)`P zmI5(cgUHZFlGfFy3n!w|hscZ|aFA_QC7B_3=&%Bp=PRhbcN}a!cJfO6bX&qhmxD)g z2G=CfZ${ItHvGLvHdaS}Z4=f9e+xq{DB63LBXB?uuZH|JO)6ATK%dhnm@q$YqvLiX;V}Rs(l%9fik3@gbCW zLQPKx7!EK9KJj+laqh*0ML2d`|-F<^AU|s)Hlz?Z{LC+ zgv!Gxz)b6rjl~SlSyv(q-u-eX3_R%zHBNmBqp-3j|GlxtGWc6Dd{OQ4OIyJYBu_|M z>PNgizt=gP#0Xqd1YmP3l0zBgX$2c(Bf@q_hGTBOWXFX(lW~~^ou2F`-#hF-?}7<$ zyN=M=K<`!5;8fJJVjDQZRNNlG;}?MMi|BwWjA#@+wKb8oE;R+c3DqW}$8D@*0|E^90Lb}p1>C?%OU6R7cv1~1>X~bLlUAmQy^ky528RS(gK{kB zUG-pf{*gV;wTa(=ujp?Rf9SogUGDhHgxDdEPp!Oo5?r_~W5FZ@6i>JM3&Hk(O#E?X zXMdac|Id=Yer$i?e@Omgl{x|ZlulpH%HhQSmi*PUtNuv-s6o`F{fC|M4Kx*bOEtdX_xLy4nyHL)Zs7<9?MO5Y7(B%@wQe#HOms??vz! z2hxjTrsD2AmU1)cX?`}5br<^}=ZNi$7hz{<_aAATGuMIggb7Z<2`T~miu?QU%1H^& z(*#N^BEzsr>2}bquJc~ByoXbBg@J0F@v9h$r;O^&4R(O1hiWT`C{dzjekxagI$r)y z1Bu!)v_fip2~!4V3VpN{r(1K@cV+LeDe_HVbl(libe(Y@e8f-{;Aw~SCoFpSd_Fql zX+PbrkC5tLY(GF?G^n)JdIru*v2w1<&vG~1N04S(P*OwtO* z?j`LZl;Kf9wJ7WaY`?4G!3mn*$c!KIWzoy?45Ks<98F#{9YgLqsx~egI~ur_yySi& z^QN*~Ib}l+>^Dp7$;HTQPdD!zqOoCC#5F|4>!;MsR>>9}hS@2l-YwjHe$F*|sA6Dy-+_QW774zjQK_bX*)TwEPL3f&U8$6jbZ`GW6||33odIx}WX!oCjY+cRrEC#!JoX2!^H0Ash?xYRW6mgsK zI1>i>B!FH3er60Kpgx{}u+n4dgx#(P2{GLsk{dr>^a3T|UVXe@oX0V&(Rrvk#;Ywa zdA4#bQ3cM-OD5u5JJ#K=alrt^j?<1BJ7P8x_>E4jX|E>YTif$O>~t55;(EYd3yHX8 z@=A$8T+yzGse1+$J>bOBr7W*6+>4Dh<^iuIylpsSzZnt=9;a4w0j#BFl1lTxD!X58 zxKH|!ULCMcJWwXXZ#K4&*Cmsq9-q+C9;u0dSA#r_Is%*wFV0ya!aL2RjFT42JVRgHYus2I$CA%UcpV!%z%TK zTw%Q<*fOGr-j6{a@5dsc&#&Dc<2#}I}qd&kt@RJ;cw^ilGC#Uf60YE&0 znQh%wd|tJyH!3H&4}KkGzWw#}MaWf1!TzW;?2B@*3#rW#ygd^h-z*da>asRWGM10C zfD!V-<-t5@a&wleI2@d_sRRSfNEslTrnL>hVPm&IGt65wZH;KR5g-z}rjB>q4ZaeI zkz>(WjglqOT--S?Ve5EDxRQ&ZL76nRs4IEcxe#eS87%J3AGOm#vk%liN&-%37IB<> z{U9sG0PrXiq4x$$;9D^RI*#kmklt99Uy#8FNTaG1Y(16ad!$I7D5O4OQvi#|FniO8 zlOeIW+AN9Cs=J5aTzF1uvxLvJ0Bp^{Zd$$nnF0e!dDU z$?H*45fxw-#Gu@w8X$PZ;0~!IdgR;Cdz&Yd&jBsPaIl#!4WnVvARlSWDyx>tAXnlZl~&aP$n#2JSif<^gG^jVzTr zqXvn6fpCRI6sEYbdm^hs*^rSxc;^^0u54b zm>zAPz1e8eEBq!tZmMdQ{(Sz$%>shNyO|YFlm+rkN*W?Q+HbgU-HgvATWZX?0%VWz-ro=LasBmFe$t{Td;39NeNi7dOoCS z?d3NSMFg;V<=?_$;#Z(FcA(F3);2|)+>F$QacSC+)O-~xY)%BXdoD&gHbbe32&cr| z)6q{a1d49jsyKxhLi4!;#5b2ygBKY-&Ly>qzh^q&F`$nx_vm83lcp8v8n@~tQQT6@ zP)y6#w18c*T-N@@h`~ z@>5EC?cg|)vn56#qPL9p(Ys+YIH`TB>Iz_P?jt+LO^b27T{V*np4+{bDWlNj?zYtm zUB~}CJzL0RrOUx^AR+7rM%<|^Dqc=-1Oyev+;Oi5ukOe`X@m;rMKvul%_YSK+l9Gi zy=AzAJbmZ&Z+-ty9`U+4$^T!?i8Bm8PVFv?)%tIK*I&~j607gW;Mx3J-~WWfCAglv z8n35CAMwy*bPP6~>32OX^7j83y!dr>(j{F%M63-(&+b<|o*xv$^1Fzvc6hgl;Gwy?%V& zGYJ;8@otmb>Gx+;6Fz)%*Ky|&%5#?CyL3%b-wi4S@*bCI+5$>t1d?=+L} zMhsv@BV^$XeUf-m$cEBg=d?F;qJmlxsz32uq1-;4uuijHFr-d5{H{WUOH|@eUKvZI@`|Kvip2R zf;s#3G&UDewgcRnIV@Nz>vNx8lG2&xY5jfH=83)D8iOVOYRlHuD1oE)jSSbLmpf(E z!m3NP`$w;i`vpFSlS6xfV6HUJ&z%z)oG4-`YXlH;xwQvV>O4+)0l?YN?CHUOL_ew4 zvBNIfgEI&4>P_Tc^}+#3u*M5I#ypS4eI&W3nI9zPxL zpQVX-4bK4A|H3h8p8lmge~Rh(zG<8$_X7m!4c)yZ1e8-yQ?nxRM#*tblX7STt>_bs zr!!c82C>8BNdjT=;B|Nq*j^2XkewRj-4_N+W5rhnbQAF_IUj1O|1h$JQy4`&zEo5v z;#l??z}CHG)|NH&pw> zD3PJ$+Al{P_&BykRw};a_%LoU#y`}mVKvBRw%MY}+f{c~In9_7%#wVL7*oY*O4iZU z61**1O)_dj!sN9MzjV49#74eR+-t_jjj4BGvs@WpJLd$Y8x>dxA`)SV&J4HLx=-E4W~~buh$MGm_I$t(Ki=YSBZUL93+oyvPR2lhZgASCrpwN%V>wA{exo@ zE98k~IMs;HcO&>fh!UEXU9-t!Z~;HxbKCK9y<7$L+pJ$phP(I(O|1EYk0?pb^Qy9% zZD*>*Qv~m~^JqG?7?2(aNZR_{=Tg6gP)Qmh7V@i76{;+6FX+u`5&kW zG#>n_A|vv>yv^59_lzI14Msi8~;XG!;bnl5+7@@RPDLGx^9%CMoKnh?Fr;)grm zff>&tYo!B%-;Z9^ab?xGAF6QkEw1>dmYcWKGVY*;m-eVR3=}G?ZVy|$#_>o3qCde` zgDjFb&r?Rmgx%9&13UiG>HNGdewMOv)3dFu4dVO0pCE{n6loHI`_2?Oo`xNb2K?oh zd{35hDY)k|%Or^(QGd^+=t!Y7kPgXwiaTQcDUX{#PsW%7sPNJko*GNJx zdRR#sVpQ``&r?izDDE`Gd2vlry(sAuP7;fr;QW*!itd+r*N_yjlrCVq*BI!hXm(8d zBI^h`=nnhBbv5uQqSwig<=CZ?zZz05VOnwTjbN>bMy1GR|3JQ^Xj%|~nVg`%thHlJ z7TK#QiThu!MuoX6p(|y}Q~a&U9_sb`)LO>&!kGo`?M-6|qtdtxJg?NL)6iaSJHRaT zOLv_!^ysA!-BgRGH$uTjD0{xUm2DuCJH9Mn_+hyj`3nQi=AZOSxv+M6vS2QxnJEG7 zFd}CL*_d0Cm!r;EI4hOV-%@Nowl6GLgm3f^33g+06WgcKG-)hp%(ncb3x-STN>OD{ zE=P0rWcPCBKci$Uj1c3wsX64|(?(}&OK?gz$1NIOy_m!0Uj1q^Ti-8>`1Yd($Jmkc zm4-ZEw3a%9|D@II2`0e(xKr3{wcG!!^YwyJpViGk+;nO4bP2u+3&u~Dm)hW4=uJQK zoH}|In(4IKOE1B;1?kW}pOM%fUsifUw~i*I-;t#_E`#v?_5@&=pAak|Zw^rWr)Qwy zr2U)u`A>$ye+U}a%+J3SW-NjIFNJwH?=MflH6|w27V#V&g2lv;IqPBx>?#sJ46q6_ zG?5zuNUtcX0%z;@4NF$e)>-$&F<}*E(`;tBJWBy@fyFkZLri`MIpzQI1pLkX9Bubf z5He%`1xH{SKGw>IVOy8N#?7~260Hhd`R?tv^vsmmD9qXJYeOguV~hT_|EBuk)SEvF zGv-fT?-~;lBD-rA1+Vg*j%bnk9+>g*BS5@Eh>z zF3378td7!sx4?&Bp54Fuw87)oxgi3F+IbauvmtslOhJ8y8cFoS*HCRz`2q%mGa3Sb z)Uy$VSXPY8ln(>RhN)|d4V$edXA}e|-%&ZQ7b&2!nE}LoZ8Gk0L!n}vEt(OJ^XcSJ zplt%z1jJ53p1PtWT(S|umZn!WO-W8;p_}%MRx)Vy9=r(AouTRVvN%&GsysP`u;Jyp zv1^CvW}dGwFHeH_u+ern@rMjd6i~FGm%PhT*%*yWRPUq}!{4z}Y`@FLTOu&Q%|{_h zOjlZpuiG)@6A(;5Uf~!wJmI58Vpvt~VskcyuFT1B(JyKk)*!F#Aa>cWq|l*St$x)H zb*tyK(Kt}AX2ufoqE80h)ZX0@5Hd`qHau*ecQhv>T=3sNZ2OO%;i%)F^{<}cQTR|J z!(QjbR`usMm*4h3yStw;9KXe*aXapU@YEc46G@h45p`;b zF(M_gfH%DQ?vd#hs`>o4Z0hk?pL&gRq{U62?NxQ~RpU@E1wEbk0VM2pA2y^8wRp*{ z$nA!Pubu7(?3HVD14J>N-OwX<>Nxlv3=hj=4M{Z$KU~qWanBnv&THY*52e>UY5WH# z88|5oO(VRL=T|)aG2?2M%&jrxG5G3hi!r#Jegm<4k~oTP!r#>Nnf-cY>|!5v0{iIH zs@e)X??^%Q=^w`MF1v6#gZt9)sdqLqSieW19;LP)cY$%Rc3(@2vZ3TmFp|%a)S=)* zbdIkEr6M4BXU*JZib{$*2Z!+k)}(UL@Ubwa=v!C;r{l$T9#Y@y6T*YbWw+G$D^FyC z0rgoqdw?WXd&9ML*{e)#kpGlW@B|gZ5P*LrQ$Z9`xJUD(H6`7N-VY9O1pADh4AvWL zxExf*GjF*@Fk^of_1R1ULS;eZj@a2RojuNK%0GnHJh+qVs6G0tu|{qA`rhHcKh@8j zXS1%KUt>R2k^AR|`=1}2&+r{%{(P$DlW;{S7wbX2G7y3Qf=G?Ek_8*{oV>zOlJz6P z0UkAm19Yt2l)>yQGa}aFT6tea7`g?U{LlW&M2*A85dm zi?C`ym;cAwGK1i`t84~}$E2eX3lTIP?HoyBg5oUxU7$FIUk|V-GUsjD-&zYu zKYko7k+7SP}n(0U_mJ*1{@i=tAY0 z-C8lr1VBxV&K?z+Fv>l3o5P zf;^2G^B{e^uVXX4Q6PTUiV1XsCVZ9jX*iJs14K+CnbC`Xpwq$VOWNz6z;Ra6P*%

N{T(QtpdS2-_Ck^Vk62NWgx$j-lk1@}*3&U@M(W8&32%`KM zDWGIsSMO84PvHSBEPL@-@9h=d;0`$nm!?R556fDMz9t&=(B5O_ZYano;vkbYV~=X~ z2&cN=r7Y(1zO}b7j<=SbgWy6r`A1ZM3jn^a)**~5JYqalGDq*jGnK33eb+hOf`v^H zi!CG(*O}7LWdrxg9tu=)`tfU*Ys^%ceXTMXt1@aEo~aA|T5U~SZ8D%S+h}x##^N^2 z=7wimJHFOp?JE}B8gm^|Lp6b8`!h#eeXvm0h_{`Dc5a!*$D%eG8prz&SRhrB3Dx!Q zPVR%~gH;r^@EczyA7sIB)V-@ppZS-@Jc1!n54!n{ntKJUJzT^mBGg9Pq z4k*FTO%~~1q*Vcrq;_s&CDp2twV}1jNvOBaB+3Ya(v@!Ym*B#b2O0Bba4yp)-iXuX zb5QQ{LsE8G%VSV7ZJ$%}rJ|O>X9=yrVgSLf z=dI##d)vDx1E!-sp_p)tQAu(nu%(0>5)Z*di4gUTG;KOQ6y*flcQe!sbP_@&q0d)l z$k|yqPNy4s+!Z*NxLc;{PymgDyS;hHqnYU*xS8|^@`PyhVngY#JgiU;s`KJ}PG`T` zU+h72%Puk6=vInraDB9WhRdFMB;$=?*6@cU84L6F*(%YSN%@X*U@AkrE36fuB*&%N z7H1}zGbOQmt*dyJ%da}Drzmo-O#L?$jP454J!p!eDvz!s!y+46eB_D_DaZXa=Lv%; zjcZe|d#|q6rQm80>)4LHy6TSnfz^)Z4JSvhU*6{yd41jAy#;^;|1O#k9>LkL45>f; zotz#3;?8x_C#08f($8jt0J4dB3O1@GCb@kX;=N~)1>iHU0x|K$vMP*3y8>SB+C|fByxm+FJcZ2QVO3f!-N4#TGq%m1y)%PigJkTN7Wn?R_X|-o?l0 zyPX%NiK=hNC{m_I{Wf_>uNhSVM_4T|*Wvz7PLFcO+p4mb-rcjZq}jb1QbwjNSdeUp zI=Im@6pj8p4!m$BA9c za?Z0TjjZnu0jfD1hCia zIrs~k;x|HZ6g&p|D76NN1q=;9=j2QRzazy7Ulz!B1ontT=_Q2n71N!D^@ojm0xXrn znWv6<#p1+tA7*{>*0Mv%a!-Ulyud|YR&c9r0=bGlSRd*}!q$#?rMf=Ywf{gXst8vT ze}{fhXXjIoZZ9K%1Zh(kN#41i=vVyik9!$^N1h+@&gQDfxCMbZHen{Qgg9 z@Y+G}S7;F4H*X=l@S>3XYsDW2!2%tFc#F9dVU^*37fq^i;Eha^PjI8r3pRfx3uDr` zA0YnDwe-TEssOw!m?%BPO;?lvE|smZ)%yJx;u5xUWH^HdJ5Hr@cr|8W#zHrI0c=SU zH9|khXI|LegKDKY*!TFE^ocu0aStNMAq>2MK~bd|4hKZh8`Gt4D2p;22(So_u$vdO z_Q{D7YV==LP3!Uc0=??pf%5acIKKJe?zg&o3i>t` z$IRFD7T`s0vu6pQ&_S786p}!>hIFRWf&i{2zh0mCmkMXQ@*Qz>0L9j@QW6RBh;Oe) zLb%u$MysIOwR?~rP|XC+PqHqS@hKJRhzG65!fXfM?ScZ-KHkOCPa_gmcLt+1NoA6I zlA0Z2w8huSrNuL*D(^?0RzHZO&1xU{0#EoV`KfQ3wkMlv&_CoLi-iNP$%VX;_K~9f zz$i6<^FBSR!_vk;JGc{1TkKi&fqil#qQP*h(TTPTGGgf1_!#;xI1%n&Vuv#z<1ev; z=>J{pU<1*rid=T4I%Mg|9Ac8fO^<_)>X!KV8*93_@H}`*?AWfUpQ}X`n zz{#ItcwPqphFonik=s6k+z30#0iZ5~0f5IGG}?U4MnXkt;a2UdH%=|zr-Toq8f+9- zCQ7jmDm$kaxZpy&)Kb1oC`Ck@t4P;tskVcU?(TO(D|1>+(|ev#+!GGCX|?@4k(5_| zqvk9M4?=V-lp$;NxiMcR@`UI~&2c#TLjl-oPR94u=VJX1+Nbbe<)=c98p-v)e>Gn9 zQLP5_O*AuGatSpsgp65&pNHG053ELb$j=-3hv-E!KcLpfGI2HeAlFP>=XFmesX#0f zm!6BwQl#}SCa#?x;a>WuL@X2c(=#}Tk5kvgy1_VEl^(UBr6r}V5C2<+!UG6ipA206 z`w$=$!YHGQkjME?l;+ z9DcUeSr&S4?@@(dPtT+Ug@j#dwjZl>#XO_88kMnq|HtU~??VlvFaHM{^)T_trJ&ZB z+1K4U$!bH>#t1Cwv)!j>#a;X>0k$a#G;6>{Q;7TGNe9MWy;S~)iKLKDlKbv`^Iems zTME}j92F4GdF8vhdT}DLb6PU{?up;|DyLdr)>GSY)>DSxfmOxPK|ecO;9OvaE-GhM z_JNzCG4Kl@0O7`4Nw)fwj6e;I1ar5u0*UX$EUP2&6bkKeZDjxyYuaRaL3m4IeUx_& z8o&`8N8IMVAn~pUD)X8^MxY32DEg^n0mu@mzcIKBxa-}HL@805E+nsPUNAp_cE}XF z>gxm*$39XrW~6j-mQf30Q2J2njQbl@mgS0i$erU-2Q_o)>uM`0=<=JuLZBc+11O6H zI{E@vOeSZ_BfPop=PVIliZUeVgLxT(x}DJO8oV}Y4Cs`b_@yjn!8~QLMnle6T;*C7 zLlNl8w7fDu{i2|(3s^N+7bvm5PkB0_VV2uQQqO~qJs$3BG@#_O^$(hEsA%}yKoAYC zTL*^)Qr_9m3l5>)=VL^>jMUZ_6K7S%wsJ}A)a*Pd^Qbxqqrtq2?B93rxcnlJ-S#6z zVikkeMEwsLN<(`b>-(hCy!2Ee_b^g~()wE964NNAc{x(}xamR}BeZgch?iYAS3X1JX8io>p|QeNec!X+`GK66*g^S!qcn3gQ? z-_(l{K4Ab|fbq$h^VXzBlLKv-iS%$*f(9b&=Ta%8l)!Y>M;EbeAI85wKynl*DR6@_ z$DzQI#~lwUUogY>y}*E12TdQ9BNPdE(MS+URlKv9+**7Q<3%DYMxl;z!OV5 zUiAz=OMdvGi{$18{Pwy1OC2&89PRm-1RI0_66~ZtOaD$$_~H)f!7I|curG?#Pp(qC zm;qcqNJ1h{US2aOfvzV8bn6&NF+qmMqt-=WRghC>xinrJ+G*L36Yd>8i3R7hu0r>p!L|6DJicI33O1C9qDG;yBWPftW$w?)yTj>3;%lx>FgK_|)mU$%6&S`y z;oW!3zad^fCd;h~-Y;GtmPo2@4d9d^Bc=a>VhQEw0kNu5jh`f;4CR^M+Ns=4nYizq z7Q+gKCbLtnA)4h=m{hZ4)rz_((zUqgIK8E_~&@H0U)Z`^bN7*&LE2*F|bfj(Q7SrQMkOVeT{35JJ zc5PfUxG3sb@cb4W_c%X1Y?z#2CS9CtURJ5L+Ru#BS$@Jm`$-f(vG$PTx~G9ktiGWX zwjHau_>MH*>?))>so)==<-UE`EF*zs9rml;&C^jT&p4>`{o$;YNA&!XOqEGafHh(GF4@f!=T#bKKe~lrtU=&<8L~^Ev5Ta)ktTS2g-9D3zB$&%1TUB z3gBCB$m>W7_msh!^W9MxBCxvv_4gbdjK2Ld-JMeV5I$jlp@!sy^b)&g3)~LDM%iRP z*^V}7HKD&?xo_>ml%CEH>K1*=)WTzbNX;NRaW(u+xa*S*0e|}B{MI|+m&)rNr!61W z>F3xAe9JYL_Z%ZyXZ_H&jfAvE!RN15iC+W`Xs&!=7K|-Mmg`35 z3=6Uny)M#w!7y(=#FZ7m#yt!``vwWUs&neBof2tGx@n?}5qJgcch!~e6DUd;MHaf{ z(@_%L%gxavU&Ak2>{T(aOg_Pk&v@=Y0KDXc8~Km%yo{JHZ!E6Y^{~LIqVJDde8j=v zW$x4`-1S`3*PH7zV((&{UW^LZOBo1+lZGJ~87cd0233R~sw6WS0CH~dXpL4Q*7!D5 z#bk&@#(Pq{=72Y3V#*9-!k=4w1%K_d&KU)Ic#%$b{J5Ralxv}9iH;ks>!%UMEwDPP_vRbrEg zf}}bZq29X$AcWae{GGh<@%peJQRi+hyP#7^{PA)PwpS(dVaz> zJVRKu?ys#8y-ircE;-w~>q~J$l@yLz&lRzEdv8tizAx6o+F;`*D*-5zWPR+VIM<#U z>!x5P%?uZlT8IC2Deix(3Yx#_O`9CC4C+U;npVZM4GuYRKP8?p28lb|%~X7DxWq{a zB{yn4_|Rn2vp3^6xe>(H;onbHp!GJWr&Rj+Y-reN_U*;ilUVP08LX-RV7gU{&n}K@ z`mEs7JOlTmmCGPsoT=&;S3?C-u&KkbY|)blP(+A414JwP(Y7zuO-i8$zFuL92;kG*P(JSs34J%F3<4iO*Iy$==KCt$Ug`)EQe2(iGegI2!3)eQA z(^9O=I_L?!Yd(rMs?63yu=T>$Rm@D)E-}NwDB4cne$C`z$7`$}ueHDi36%>2*`wk& zqe!Ds5sH-2=hU_z4e!UiS#Vx{ILMtl@R*)jV1Y1L zl=qOJk&kL={;(~3vh=XE&D6E-WgX6-b?UZ)EI zU<5ejPWm}s$iYTsuR4{~)arj(kq2J=y4c8kONH24jC}IrpzZVTpT`3)l7k7^5CDRU z?H5xwTV+xdB#4BoCfV%F zWA43xOzNfj9Rw+9E==ZpYmV{a|BHP6t))J(*6o*fbIKL8SG)zE&dhOSaplLiKjiCZ z&877e>ZXha7sx7l=uXlw#jLmoK*F` zc{Ly4Po!@cJqcERQSTNP?fH`C<#D`7g}*Z3$3j4Bu6q(x3ndV3HAkHD@P(m&e+vLS zg2{1H4BNDqunZgRx)Sqbkm1)Q=xJ@_9v6-NiMF17LoV({Zp4x)`#^)MDD>jjkO1~D z)@^8fvf~asUK#&WNoPu`<`g${eMs$tNp#y?qiU(H!Lm$xx*=5h3q`snn=!cQThMPn zI++|Zz%EM-%10h-+{rWMcJcN_>8I!tgz*{mOQ+GtGN)PShc*{_ZIMY>yVL#7@;k#H zI6pJlr}^cr+#Z@DcGkI3mr;gi>26|7JmdX%JJbPuqobHH(Ki}dy>;rH^77poCSjCe z_;ycMwx>0b*NLDtbwFBj?2!21J0;wnP028alBf0qatO^pS zGC&?2cV`qn?l_(+Dn?ZE{nU9VO}F?K7hQ|XR3-UsB0BP-ywg$=JP*5h5_v zi?29~i_s#_p8$Sd+*D#FkH(`V^Pi`ySPdhR+QDW5Re0C*AgqY)zYqI>A~8Ukh(CvY zoNaY^EdU??I_$%au3*O=_TjZll&Ry*cq&txWtSw|ABZxsLvD>nb8}a2#E_7gZYWZD zW9uxPlscye>8;q(a6GJpp9+inicE(2v(82U16j#)%vI*ObLjHb$tgT%A8zLdZdGm< zgnrxIevSYwERp+C8&;rWxT|)G5~TKaietqadR4r2O!!K&9ILhqDRhF3|0R@QO%VSS zO7QW2sp{VZuC;{z-TdEm`o_ukhMgNXNh_YHx>dpB>t&CiAAyXug**A zn%Cun)cPZoxEK`EKy5?yDJyk}Ca{UnJ6!Np=gH^#*c-iOsa5yOD7w6{LW!GhgCn-{ zawQYGzR}x}sM&Tj|I+_-k0~wyd!twAC(i%e=pAjp-sfNwq5l+0oX|i8EMNN;W;8+4^!pmIsD#^Z<&u!tvuv|xf>H>PKl?IFBK`CTZx`A zkmH=Je!#qzmH+s-#Ng_=2h%IS;j)wG)sgvSU~AcwKc1*F3LuL!G2PHu+IpOR^g5GV z!_m(^43`7~i-U{yV(@7O@B_(_I0eo3sR+dM!1UsS)&pVZQ2PO|8~6$~ks6F2z#P{*P^rdl`BP+_D z@=xqM^_U=0-Z;)Hoc>2|sm7$rpTg#hj>}6g&uLnSuKhX>jk-^i7eloy72?%-y>+>( zTaJh1v$NPoUW{?$j`oacosP+D*POnK^f&2&$nB?#t4QMI&yB0x-SVEieZxI_Ovkw0 zd)i-n8P;!j&DVZHrH40XZOr6vXY@>)cGgif!gt|G?O3ao9_rHH22&w*zO1=cd%hBS zesy^M5djvK(eog^lR>~w%WO=*$4f%lB0;d8WFM|a5T+I%0W5;YUFP$UCD~>i|8Qc9cUG0T3h zR8b}~T{b_wI~9a|z3?A?$fBa&;5Q|gxAG`kex%GVALtw#B@Jh$qPKs>(9k6LNoXuP zk4TA&b4RUGlAOUQXOtxvp+|hO$yi#&EG=xOF*=SfBl$UoWxf%Asb!8;g(NRfz)pfB zKL^gRh#`G{9{+%LgA-Sl=k7^DdgqjVl`K(&@7y{JgqMs{Af|><*kn+zUMa{(4iN&R zjpIwU(*$Q^*z`n1(P?=luxP0vy@d_Fs1R=991*?GPyFs04p=+Y{#|<5U1gC{3TUz% z+N6<2k2l0%`EFG5wM)o7+24p=MM*y zgA!TLK4;wz6&!$}09h1A3Req0deJj(ssxYL@E3e4GDSfCDa$F08nXym5IwQ%tXJbKh2eNA4tKaIR5LXZj5kZkeC4}5Lq7jUGYXV0a#R>Yx|D<*y|*GPlq4_=A(@}HR$iE zA4-(oc_iU#ETQ0)5V^HN{%QrEe`YUSW5tr+AuB4BK8`lB%a+}QqFH!|sV^l@GN$B* zIYVcYk7=F$n!~O+n$9;jo6*m6|Ir=(L;!CWw`%{60MaP~tW98{{y!1G`$^1yYyx^d zuM<0j(o?M*vfH$(3YZ%B`bne$JOm1`=QWn@);Q2``SL-6pJ)ou9h!%1;7OEu4CBc4 z@&6b&2CzA(QYv>vLQU;5P`^zWj%TY=x@$S|XQAFK0(WTkbpGu5ZCZ6hz80_vUO&40 z^Yzn%pzl(M+8?L}&XYwNui60~f&%W^KWWt$oQ|ah z8-urL)o$xdZrY03K+PW2?*I>BQ0jL~loH9atNNRFjn>JRBB&k7zqzLszOD)R#`6&VJ(2IV@KlYmVoXo=qNF~5!fyD zjG5CfrDvT%#Kf4P&es!qpd@8V?08PGuq}GwVKP=ENFR2;X_v)klu4uy8$8w6udH1F z9>7lEOnaZsLeDzNDNEwanxjL3E)Sdh;lOf%Ug z3pi*}3VpDB$wJG6L~RFH$p$_vFc-F|%6oMG-42{kmy|QqFO4g%)QLH-I$I-YYmWI2 zAeiSmng-Nln>b0raSOY&ISOOH?A1Pn#NCWK<#^;+E7EqhgQMYfDZyqSgPijnC6qnz z)g0?eWv$M-a>++B5VIBq@-`yN)#-b$%-m-QU|(AoEpg%Pt66m@+Tev$g=gV3xUraH zBwr9Od(V_#sM3iZTa_^OufJeA`N-24O1E9g*GkVSFiQ7SSZcVBsH1}|c1?91j7cZl zJv>Mp&~4cms7~Ab#1&Oj)x+=|Q*fLm-_g6sMf{bah_Fw(U}XI`vzmz5`2hnyn!-GS zPcT-2cu3|3A&aJPPUCF9t4ID_##MGqc>o#0&~1I6u3`6b1UFPxO;&favFA#=ZN@ugRP| zI5d%qZ~(`sbyk9j!%L4w+nJuCJPRjpg()J>GdOlxALqNI(cV7_M|bdKD=Qtx)@!VJ zfJ%tw3$a$zZZC6J*k>m|M~B^HSYZ%eOhR#4(D8k9NEkwum1jWMnh{i>fPNVm)q5uT zoE(l_-$`l~Y-ajqM+Thcqa;2Q^IkXB9a0LrB$v2nI1^N|!nI9~=*QOA5pgm18Jwb> zuHg;yo}>BFN_N4%B^gDwgOWwWCYRiHLn$nR$6I4ELlZiT9PJn^7$*<8)9gks^vCa` zlpcO^9^fK$E@CMowsap$<%BAZhqoSNRY(!iq{lUI_oYS|m~3?zXQ^2frDl&hTY`2` zsV4Kdz|a?vKUbM{VV^RNl^dhTeo5?@hnv?lAlEPw1ouu6LRYO`5*&>qvPw{pa=^30 z$Ur?$N64pQdRZxTOWg1WN}fb~zqVF6teNsVOfSZ*=TMngCM6?4U}Gt)DS3NKFEphW z&yqUH#6fj_({1?5zI2j5yC5cfsg+FWSM`4(kS#Ri9l7QUy_>4;|8E|`Edn|D%TIpA zMPg&WRM|V6UnoY@xRc5x=`&qks>}9^c7n5Qo{*b(`7N1M8feW5%3#Uzr^&<|h)D(S zs|j+mc2U^n1w5zRw&PC6OG0ntd&@JU%5228AY!yLhZc5nwRHE42MH12kts^odl4ev zkTZ;=73GPYF&viB%|WB_;8Z3g+JYw}D_hT3ttwSP<{!TJCFjPdE74b?qetC{!jx|} zi^cnKcL2&q^VQb0HV4&QXMtWd^cJ!#n$0ap4RSI{tfjD9>RNuDPlhF6MA1wUmUibb zm`pV-@}dfjSDpg*Sd9Ek@=eiq;RE;#2ucw%#S^mc7Ap3t&J$u>_d_FILm6UW)TL|W zjP=5&_~+OK192L*D*xjZHRMQeEk3E#23+_9L-MvjXHnPl*HTstrT_VMVclxx|Ml%6 z{%Ruubo+A4A?iaUstQ`sH9Fu^7#Yc0UJ5d?hBK4hzTBGGhO+q0Ooyt8ZAYIn zD`jJ3M3wqBzBvaA;Dkw z-=7CDhD~2zotJVbk!#q=421I^G>u}=a#mZ>Lwbm;0u2J06)1olx?DsE|JZ13NO@{3 z16GLGx*riar*_Qeck7@?$jkNqxP!u+>?ama0!rbSMW{{SlLujegaztiCd1dAp2>!H z4#&s{3+(p6Ak%#)42MfHEMqmvq0hz!@E{!wUEO#@CZ6eOI?Y3W6XQ^beS9AjQ_57L6GZ38w8k*+W-CzwLq##&^VHMfj2obJ zq1k<+VPiC!!sZfTh(X=A4)pRQQGHQNX4#k!ZUWYP60E*bAKE*wukZHVtp`&p7Ih!5 z#h$jYAHTVQN(+Z6eba$fRo|Izl@Zh}@gqI;D?D|5WchrSNDgaO10>Q|^`pT?E>;CZ z-YQ+>jlTd;qsL2$L7e#JH=g}#0#D4TgGv^3aZ&u(nkGSUqphDEw?t+;{UBKUm%f<~ z|4QOX_^^ib=4_PtIQs2bjV1+W3)lCq?KK$D|MaSTb7=UXedqSu^$q&?ThcFrZksm3 zr$l=rW-%criLPmdM^ir;dYospJbs<6IKKGxgN%OS*EuTo?(d7eAg$k*yXP1^vfFL1 zrLL^COX+>jTRu_hIVVqWc!am^#xk?7rtgwaWIBSC zrH1Gx797qG@{QZMIZ)7w>^>=>{)tfBx=4eE>O4kQfaBsP%trE&MM1or#0dr4bOO^0 z52hmEuRo)Mf0LH@zuSc`P+)R(=_eF-*)#pJQBB_UG9iHs1+3baiv{lRChJbe-k-#B%SIpXA|VZ1ZnI%eBxfuPK*J07I%R*4mH1KLPnoL;iX= zw5sW8@`2q~oT8)hvMq(jQ*Jv-=as`GgCQnbE?CwO>#xpvP6)`y+%Xg4c-G< z@_XHd2{rA|RGk6uI;xf5YBucrGP3Y}jFAODA0k#+IvR2lCT0^vTR{(`+vIW%12&dFgW`_Xjn$iN~5S1-NZoNWvnPK+Q$1$4^`xE~@C z5NBBzLkc>_36v!3H)Wjz`2O{@+cjxBE_ZQ(l+uh-;)bVRcHfRjT?bxd%i%!jD;kGK z3@{AqWKJPP8iMT%!b$sc=s%7zC5RUX`1%cjDnKC28w6!UWK?uaY+QUoVp4L-Q)Fsd z^g~i3BQ&(kT+)a6d09s3&&n$*tEww9vvZ3Ji|fj2T3XxMJ7Un$t*k9Av$H85T3Zcw zj*g8_BtW6VIIsIiDThZUmsj4kELvxO7{)MO-Q4<|WV@I>v}kL*v3+#BHQi^_)OB)s zHF?^14*dziDJQqW27w}m0*SX+`}$&uILOhD%FD6^$!QfojCrN@b3_$LnanqpkIOL1 zrAUo?Kf4#5YeRsw++5k0ZE5GgEH_g5<_WI%$mv;&Q!muUE?CE^)mf@g^I29TcN@2; zg_^VJT0*_aQh+%w6ICM2jf>rZ81Upu-BvqlZV03TJwXi?dfs~<*Y0tJe?kvId!TC7 z53%ZxBjvH2%E`*SlYA?jj>(krWeB-`1QKSBJ_dLK*nQEHj<3{nr0(O3Igl=S*gAw4 zw#R4iwm8T36n<`VZ|GIL!C+uR46ff69aBioLED;-93wvJU-^7dD12ZP(evuuM6WlX z-s-yZA`3zzFaA(S8v5fa^{(ja%=_2rKfe7<()&z>i9(=LIF(pk(o<JP|dZ{)J6BU(zR)n6*Ba31no1m^=m$7nfvd3&bEr-+Rm}da^B8$s;t@0 zb8Fw*&i5SQ+9~k;pRzgkpY@!HgkwmwnNdI+VmEJldvgQyFs2_~htDbWN zWldmTx^xB%n0Z z@VfK z$HU}r5>9Pf03(OzzR3ftU+IOro0D2M6$V6yT z`PnbhdgSml!l0iLkA|lzbT9`wb=!yXvQI+JcU^~v9)a0;9X*m*Gu+S{g^)UD#KVi5ukyN zi5QC|TwTIhhe=(msL@p*x}?CVC+}Ld;u{&g`_6#Sw~ZOl#^=U9c@=A)qaHG?Mv+~M zl%8Y8pHA-qA3)ha}}YZNE{u1Z3xMm`j&G2olagW^6di8PA2}!TLc8> zO#tH)Y?ROJuZtC1t5EFCu3To#0h{_CW;`$D8cXoF=ZbH zP>=vgGnx!De0}9w5>7A+O)J5blQ9?V27jdFmUZdP2gis6JXov)Zr^oOAp1G>=Qy}9 zEol~3&ZdBuk}wfd7&0!ErUZ!**0e$Hs*gtEE|5S)OpP--#&*7kLOTj#j)Z^^O7Gwy zZVPF&>nr3EC$TC1L$(Yp^61P6dpKbr0zyWVB|<==UVJeGCeQ}c#X*yZ$ykaAys+p{ z2u!KYK0xY4V{$psjD9E|eChO{fqc;|gD*f~%YU#>|* zGe;F3B~?l7aA}cO_vN$5_CsC9Z{7g>i{cw~8Jwd_rYDfo60GMHaO^Kkk?g0Xzsx!D z-%(a@m@aVcdU47#aqE!lX7DRv*C;DUW_`|G@U)jf+}j(U&$6_7@=-WJ8v2DHZ=UQ~ zCv8z)uL!1k3KYC4U!@&8(UUXN%HwM__MEJ_-Jk7yM9YL<=is6-N-t()R8mBvU%p$CNP)Es|4}CmexB9RWl38l>A1y`6eyP9f}GeC|3Gfx z3Mp;>obbt41ZFv=Y}D~66J$7!b|XPp9xE-<#k1ZImXAH&E(5deIe==7v*1fJF^MXW z(-`K*Oh3}(uddyHsJzS&c~hQ65T!cEXwGBw4&$j?t419hEMtC~rnLUNzkQW}_35`E zA)d^lXOBVj=0MvEWwUyxLNn@ZayzX+Ju+-Vwe~iyfR~<#{XB=!H8q2N*uFx+yQ|iZ z)z9%?O`gGx&lfDeBQ=<49$PT<=6(1);OFW>QXjEKF1gFjiXS>bFVmoABEGwfA2r5L zLov1ff+6b>j6i_FT+R4}a+?#q;Zdx@lnn{)(2(*Y<1m5m&*5AV9kwDRDFJS9juj!0 zl7dSD^wq0+HpuAR?$Wg6PP<=26gAap^GPBtdL2OJ)L1k@wje}{vkr7$ZwBxC2CPT$ zRrGjn%Z|k&(F=Y#r<)c$fwGDs^9SO0%cnCVoY8H)=Tb4aa2(1k++x-LHOX=BY7Uvw zTF#-dr)qXJ5B#Q;V$Vs$7**aBeIzcF)A*vBf3;Ap*;Z>b{l)Or)na22o%6TyO(Nq? zeCx08ORkArr_C3ZI^4|*{a5#=3OLb>^bVtao@4EhoAFD?{a9>NTOSF3bboBa*DnM1 z^;+PL|Fe1^QiqMcjDDHb z8$IF?LA8Pp&W?0TM@v&^?R($u|2%cSt8U%+aveidZs=T;LqS_gBJAt=qB4IhMGoDv zvm@2TtfW;8Elqiqg_Df&4Zl_9`=n1sXkRgj288o%@pigDU(zgDP$a_S&3(80n>pSu z-M^M!bW#MAp;F%wu=yj+u<>rSo~URtuT91{i8l_17}W+C3+7tN-F-9SNe?>?x<}OE zp#S1%-~spT1gPqdGx2}i9;)j6B{ngHjH{g{E$j$j_gY5tZ;pnRp}w~O;L9`F2CM&7 zV89fl-W{IIzUyJAoWLYx7Y@Ot*fPJ})`(;j&;Xh|=sHi;nkB6v-q>IWM#lZy+he?3 zFU;R!kF_?t#%72Q&#Jv)tqC_IGeF3{Q64xW} zbAnCya3aq~vk(9bijf&6QxtL;wV}}B`svT^HEQsd)O??Pe{J|ptTlam_s{dA&Bo83`{#h?F3!qv83(j7T zdFw|7+?O#}2vV(9ad@H@2)U6YESY1SW-1*#>=4=pWGeM^bqmrh%$n`~#RNVK77 z;JozDUPtN}I@_!3{r3BurNcgKm}(vqRG!Tf&b6H@O(A9y;nc43EKjd#k3B#D?z>p9 zeimI7;Q#UEPVq@HXbl)=blENaJCzZP#1j1)eObJth4%HnY8cWRn()h{WUB8w;gi@jx7eW!Ny`8}7equ&Aj(Bmaq1{}_nzd0JW zJxk9pIx@PnR|_$Ag9B*$b&&)REQAa;{_;=HAyOke4}9VPUN|eY0-K2!8=@-qB)Hlphtu^ zeT#!m#qsB>K98p;P~jf&9R!SxivbF>ZdPcR@n$arH+iJ*!?)6n-0j~|pAMtHD=+Rt zH&RD{WOs^`RKmG4!WQn7!)j)N_q9l5h7g2OB?yQ>Ve-A~;t=mXFgXfFx;SVQ6nO#$ zSf2!9%Ac-t-#liOK3jVDhK)oSo&OubcZ_wNi;uDKFEH+H9m!q!L=fIwpWb!q@cF&= z!2I_WrqaV35MBu=$lw9=PCr*AO-U^g0u&-~n~1bRC+DO^rz;7ex-BpSg2}595#=)d zPNcOCHBx;F!02>H^`j;TW~4GK!9|VZLCmu!r(w6obkmf_cY(*jv#C!=f5q$(~8i z08;a)@7C-Pl0KOfBu~?{{1q-|KBg8`*i%E(lk6qbGwBcuW6e2zbQW|>120oK8($8 zjsqO|iGs^CY(zd;;a0g*S@IiUw_0>6)mA5+yjzYuj`t3T^xm2>lzX(=piCV|4b?7e zr@i3q{el&F528|K^Bmu)MM z8lrd!pNhhM*h}W8svnU(X+xpTpwZ>q549A0=pdWn17e2=JtlqxXwMA_SXP?O2$A76 zF!~`w$^KHd{YF-rbb$F2D3@d)t8!YCNi`obI@rHwT^Fm*02a81+gq ze5d5M?o}sx@YDP1C%};xOH`Q3RA>e^iFc@HFnB1_Uy&!mb_e_GjN}r$>VT|d)a5*^WS5$HMErI%hC)19={=_+X~d0 zX_3YH<8Ii>Kisk{i}X@$YtXIj(%2w9R-@s0=mK{cmCnYkR0CcemvjozJTs%dBxTW zox7RVpe=@c2fgg2drr@P&>j0mT??ZXE`}?8GBa0(i^eD*_PouGwL2Ur&!5glcFejz z5;e65qyMpDSNv5}Bc?g8c^W9sM={-R1H$r>-*2vee7ZZlrZns8i0s#QKfwP!j}X(G zuMXZ~ZJmIC)rPU|MuG+^DFQwkmZs_nx9-xn;Xujn`Aogssn54}s=4>*9$fKJXSh9luMzLQSLhrA;@K>$3U=Z!N=>@ zg^@~gcf;;8nvB}54iCy*meIRmFJcY_UgVCw`jglG1}quil@vRb(}I6LMcfrE3FWT* zQ?CN@+JDunJi~zHQ|R-6a9lTjExc>kKG3Q9Q?F7l#lcR0P2P1B%|Eqtt_mMi9YX4f zHi9wyjU#AP6Jj7(HrO}4J8};etzu>DKxp2^{S*W|@p$PnB#E6IoL8<1`cvs3JTWqA z1W^4-kR@xT0)Y=26OE&l7DvhaTDOcyE$2l%r{c0UxP00hedd1m2@6HQ^@w_t7w zvOA_pMB0nC$jHMYbiBWV@HydNL-4kU+G)HN9jZW_sw!zI4vp>zfl0a2kME9<} zna`*UB?!NX3UX)0JaKar@+pIm>&G)IrjFyU2B8thS&>S4?rM9&wG2swp_tJ#IyTMP z36jE?#N_?*JPG3h7S5dbsgTNAD11!vL!M7pyGpQ*U%5PtoH)Xu1<0 zKYTMmL!7NzUhB5b;6WxE+XWeL2dFrTWlD?Kt95p6kK!!Qti*d9qT;L{;bN~RaNdJ1 z!Hg5!aApxP56Z*YtUgcLQ1f8Fyl)6g8z!mw4I|3(q~NE@r#)xJ#hQ=>Kq$j*AAgTg zqTj$^k)6}e-2+~kQB_j76lus+}9bo5?uLauWXIuITO^ z`xgl4fhB2?JWHGHVqdc=2?#T=kI3ICTrJRwk~I(?S2RA7Wy+dZeI+6wh?{{(X@f+I z4V@|OqgAXdCdDUK{>kKqB*zc^ghu>Bi~^v#qpS{w?-!$iw5+(sM1>U3PFdSOKTpdp zkRikP?B6u(mVmGHnY*~T1Z;d{GBRP0hPOWwnco;=DLRvGxW&y$?_3r}zTf<3tnmMM8BOnLKE8TeLeN%? zTehQ%>)BHI-(E&3ZS{^C`*)vwTk;w^+b8%8f4rLTV(#(aXW>jJ)|I58eyF8o)d2U| zao3Vp?t6vPFEPc9s(Q2AlQQZ@Qd6N;?aM#z;@(KQG@ws#IqV`jh)202Q(t{}=Jl~F z_sJ{DxO?x-M6o&u=Qo4*Wk}8~iE4EM-4At~Q5?L1-%($k@{v{qyb^qLQgEV`w0Yrr zYVeR4iCK@~H6i6)jb(~CNS3m}8m%iaH~S}PYHs-#Q1oM!F0&I|1^y3iRR#O-9~kZL ziO)L398G5&V@-}ec;B6k>zr<+ zKDW6o+x|FmHO<<+rcHR(t@xh%ed|rhI~M|tuGaavO1(PG_+TKnMMPt$W(UHn*Zs*2jq_u9=7HjU zZhz;-V+l*0_X*OFnys{`eq*~J$&oQ&EP4L3U5Yl13CPXd-z1Hyb1jBG6#FrpiZi#bl=-@Q|xIZIubUNcs`KmNWVA9cCu@=bbJS zJb>0mX_#X}9$6k}4X$~nB{RY0Y0!9_Nd`ugb1Ubkm}XbSB5uBrQQLL8m{fQm;i()v zr%fXmv=?89u{|1H_Rab48+>f)$g153bqAx@H@XtJ^0s)g?JqR12vW$A>T0(R;J`9? zBGCvyJjjPZt@}zHo(dfnsqnW-CgC{%~oZ;?ex2=%%S#+*!tJ zfB9}17C+;r;m+p+xHbdEV^mm9nz`By^bsK3!EtjuUX_t7XvDiDes8x%tBeMeC&=8> z8gTr@QG*PRySaRwGDuFzj45argt|hG1Ww;puD^06B?G&jVMvSNpDmT>d|l|dU9Ep3 zV{!h;pH?2owpnGIk(r`3i0kTN z-G}2whrxf)CmI!z7&73qinMy=U-I$MZ?&1ch=u^hJUwI*(P zDxh6*6XE)F-)X22!ZrK}?;zbGW(Yhwd_}s9@lDDyZC3|#1r4FLq+syUOQh?~=2`Q1 z0W7;G`uT&_p|tNKXMbG4z0rl=u0!E<$`m3W@I9?gx{jTIhuk{0o5Qf~pFSn(lBHgYI_%G@2vSs83`PeqvuujEHldf2KkgrqJU;bo_b&yNU~ z6hweU8)X3HU7-vQwS3}3{_W@zC zx5k-F-OQGttCqwGs(`SiL|Yz+jKPI5`KPJSy<;sGri|T{i1&dm{H8v;!aSDdOj3Hm zwtSV|f&|E)JB?XgTLy<>{)Q|9v<(}J9Fy?ti}x)%;p%G!({AQyNxZCJsx~E;ge1G;NZgYsjsft0IQ+V0Fi=29J2{jBPgU*bS zAyD7TkjP!EHI_!uw$h|Ggo@NlP!;7Dp@`sn8pMYESUT2$akMBzeE!N1K_~)^4xVY^ z5v*$Qt-M1%N8tqzpnrRMqH(%2W99Vp<0D}swvTiaw}uL3r*Pt&g8M=kONv?U_+YVm zQY73%*bsdfFk!vnQ{nZs;DteEB^N^b@}dQp%m=6x*%=amq?$Ig^TQ+ciliSOBudwN!j5p&+w)Re%Eg47 ziItspwkW>+UT->mvi79MzBcMZvd@^BX9Um7#oU6ZSNkGIEoBubs89~KGrfv{t3x-= z^EPPXu^8AU!-N5TM8ZVfgq)WW?QQE!5dZ8Zi-Wn4_nHXr8Wg( zD2fVXe9I`;b|lfNVmULuJd0*=R@J+DLs9S+lK5CL8cAE{ed;BJ))!KIlp6c0qeLQ}UKvq)nlP$9kBgO`kCmrdht2A-$CL2Yrr zb8#JCvYAyZO}=TTOt5b^t#2`=wqcf@Ms%?g7fzCnR{2 zC~L``sk*%g_4xE(BJJN1ymx=c$NwF{`(qHRvgR;Fl0>?%hFtJBJp)8q0Cr5>yfGX> zEtd8d?3e@$Qg&jF(jbJ04IDQ*B(vt+8pM)ba9JVI_1%Sc>D9oTUaX{-Y>QlM#iP|m zYtlBrAZDy0pi;}?)h%TB(3#4DS#MSX-uU|r0U~(M%?#renx#8>>G1+ytPjSKV($J7 zaATA*xDGT>zvKf%S|J|1^8ZGe*?U{c0~o|W1aG;~_MiCpKXZD2&XDfEVaEg^;W^l( zy&<{pjT+GJ&JOch0V3@I)UsUe#*w)r7{qQlq^$L=r|0Jcs>iChFZ39634)m42wJ=S zItO6{X8YtsokvqyBE<~DFDoe5BHm+ju19@N9)9R+WEZI5OPHpx9!r|ww@yjpKK6;y zKD>J4u`w00G-OW&Q<3U=oDzcyov3jmWvwlz6v8iyiID=a7PJFHkE-ngsBNlC(beS5yp>jSP z=F2{^WNVw+D65C2u*C6DQz}&!2gEtCTbl9fol;3;gAB41X}Ih3EKxFb&)Q8S6^dQ% z-ZaWU>*o2T#t-Whs1>i@%r29Lga#Xt7bSHK;FzCIDAk6bPbx7C_2O`aTb_y_{M)~< zeKCGD^BI9wQ<*o?HZIh=5e5Y5+uyh6xIMhXN2%=T zMn5D^?=%E}1p73Z8aaxPWMe(j2|9+)Q8Sq@WWYHt4fJFlp0V)z2QF3eGk20y20I!` zc!PRqd}I6W7jzxV?~jXdjCqqUEccpGvGNc1H}Des?m1U|SBv1jx71Zr1de71zNSl` z=ZD@Ao};Bo7Jf@KEq|sQ)XJ?*F`M#gf6lSs_-UPA&C~4zG#OdTx?bpw6=l{asHPK0>Zqlt@BG@-YbDnj{RE(X$-^eMpX$`_y0LV@YXT+ zIsPMq+@2vD(NTO!>rG@ZIdU#Uj0kXs1dI(b{O1f&9%81^;S)x|v9of9SZJy+*!mD; zu5dIC5~X-DE1-;}4Iwc064zPSpb)T%yo=+QM4i)**X}feD$z-HD~I73uu$9q)|&#m z7k~d)8Cv4+L+5phFh?(uYpU+kNtCr?&W4kti>rqo*+#O|?ke5U6-*H+z#%12!HnkD z#Sum_%3_@nb-Se^z54C&#A>QL`M0o3$Ue&`zeBz%00t7uHOR_{x>Jz~tbthU4CsQG zcN-KjCC5M*-tp>`g7dyi#Ow^By6Q{7D#Fx4xX@_XSnXHUJO)Ih!8SkU66YLiCs`k8 z!v>AuR1g>u2FqiyYkUbpppED!lT?V^Abbh>%)gSQ&j25L$yu;RjSrg0_Zlriyl~#% zbZT%eF1CA_6(yMT2xgMh%;!u7Cuc>U-mXmmM_De%=)(_(E^x=3@jfF3?!6f zdGbXUsQ!Z6`Uk5u7l6CZ9F;O7Btv2rnZ2-G%xChJh;aC-6Vvon z9TFtRoOnd#OK`EOD@Le!{rOZ+>!xah$71cHU}`~A*F<&3Begm~%Dgg|9URm1vLhDd z6KFDBwc3St(KsG)cslNgNctOdz@zW$$5-v_iEyItivC(Kk%{d&oVTj;?o$NoBQ0h#?fVcfYE|}Nm-D6Pyxt>Wyx$v$H#D1iNWszr(y^0`njvFR ziH6!)(G@8$hRN7=cm@rFI-FffXjCgJo;>?HJ;3ze>rIAnSR=RVO_x&+y?w+9*S5nY zmp9X%3@v%N9~_2;E@zxAeG1o-cJ99kdK16bQhbKDJBUT|CXBDOjIxIfLnv5GKlI-Q zF(8BRuvhpB76E($ip3!2u%hNS(kVUB*3&@(UVR%Gd zMPLiyM!ZMGsI{@Jek%}lAT4<1PwC<-$U23M!huGh>#=b<%i*6*f1A=wX8~t3IbsND z+TV>vk4n5~Lp}LSv~>X!b`LlGU1FN>`YpO0Q~k(y#VNkl#m#=4{Pr;x2KD4bR@mPj zF5r@ofWV+$P|Y6?_y2H7*!544$wP@$LVvIA{{L+u{J-#kF4G|67Lut1KiG1E;b17# z6;;>Q1Rh9Gc%0>G((Y0R;D-I(Kh#38%wNt^>?2->y%c<>);C~L8+85yA0+O%#1@6m znAO#n_!*lNPx}O;#fA6~t3K6Yk0dsg^|Mq!*6!jwsyqtjvy>Avzf*?8j57onN-sC@VvEIu%=l*T; z>v7N!MK8}$*>BbDZ-<`-Up$a(4y}u?SuTD8RnJ@s%d?Jo=ads4USd$+CYl#zDWz=S zW{TCi>WXQKW#Fb2wF@O-nvcn&_y1tjr z$Iw!E-w}>BePGC5?k0}|K*s}2;C&A<@K9#{+KLjNK?at4)&|d|vp2KjG^}V+>^2no zay2xUl>LJY;vDjBBZBGyAO1A!UlN;yGPl|O%fkhl^+?4(9xecw2b%SJl?AsRZb=OH zm+EqWoBNN4`{her;|MVBSl_zjvj4nuyOu}YpSrJ~s4qouqQR`+9t~q`)e5c2vUC`X zNyZODfY|V4(D0{bD(YL`vM1hY^6^W=B6C#d0kwD}v+=#$F56!+dE0#S9KMq>A*=Mw z#{RGa|8$?vA|mow1kxYE45ebgc=eKLbHtFv-LxO#5D{2L~} zJZ6~6RMd;fRhknbhm3B1QgtNqq@L-4*+3ue4Vwb~oB5>1W@>Fa#E|6MlKM9@UrNxj zPq*=mhnGjLzO!ZXOSira8)w3Nqw9#*v?!0(-jBgJnCAg{=5!!yqQ-9YdBy%Uw{4ev z_q`u$v{Ymrbv}-R1|5bNDCzc(lyyl<_+o!i;t+Bb+VK8)^Ay)cIRXh-O4KubD%eXk zCZo_xcFq#SAigc%RgfAMOZWve8`G;FDu!y5=<=Y}zjufM=AJ#YOKFz;Ml!8-eLTkT z;`(Gt>|01xk1XrJ>4K3~Z0+0w{a-(xn-{zMAn@{#{^6-|_xEWy@(HnZ#>5Vv55>G{2I<6qkVEh$1@V?9_4z&H5>mtKn^H)TI5xt7T^; zF`w@^3wW_2BhVWCJDc&k_t&la`Kh=U1mshV z7pNbiL6qU(Yc?R8QFw`2f+!%SDh~9BxDhJp^ri2I(BNPPEIA_rxqN;5Y;TRGO6c};q(F#(b;w)6woD$&>B?9eoq`qMg zO)80eP+2N{1XwXiMe(vM(=H1;FA_}P$($xsR=tf5N)gS^^=*!;RB$Eevn}En;aV;5 zo2Q6$<*7$1Q21>DH@%Mz+h|F6r9Uj47UG1Wv<}=;EB|VsgNa=tni^XcBHV?69X-;w z=lnY;x1z%6=%#v)s;=_fi8L(u9pu&4?mDw8#?lw9lu|tf z8|5glBVeAKy#rSKlqHpvaj%od#W&*#AJ2K1y3yUf48~xQ^bvOV6ke6gw0b6j4l-Gy zKBeuf%GlpRCl1|jUj}4(Ysny~(iTel-EMi%I+rh1E!O3iI)AnYGDr$7Z8Bel5aK7u zIa=8C>Ac1R3uGzUy31TC8p8DX95CWBR`$-Cx?CH=jHTf>-`bH7cEkBBAfJw1I7ZB3wPjlE-ib6|XJzJiS2*w~Qc(s4%e^)gH`!j}s z0aA?$A9q-L?N}jr&#mx2h@&;EB-rYMN{)BXTBvl#I@O(aDsmQmo<`QEhYYLXjG8sw z9+6+dgBJR6wV>qwuS4E_cchrTe)<8|6uR;lU;meOa`}Vd$@N4B+n=*7$M@E@1IowD zF=+|8u3Mo4VNPoka`XhYsT5S61W%PwWWPt@W>6#ojXx4oyblcJYYeB_vgm*h_Y-W( zz$%EKCxXhdyFDdlHL6S<=6VUgGRMQ%ZsC&3gEXsusgJj3f2AV6%TX!OjWpU2)9o&r zdKpRf*bqCA&CpINBdfZoPX($D#(%OI3cvaq6Y;K@sYd_FX4sMrSC5DS?&tS-NC~Qw z`y;@P{8u)EmBLv&Le?9Ol&J+{P?$jEo8vGtIm1EhCTKX4C$b`(U<~$g5XMR$Ms_O^ zhX5o3LtQt{dtsgPf%b&n6@R8gK{@tBnSc?FK-`YCti3;VF1J@&RwWsN*vq+SjOu$1 zD`eU=>yq=qEGqZMrM*cx_Q+T@+*#Hqf=mi6%{@3B-v`0|L|jGF+fWF)%bQ3;6~Vp4 zh8`eFolIbk4A=0UHxdqsWLIAT+?y8mlkzHQj(DvnDKW(_B9-mr zH#EaPyusJL1mO-*Gt%$&p|kN+DJUMP#OiwSpmkQNvIT4Z$#3>yDc!4$Ov8tlTk|+m zn3c6;-XFq_Cb48hoMcKwwcKZTgsoYD94D41*aELByJTMly?a7h4x|Fq2|(MwVTl-Tygl) zV;)%jxL>aOQ=xY< z5c7H6vo(LlWQ3`fRHRKgD0A|;wwa?~()1bRZIFPns8}DEFwirc{sRi*DRkWbSiAaD zJhuV(0L^?TVlHY&%qcpq7%R{!o9cOAtX-UVjriYHOTktM5CW?AJ#Q_7S4R5Gk6A+Q2< zB1VX9+QG$G@_gJ=LXe#wPLKi`hSxK)l1c*eR{q>NM?>xzsnrBr53GHya`g|LXRC`zE?Y%Fnr}vfca~O zqTf3tB zqSNJb_1~UwlzqwutMsYK!Cznhxck5|(21s~D?-X%;2YSc+7GA&IHC_AOz@h>=#Qdy zqd4eXCA?_m5AUR9zu$r>#OZ&SeepOT6&shUZa92CCOLM;l^UjO?qn(P;6f?@8q%qi z(5uv6;zE1}^`ciq)49st04?5yXT=|4Cn^QQUD@0H|)G>9^@C6;kH(C^QgW z6q*uDE9p^0B{tEs%0Ksqur&mvO-NO$=$Fo}l~kq*q^~4}c4R75gHN3{*=x1J4X!CQVbSe%ov@|Fs0#Z@}f}}WfE2)Tx zbcsrfin1@%`>F4K-goc){SR=>`mJ-VW0}7(0@7F2&LDkBQxc&#fysZd9dBsyjbF3- z^d7JsUq0(-+3$*sy`Wb7NAvezv!VZ8e_UKY&p|NWU)>|%`pNyT#4Zew4J}6F!hQOw zWxInIKrG&XM4`P)hm2(mI-QSWvlg>YxI7HbXO$SSTQw&TUg}Q)bV>}4`g#*byj+A> zWEv4R$AU%|r4nszR35V$Nfcj6MgUh9Gn z6uIsg*?1EedW|6^@ySk3A7;OzEF1j!=CD8=&p)S^111xLpS%@uf8;&UNnGa|V4E?~ zEzuC-7ZbCI-oBKW36tI;mu=QjcE=V4diHfwY^+CrRe6B_`}!FJNre2RKfqYp|I>Ed zk0&%y!%v?>FpK}uA2RCHCV%OVe&OAeC+%Gh69nXxt6ust_8Bc5p9;!JC#YNh!XRcgp{4uyF4`(9;4tFc}+ zIG#Y_$;piC_?PH0oHi+_sktipi%(^!Ha++Wtb_&RjZPP^eT8P(4T&AKI|!mGS^+wtA{1HsASk&x#s$?s>&Q; znO#k|vKA|KS}MxwLq_h%@!Wpc`LW=x$HC7qG&U%!K31ki`|XptISDEARE?_Rvk4W2 znFEO^TpXa60;^Kc^j9l>$wnFpWjg;IN%M56yf)j`>zee1O)Gr#+=S5=`p7r}~VJQ-9Z^rywlp z-WT$XaPP`{&laLF$JR@beEcZ%U=j{ZUa6>KLMFwtVaB(2f}e>f)DuzMiNpOe(B16x z7~gG%H?{Q>u*>R;50b&_?sBe^^_=4O>Rl$qTkjW55xb*i3!|w=fY6E!40CNO@0ZHz zr^SoJl-mFiPU6;*yZar z8cDIcKaF*AZ*Q|mC5oQ63MW4)*wovUgw)=f1Sx@bfw7+*D?in~3_U zUq~{(rFs5!D8b?gmr37EQ%!Cv5SycpL2&Xcm)5r?x{4h5&j)*DSgXKSC$Ed$0DeEU{_SH)#e{R9+ z`sTBLmaEIXjWw#&uk~8>YM=aGep;9aVlJ>oe6rxd5rjqVcfL7v=l$mATpF?R{GGnf zLrYCUe@ks&MXb?U%D%|%on9uoZ$^cpM`Z4p5T^DCNMi8PYWxph_OZ&?=SGo)4@lTh zMq?9^*&&wXFaN>x1P+sgAVSapDCd{+`0s~FyY63X5Y+Ga3vo>4Ux&&6X@&KFavm?{ zF93z`*GgA1eNoMoDCf}S%g?<0=N5 zEiiY5r=>RH`0Ks_P#!U4INdq=ygbM=(Rujwiw&lmneLm46J2oAk6>I^Xo|6|88p_{ z8iQ}}#n#k;IHV9wk{G-kLD=46OU}yRx_Fyi$->^oAdP#%7b4p|nW%?5u|g>mW(-Ra zpW32w;>SrqvMGE!eMrd<$COfPiaRm;m1@6s3~W@PFN-tf4!oXq-)%tSa-+tT`8!vH zxwtc(qynAu*2tIgd_9Go=JII<5~wJN(%t^S^!!y${%3pSKb^-%sbSv#<~)`xa=}R? zvX=PqYD&%-(yKCN(cQIDGsx%~(#erX5(v(1+4x8kn?|4mkB-~m3ZT(Z@SxLUI zJs5vq1vYXZ5KXGOL{v{I3}5)%Eyr8)`Z2fBtH&Vd5CYn8Zs4irL`w!(5=_cTbR;aq zLQu7)U1RO{u*E4@6bngu-xdtw*# zQJW4FP$3aBdq?fY0(Pq)`~m_g$mIvcl9T%|B+hkGnfmUxj7|Czk3}nW5lBlBx0%*U%79bY>Ug+F-Ab+u0;`iMpV{`2#Ov0)URGu*3WcjM z?LkRp^y*qw;yUW;I-&i--#@ngVuO77^!+nddYhJz)(A7QKg4>wo4lCR=1hH<=lRXU zF!CEWk47$$RUN)|Q2uc;t1Lo(^2YS`z2k|@^ILm=c-kUBd*ol8$J?LS;%z{eDByn% z2Y+$})BinJAk37uhaslt!9UqP?2hUCl`GJ0bnF9DkpV;>-(;dx?hAqcq+A_Dq@P1D zX}nZI!~Cw*Z8bKTHUFYsF#_jN%>txN${3n0Ltxk(PRt*JF)!hk{)!* zK)kV>vLd6*MDeYr|K@b1R)m2peCNfz;Fyv0OrUt4YGmv@l>FxC<9jU6#v)0x^v5Om zTmHWh_={5TFQ0#xzq)P)N^bnE!T7%l{N+DL-k^)}SL|;jFHrs}uLO35o^GuqE%l4O z^^2I1xt1)3tt{cxOxIAoW=`jnmBRbt6^5!X#J-;Ijoq=9J{@Mtka<>M<263m%Dcur4!rl&Rf{ub4tln)rNy1k)S}{0dCpw@ z);%@-alE8Aj))FtO%aCTij!p8VmM_}#j7pC@y%>=I$@)s_{V7~u<*79|7YpC2B7up z*W6b;F|Xu|j1oNq@EB&yH6Bbt_*%CkeZ7}*Ky68P*czs&Hs~-8Uh7YZ~$dj3GRm$`62})}M zDOYu;4<%`dT)D|wL2C?BUtLwpS8mSI&_&|K9w^nM> zxvK*=guOwlGg-2R>gP%uffam6aeQY$=@yT5rxR9f!gYLJ`j(W!1_ke{S{%ZWmNS$P zW>*W+d4vxI-h)=mh-W1|du4oTDEvwfuSGri*ispkIj5J2ApjM-F;HyO5Xtn7cQT<8 z#D2w{PwT}>q*~An%wM!uUo9`6T)i=St=p81$zG|FPnFkP#Z@bC&)8Rd_TGT!T4_Wk zV^xZXOTv(j1#2mk4bB64j`;xUsWRX9nN)rmrmC@xj^)q6kOpkM!)P>8NH|7>e{njrEE10y&-Mz=;b8UNL)eqi0-VoDe=1{n0zY;00BfZrlC+_ zw)iez2{|XurAUQ>#rR`=Cgz#f5O{!7NI|nCEQ_C=yKyMUP$XJ0VhI!Qcmuy7x%5{5 z42xeYB&?E_AH{^rM-t@G>#tmYPr0A36_%CSYD8|;lh@QR6zwL{B#z1}A1x>EMCB$LM?~_3CWIS6aANn#9IoCyz zA{uiAyYL1n1!q{?lUMUh+fNCWc1NZn&58;N=T8y%S(|$SdT?50+5w3|-{c#5j?r{Z zRA!a+8P}wZc{nf24ks5T7CUeXGaroH+2e2}H8FS9_!!LTAquBb#+#%~kDdj0|Ux3)BSu1>zR zYXVX!+uF(uQ{(9YWqh~X^hC6#^Sw1H6ra6_!?aI5*ZBS}%iGsD1!KC3@b>Bz)NA{EV(%OI_!`6nZ((AQX2er68u)#f z1-ID;Ut%-hbesX3n$k574rI9yr5t(Rb?LY7M`D&3$s%(DX$B$Gtduc`t}87)+nQZ0 zy=zNQ?b9Bf6tsSN5yG8>Q03H5bI`GPrq};d$2t1`e>#4D34*`5IO;IT0Bvv^SqoKb#ZPL0i=(+S$ab$nvl9({ zJ6m0PBma36r9cV+T11u7OVM+E$Jpdff6gUCrlPw-OteM!ExKyjn%rV^`Dygt98s91 zRyd4G<>WPgeD&Do#iC+IkONJ!>GZhvUqQovI(|Q7IW+s%T~mz#*w9~sp!4fi7B2%tR38Y9w1>hU2ntW+jxShx+i@*i%oYCuCcE(&!<~ezeV!4{asbg!xUqiM#)? zOzXXVVG+2eI4VsxhB=5h)C3U)Nqm6xWXduH5Hi@x>|ntiwd77Q$IUzD3$dm-ut4`X zGWl5G{YOM~ZiEcbpaOk}!+A5H&U}roiT9yXdlkF}2R>ox+qJCDMA^?!kFH0IhhEbN zzZwdo3flsI)Th4g+fUK==I%6wjb7T+Q%Y@luVzN8e4%!{*$tuA)kZ1rw#}YVBbGoT zGx99ySMeW-MCRB~B^Eon@S2n(r46gud4HYmC@AapEYwDKz28`a-=PcCAzG zO&9rDQ*Uour^+DD?f#<@SenrALhyrFOZk*791kfEyNJX~JI1Tub{QYNqiGh{3J+LS zwtG(NH1`=N$$oMcFrEF=7^*TEzAM^+Vt`jVsGi-#Ymf|n)AkH$hI}h%WWrfR-REs8 zNSug@wpp?zSCA>eZLMK9MQ7c}}`6J8pC@`HIUp?;vmp%x~N zT!;R{dW5!_r*>!pz~qIY50ujT3_ud0Bj0!rGG*Dr3t=TZ@dd%4KQ!{>f- zQEAle4=G+HjDsB$^BL^RA;v2>IvNvPouMgsv1#WSK^Bf_TQzV>s>-MWy;{_d-c9ck zIPS(-1N28H*Zfbq34E^VLJBuV6{$_izWfyM^xMG_m8mhu!`C#kQ1#HZC% zKG;U%$xI9pi3N%rx9b~}@W&PE@JQA8qPVw=$e(*UkzVhIli%^LRAjD_2`)%sn8*`} zZGBYh1;^K1sw!@ysi^a57w|pcXLkA-C$Xf5BIMS+B4HUso;isMTv#h&T(ZTZT>_K& z_(YRvztXSN7jhB;E{={TP)_z*SP1ZY`R!;3NeaBY!4gtIHxE8lV_+=k$p0NdG$HH(zo!iv(mS3q|mW>C8T z8r+Avamu2y=9lxhHIfja*^ANgOgrP=?$gdA)+IwSIaR4ha&k8$7~ip{HkAPh*Tst# z567PKuQYqAVA5)}*VqoFfs%t-lEWQEJQ`v0V!k?hO`UcA*Ebr4EP8Q+JDJ+=K>D;v zF8MG-Gw{%fj$YdkPhBbR~{zR5K1>EO(xiEhi_pMXt zgm=AUm>sS*3ne#``8LTOFTpSDgNd3N)YqH0f56Zp&v{}!~U)BFpzpT`Z^0P#rL@(gQt!6{^~nO-5YCVV-E(AvV@Rq z-o@#5#d9ew{F?9qXZN}5<8qz{`&ge_CGj66@}&g6j=9L}%JoOaP3T$7UDX+r3SSI= z{Pk6f#@eV<@!a=00(vLasgJQ8>ida$b0T+0qCQs06wK?H=@vdDrjCl|T0(rG2k9Zx zl4Z)4p}6!u0g%5KbwC!01Ox>Qfy#e5eSf12C~yYSV*bBp3?+HpDvgV&cv$|I3F2Rj zy1$zs25y1R(dIO_WMuZHgko!>K@l2+Ph5W ziM-_e_!Z<9S!4bDD13#L{BDi7Rt|>X+!fufVM6y2~mnaSXt!B%<@JS_=XP6^fjLLgj zO5XbSpcVa1lL!hX6oUJ`J_rT`jV2$^;%&6Nx@CG_nw9%UB#+T;YWtkRC^2)q!h|2U z$PtlrQ#|a6V%L2&ZqE}qIwVofp;qzNL&m7G>xZ(KPd)V z$`lvG*$W`{@jR-M<$Wf)O+O;ob7?hB@klWk7n=IBUxWET6sY3oz)Ft zy#Qa4o5)9#MCvBdr*^5Dg@aMCin7P%92YUf`DUi~_**4Tlje$KcA691m%4EXG#r`_ zUHNWQ;|y_o@Mw@Mn#dot(OV_^zJj8Bv28BQ`m;k4TcSAWmiKm9#w7IK?Yc-t);%0GSSO`g)ICeq`YC zq~o7`NgX+77p2l!8l?T9(RUl4xTujBKON_r2rd!TYcTVWGCp@wBw4X7E=Nu+%zYy2 zl&BbA>(9{bKbnxghi-u^5{%nN>Q@Cpt$oRe3k?2e>iB|M`By3FZ&JrPOgSpUXfUj} zKo*Ki#-h%&R-gOV^z|LfefxoAX60C>w#M>{Zghqtd%tl!DXUVG8|6$9i=y0xd6>mE zfB~Kn#uV(8jM5rJEM9>3e>oonLO4C#|YHlY$K1iL&MODml+)^=z@NloqWV+owH9hst7ZLK)T z)$>G{rX$B|9{P5?#{WZ*TnoZ{{vPR*clw>J-6KOHJ*2_~kM}qGK5&!CWBVqQ-59jq z{R=tjuXKPROIyOom5>uKPrjFUTNDo`&b&HH;6b_zYax8d z<$+e0N{@!87Xlzhv5ahGq^P#T$_l)(ceU;Xomx6Y6Wb3yVk}xtpuV=-=30qYbuL!r zM>@kFU&^R2hFkOoz=bfdd(0CV7_ zz^NX}dJ|v42umTKrNs=T_Y^5$Sm%##WHj>x^|OnpZ*?9!PpTI&seo~-DiZ~3Q6bI+ z2ZS`&U&m^i@^<3sQyYo`u?e5Jg&>L$wt!*c$z3Z-X_qvWo8Egh9)0ZLDoqnWC!op9 z+E%rRR!^X>j0K}|{RSljh?G-vY=!OSDF8{0cdBtfPBB>IoE-hmM$adGQFmYuGEbYG z>-RPUf330S&D671h&^x7F>OwW$}5fBOzM+~0+ET*=+yG-?XDp~a;22CxJpebMU+qP z*K22VoouVNEvN6OHY%Y%*kFHZI6X;?Fk_x3nNT5$M;r_tn!*!e=q_9N2G6NSlWQ&o z$6d7P)k9^9haU`s@g}sC*N$dgQoi8W-aOZs+mBXua)^XfomXL`p5kUKO)tKyy8Ns- zR3ySdZlRC{zv8D?G1X(g$;U5D(U88EemI>y6Dx5@H=##S^u$(RqNQ%`$TT$j41z$n zm2-qZ-?c6uxo!#IqP&t_4=I^RvdzkQDwhbLdu;IY;8xC81Y+@gC@@HlN{HQg$lID1 z>Q{)A;h{&F6S62qu}>5@|wNYuT*~%Sio0j#`oYO^)Kx9@e>fkg=AF_(hIN;UP5Mb4=dl z9Wlu}$YNhX5?Bl)%<3v(QdqR0$Ar%1LR9u&#i%(74X(5@VO(@1#o2*+M;{XAEDETu zY4u?%=S#SIV-#XooRmr~$!ggWyQfpR3sjTBE%YFt*l9If`U<(1Z`hde*`RbrE>OoM z1M--uyQ&jlg>~(7L*{x)wW_Rn&>9~a%rpw?!Xf|oX_d8KcIL*ENtp(W|0URwsF>|) z<*l0)F)3kL50`w?P~B#u+}cO%I9$Yk-AGkg^B`Q4ED%R>@8ct)Lb{I8_M)w>`!fFGyv{ zA_KM6wvf6;S0|Iw(9|kr#(v!51r!K|YfBg{T=lId?f9I-W); zuu`3vi&xN`!iHQ7{fvu;KZ6$ zay!O_%$zfrY7Vjyt2r{@CuMQ-j!#!-Uv!oJRF$G|Iil;IvWb%*5A~pLp5(ctshQOM zdSk$8wZu>_{K0NPnSbsIns>Ig7z*suz|%J-X>|Z z!ED1CkxxI})NOvQK<15q5X+DsViYb%SXh})Pi7T!nf#7eu$e03yJZy;R77otUG;oc zQ5_koyf>rbCVX%vTgYs*@$TwjrtBD714mL~y&0T_EpE{5&U9|x>znuCyxr%cU^sqw zs?NF`<(j^yE5CEQV6)QquZl{<*ywyu7x@RtHQ`-5>a^E$RgyxV8HgT6aH}oqF-awK z>6#R;m%#OG*5YX=kIFeHiq_Hvv{9O5+UnRH3%q4~&2>Xlo%;$j+LG$k-jdZKpbyp! z_xMO|x#rT9eXwWzKG(hxSaW#T>(2iD%}a}?kx{$DRy-ZAGptjauP1->{6{+RlVAS# zg{_mIs_F4hK^@=U?WMGIZt8yyd;48&b2KX$euT0nJ!M=9ny%~C$wcj3GSZ=B zRp1&?`LaPuX>vj-Q_4l2xQ9yNFxa}&J%A`7#~)06QlKaTGi%@{?5pG|XNorZC?!%P z)viyH7rjNiacqDZCpTe~_JMUI1rWZ}osP}^N4en-+U>u}2k0!aKxVQZFA0|ISRX>3 zIw(m6bee(Nqjmzfsdb;F5yv1I>tE#t8GR5P2t7TLokY_NpX-7CLaXSv`=b*sE8V{8 zK3QV;phWi~I$+L5$%j#m|1nWMt`Qw}6aYLZKK6kLp*U$J#zlY;8xK48a((hpA*>sye^0}od)B=QVX$Z#LCJ9W_1nM0h2{4O4D$P>@>xlK$%hNH+b{XRQUzX# z=llgW|Htj||Brn53wkX$W$`{JB1_xmR#POOQ;@v2idv9QV=;HuQ7sZ;$XR1M3uCl& zGB12H-sX5em^6*Y{w8}YT@e*wq9d`sWA`+n0NQ@L?B)Sq{>2`5X=w<+I;jL$C#Z79 zGh;1gSXkJy{ZQ_?`(O=YQNs>RR{8c$6z`AbTmn)Y0sIG|RPwk4oO>0q@f{hK&S;(? zY=sIi;Wa`KuU+xc$xkugs%e_W>|^sAZ;wxIMcy>qph^mPT-KWf0*{?Oc*EQ~81;My zS;EIYh}Z;?nu$~nb>%-|w%UFB`8jbg^`5W7tnPMKE@7icCyC3L1tmQRB1_|QEYpqN zuWn}+gJxF(8hYr%uR6EENocd3ICZ;Pqy+?oyzWx0~M1Z;cV?9$j$>q#D7u>qPZs|r6pwXXTovUaR{ zo^GEVMlPNPhZ^jyeOtKfc)NdL_=ZK<%a>|4fyvXEmw$j>-!A@fQg=JjYOW+HU2!{O znnaVXE|cY=3J<#d*>Y&{Gm1xAbk7ixBWepK+*9UoA`737E?Qs+DaET2iK5+Q#Z7L) z9=CmpBwmtA=<*RsT4rOt#(b0*hE z5~-(r$O;%ZFY~?RaaNMft0gBgVvO?3w4(VucmLocis&XzDr?{x2Kf*0BZ93*H+k6SqR4cbAIQln+TK(aV=obug4 z{`=kXgbQnL?jXOY9*ozg&F+^+S+H%zBd^Gb!;Hi)0BlKo&!Y1ep?;Nx`rQ@9r+kLD z?c-r`@E&Ize%z~dMXDKkFK^#OO(xd8h?gu<=cgewP@5cpiO4-5G^|2+&e?4 zioO;V^*h$L59VNnCmOrsdEp!x2|ovdNe;_C!#;N`W|2C!XafmHnu6FDQ!PlC(@O)g zg+;1(H_zK>p<7&3%ZFLoY!7+O3h^l@BT@Y%EX&1-lRYqaQV1^R&-jGP5GI8h%YNDv z-_xMoihJ;2syA0?n7!|;mRqO{UR!M_iI|e)UrQwQD~1}%>9IUuE+^9f`Z8V#RZcX49OF%`fA8h#mX(I!E(3v_9YUZfwPCVzJ}LG5XFYh;X)% zLdhrjf6yu~{#kCYFs|&qU*ww!$OnU#_Sb*OhhSY_t zP(8Zpu!&nB4;3LwbeM{Z9t=g=i^aQAkuzQA(|v!xrgDSWq)Fu3O=UsBleUlyaLV8Y zhX~1OYdd90Ui1R-`nP`#7xIB505G-Xe})Sc;+=m}PYV8o3;(xTvo3>_6Krlc6Y=ss z^fu&r!X+NPVl{Gn>UatCWCd3P74Kdqa8@;KKuXFu31~rZ3S_qV;2=;nI0t<^a!o>+wgw0|!h;o|1#*}64(%Cn*G zhx_YOHsKG#uXaEZmT@8Wva=5Y&Z!UjD6O*^mMrnud0#~tB9Lqta+-U#Du%W>%igB? znrV(FxA565vq;oS68i1L7|_thxe~e@QK&^@0;&MXi_#W$9i zq$bzpuI}+ym!g}bIx|M#8n+%Kn!CzX$5Ga46B%z%MR5gh_7R^BirTEA;=x@^7AdPE z(&c{8oLz5zS;~0;KTlQ4{7!X4Y(Nz$_nc%EC@9$$TGtlT^x^vRd5xa>dYXJ=Q;Dr2 zXyZfvYicCEGS$YWlATk~=0JYk==ymjfh;^VDk)@Ra5^X*S4VMXl6)3{?^pA+056&qC$ct#0zG z&zXZY0$y{y8+jK>gxj)kD+v@b8%Fu5WjTaH_;itq`bEf+GRceJHA`8zE9}v+6?J7itGu@AF*Zi!=w0}gu zgRFh(jb_q!Z`#^=oPgWWUEj|@gw!8CA!N_P%b>e7h3N%t54kWAasYf zlsW5s>L`2WZcFK?;lancx8Xtm4CZWnqrvoMM_d<9Z+2V>ZDY9_CIaCl%Lawm}e z+IxZW#+xi>JXe_C4p><{y-Udb)+^ZRshLmH`K0DML_9O+^qW_0Q31IpJgsRMmr?GO zaNaJN^dIKlZR<+n9TN~-Dv4mk0G8wxYoo1|JY!U;|7=AiQvFqX$>KG9mqV^^gdq zjQj!%5$ndWMUyKYTj!j2p32`%eRe$a_`TBc`v0D=g3ng`Vb%LvZcyN zcMAlNMHOb+rMk*=Gg_+z%5fG(p0jUtAP%;IroTt+rBETe-)s^XF@dPemvA^vwi574 zN~nWpWOt|?LC6L6l=jmYk=V(|5dXrjLlnwlaw3GV#zMvqE@&Bh`;^sdXy*OahYNw9 z@7(N6XMKGcgZ$(gysZ6@4S>39XtEI|-=ToOMVT3ZlYdT=Bjm=n9dEj}**46aba8eQ+Je=GW4iNqzcV`eY&ZyWV8 z^- zO4%ZdmVBW*pZsP%KGzdJ| z2|>W&#ECm!XmYyhA8mUn9LjNqZLa?jNsjzZ(<;S@%jbH9{p{(r20jWr8Pqy%(9#ui zcbZ4As#-5|AY6z@BCUZy;Nn?AA6f2oESeKAW54t5D^&)>IMg81bl)S3z$AjUDi-`n z_hemX;izjb(pQSUa{bxPr zAH#D0^=N-Fp8(*C0d63$9r*ib4{QgvHLgDo6!uuW1F!BbKoXUI9g?lwoC1dBy7B@8 zr>F66wf>o%|HTdbvi7RWxW_$*GH5RuoBCOzuCvX5ahOu`TrQBmZwEXjuH1TG?qnDG zobsINoJlqmXYF~k$YbMMA-j-wPhM66C%TU<4SaTK ztx-T29v_p=ks#r2X?F)cZn+9VhFyI95y;hKYo<^{x<*)oLyEL80gO(1if%o{?57Jh z!)Eamm(DJYj_WQZhMt^|*2=d(88XaQkxMzWU9Rr4ILrYFdeP=kczO408VHvO3T%>PN(exk13qCJ^-^n@`4R;dfhZie!)>swepDWl4K3N4?9t>tUHRH z#_h-lXzd|CT9R}5Z?NW~3BN5U+gRcoFz~aO~Q`&=k@BD*gC5DY9Ct9vov!s-k%1xp$6|8l?Q#g*BFkc-1RIR!!6F+whgPolR3qW zni>DQ{y!w-UGxKAGn?QS^z}B;bbl=R;%Hq?st2aj;+x%OtiLV#%BASnvbb?!K1-2W z#4_!_F8r-U4x&|0?=yN`Y(t@d|JXFutEy`Z+7}moR>*b^hed?e#q{VKTT1;Sp1~a1 zuwT=ovQ7y1|7CjgzqkATjVl&Gr}3z$aGo~>QTvNnbPgbkyqcSBaw~Zpp>!8ml;v-9BT5O)Rv*K2&>*f3j*1a)cCn zO@lLSLa5`S>pvpHqnQ5!`eWe`bfeQ(yra0l^U0K@|6ROh$TPy`*TVozXb#4z&0(h!O571S61v|G;n;B~wnV%E&y9VR2(0E>Ft@r{e`byHebO)*dB?;SN zo1RvZ250-gjKoxXicl+qy%DOyvJ;{<-m45|M!tUiv{5fMbCf%-XPOyG*?*^^?)bTx zlclB@&TiO)IHUTueDzUpx&fE?o%#DDwV$HqbyU;FpAh{hO2@0c^|*o1ERi>!9gPIz zS~2#{4VOPqYIC@2-&x>}h{u9);6BeD@>=;|q3rQS=RcB0-v9jeMH$4MNbHD0Lnv*r z8f>Cq8YA0P?x9>>L_PXO31XB6t3q6*O|tJ{`;dYAAJ|cq7|gHr6&z|(pEN!SmJcxL z_}|!3mX~o6sw@Eg{7*e-tr(t3R{;n5|E0j8y?h8vik#F3dOkE>w$TDr2{1`pw07mG zj7T2e9eXM)&8X{u@FOv(eXkDV_|bq&o@0tN1)AejO%%K|nGC@<1?j8|Dtm9Iw5LC0 zE5l@K%K4?EGD_e|ODJ$bF-(dMmou4DTSx97BX^-RH5Lx}Y9=o2yH&y)DuEdQEoBWG zuk&A%NHoqu5>P)X)pIu*z0w$;bTC}T;Y0xv{wA(rHx&u5c{qCgAR`&auOv1HIlg0g znAf&#M^e-?W;f#K*{P5wajB`)FK@a4%$_MX8>)QGyEH$!>BSq>VGhJ2BrY^Gs{Q2A zx$q#WTekXeC z#wBER{v7bM+I#iW5%z$LfZ^(Q^aFTEQ6jf`&oze=o1j=cnUz&w^5haY$2tHi_r!WO(e?(lI6HDnh1fH-g!VrqNO#?_?mZSLrK_ z%Z7O1ddd@BowqF+X{8~7r0l7lgvk+JK5aGb7P!6TV-llt+B@60S1)|WuG00ilv#=? zo`!%V`-VU2gmO+Oj=7#cb#Gs3fb4A2_NuD#`n$e+k-&>^ z?7{RgMS0C1(d|Uq<|#BA{GOfbgVB z8Wz%>UfFs7tF2Q^ezbTawv{anZ;hZYmg!s)u=(Ip_=^}yXQRSMya~M5QRKf8c&bfr zRi3x`3@6amkzdqz=ibM^yRsF9#AI)*00}(HNeU1MYaFx5+#j0)B=8(TR6Tgsx4wvl z0NagGLk}s<8b#MB%+1Jw-{+_~bxM-2Y|arZn%yO;*UP__<_eTN`X8sk|6lw*f8&lY z5SG|@QuP%Es%vo9FD`3O4l_$fF;>ip~EBi#_i4iY{=on7~|w`#KnljN{0z-SMfe z-z?0c^;pUU^*k@OB2ps;#zj1Db4~7SB>H*IP%?-Q*=k`K_3Xs(2c)unx)3GKMj+?| zA4n(Tf?Wey%hQU3pjv}Db*)uE9k2?#CVn?c`IPC9iu<$O;mfLJIrxjNK*yT?x%qAl zj!wwOfObye8S%-MygObUxYK7xuk!CV8~d~NjUCS=hK^fl*(T|q%o{sxRL{t+R`rE? zp$0BJ-f652Ht<$H=YhY_e4efXv$S*iG8WF0LK)ECF z?{7Hgb-S+TbzP79ozF@X8o}|BwTIlF@TOrcDN8+Ui1$WrYj(!a$Ck%JOG*h%nc`Mk z!S8(0t{Tcpe%BnQv6Rq4S?f&MNIZ%z zcJIUo&2^&Qo1sac4n%<+Ks>DFg$fD=Ny$a%IHpz_eWwPs5Q<{Vr5Rq%brh6^W@V*C zbC@xMF16wURK#*4AI;k>SpY!2O8}_%Sc8g|OwSF^Rvm%;FAr%7g2=)_TsFST>DH>N z_v@yExF|a_pe$gfLZMM9s(hGHTM0(-@u=J3O?WT4pj6l7a`=p)BQjP&Pi5 zNwPr8&-0jH_+T$|-Frm2>`fwQ&M1u=5|1=qND7v-bur)#R{5P;eP0$Gg_vJaX3r#v zz%pplxx&?wNrPkB8dacv!P?BqWQldsI*(YnO~s`JrF=I?<)^zy{5qi=b6Aw&FzZzg zp4#*@0gOzl5l8E?(dme-Q-}@)r>+0iC{S#!<8g5T?&i5odR8KsG#mMfo29E%NpC~> zEL*aBbr&WoVU+CYuq4N~sfhCn8`QUi6Q5iN5?GnQ8;e6=DAiEO`#D;8l39jsHeWRu z<(Rr5)*O3*RLP>%?#f>AWe!esJzu#Ch*TrD^(d)^0f7BrGBO5(eNm~^Ro6q6(_4=_ zym+hmF)HK*Z>NujDIduun!5dWb9KP9$Mfr|qWnuqV@4=B3uJw$%bZaHdG( z2=NHdCKE4ZY8Pnxl@ID;^yEev@}E6lSN~5t+CGxGdL!1O?bME@ z@wYenpsr?MQ@%w(`oh3O&o~CF63NP`h9qs0>{QP!s#S{~) z@J##n&+iWnol6msbU`qdf9K|<^;?HAT1PIbvbnJsM9_NTx+8CJ_FDTug5cK?ERW1W zq6F=46QU_SQM^zH92fk+c9i8q{Kuj71WLJubUspa$+sJ^bX*x=hMUV6tdh>Xi2P)n zw$@4#`|6-_JeiC{ags7pD?dfiNvk9kb2a0JlGBj`aOSStg&Fomibazp1$a7Q>hp}Nx3qaeEg*)l8)cU|~IiXz|>B4;^+xXtJ-^U;p_I^ODvh9nIJFG#(P|oSD6J#Q9lq#Ch_R6Ik*~j`3oIa|$&h5D~H&s&PW|U_+&MHfexPG1YTdV&1F7PYr zzpM86PgQ$LAz-?H{b){R z)ktdONP<#SKQ;Hx!uV;N1TOh!*p$YW>ap)fQ>2+9@3ln1uwH!f(P*R35iy`(aqOYP zhj0}8IfX*)zdo8$Hrb%5Fl>qbFIz?yyFVX|U3Vyq@uUR?Z2&E>jMLucyofC5eKs&H zx^sT)0ei8>_V4e{TO@DD#_0)=IF9L(_Bu<&$Bwj0zsBY|>(>ODJLXMhsQ``}g;GSJ z7fG!eT5{)UdMQ|NHsZ`s zuL`ZE3y6QsG~fzu<;!sSYuHq(qd4lgmgBd23bEf<%OjBfUr4L9Ls;)U__i-kE~kzV`lawrx<4y}f9|aLv$m zZjua77*?ceXYMf-i}SYiofPMfO}9;X`r1Gzpvs*S9L^Ge!{PKvkEy}s*Vpsk+k4Bi zL+Y^bMD6j@PqTCmPhD3!dxBZWdwQ)}*cmP(V_GWifjv%8H@ep&r~|eQ^7Y9@QHw*l zL7FsPx@PrZO1$JFWZa@3QoanIYZM^y(qk~G?KPU4+tWJ#!)M<~>CD$Xkczv6+MvK0 zJ;Mo84N{kT?iaFH8E%fCd^*jYjX_`sC|Fg+;bD&H8>@hJ(&>H$Z1XHhPR`+5il*ZS zx3B847^nDiGq}pXxKAGn?9g0im+u|l#mc^lrG_b$8QIH?O?KA+keaK_;KM2YE8<|t zL!HphO}Of2#p;|wJ4A!4O|osVr1m21CXJ|Do3W*@ARW0E!FsA8mJ5iUk;&};(CVTN z-R9`ayLF*5M)>80V#uqmPoTFg8 zzHd~z-%UTD^%44_ zerWQ~f|Ka^$*h_;HWM2{=a&fO%Pe5xHiS~7kH_5jNlOO!_2lkJKHvicz-)%V-DV=# zPZZ2?XR5zwkO+32`w)Ay9(;+^FhSCWfS~)54P2KcM%faSKf$$FI42SxRuu((8XVGh zn!p0yKGN+$EmpV^JWmvd(U{RPDv(M&F#n*d0OUI^43OeOivwRfgufj31nqPei{Cy6 zEBx7jkpt0FhJR0HqsWK$Z=*9^a3OY5ll;!2O4ZSxx(?^0mEX7wNuQ_F(-+r}kb{@X zU&6ky@R>Y!v#dnnN&%GF8_i>>4ZpA=bj*u6Qq?(T164$J((Ff7yP?bm*|e5lJ_PMw zgNk9`-%7{4yS2#m&4Q7Jc)HkdHNLvau}C)plxt@JavqSw?DU2TwxrzTPlPbb!Y3{+ z>#7QmDpC0o!AVPwAa)b5u9jz|8!JrKSz?64b3@=9(>l<$c2iHKg>VCxmblbOIqA*N zY?@#ylJmk&OAW@lC!ub6!rNdP*h-E`r5eHsDc?pfnB6b#*{W)YEuP5h_o-nY9ircM zn(SU?L=}r~JVgvOFzf`P}3|||`rs#ba3dI`%Tjtm>D(~qV z4jPtkCrjjFYA1T0v59~?kCT{a9I((`ipKmRiAeuFW6jll54u?h*bl~c=ym?Jhp5?h#MS4PLI!!+NA zv{azC9=r}PkY*j3E9yAtBkm+LT`S5Zm7FTvX( zX@>-SYlqth`B)#k9k|G1L|fw#b|!oAC07~Yb9GMa%@IppgW4_)-AJTVML9#|w*joF zWO$cl0R#y+x;?syn z8Rf!G56J$dgMF>*(5`sNk z?|nnnjZOr)Ec^ZO-ZF@=akltYTL#|(ytktA=<8vEknAAkgbx-WZf#t-x-&(K!zA=) z++x@0W`h$YW4PueXf}dM4X=r67KAz1INIc$ERH*kv^}{w>dV3=nC`fcbL-!+3-7o~ z>x6#s^t;uEczRX$4WJl@JJL#lh4{O6sh^RFA8WAgwcUBEJJDFT{zlk)__zS`?}wo(RckigxMbc zHazdH1Fsj7?p0Sb7wX}Z4*WFRNt!UPw9T`^t04;%<9HJxzZ*&dRqM=#uAQ)D;Pf&o zIe{eqRnRpq4F7f}KqnOfdOUhR>U62RHSswjDYuP78ng5Ss zTv2kx-WU+uwiG22O1X|RowzHTE5@tq`W4nw^)!_r2vbKBz_ z5x=D^c6X2KV%&XS^2NCCcxOcvy^tcWW?(cRM`BPpmM-=6ci8O<85s;zNm7s6Dg*_W z1G-TmRZqIObEn2#854#@KBu`)q|?y*$Uu?+)r3d_=d*jMb;%U0gueddt9NMhzQ5)9 za*`VDL5gIjU6eF$Qnzti<~mN}qkFw+ZG98goL*7R`VLxzrWLxc@DYj2<~iF-d-?7m z7DHT+V!HkOcp$Y0?~w|>liS01bBP~Q@%NB&@Kc-hfVEZNvjca7U4#ei?{ za$+sIgFF;UmGwn9aJE;_=4X$Q%;ho4v){aT3u=>S4nTtkHNU>2?e@dJ89aO@ezX&h zjsiq_PRGBX)FM$iyH^f_xu%f7MvOmNae7GRSK-LdrS48r;SE9?-EgXaW*0(zC-`J> ze0C5J&PnJ;z!!O@REgB4D>RzeZn)lw_jW9VC-8bcRbuCks|19XP7XutQi@UJ4kaKL9lTvt7>whN{PUWXMe0#qJE7=9U~Ifx}KNlc7!Y5>5_ zo$Bnd-j6<9cIxa`1QfVVKlzwoLINuNlnj*9 ze0*<~2c==CBuIKuCQKsY+>~lkCOR23tx2yNZkR%RYAbws1Fg$8kpR73oZL|sLjBY; zUOGL9Qk_RfV0?n)F#}fo_RMpB%6#Y#gnjFr*$6jfkn3<2Tslju&>*$|*2;>NDIU|1 zG&E9o+E0>mZ%qP~?Pf_91W|<&(j2rK<7Kd=K~8mPzDZvEo?C?%K6@RH`Xh&OKo};; zujYAYUelvLuoE7H59tKIj)0&2{+85D3K#K$tUxXiqt@PvmW}O0peV~VRWg&2rV_ac z$i+QB05QK!2nezW*3BbAst8j8RNh2EqiEQt6%^T-yH|BZ3Lvs$N<31j5K2rL#|2|d zxNR$#>PvG}#qWhXxD|SOhYCowSQUcOWz(n-%Y+6(6tT0aG_Qvh8CRE8dZdS{vo|^8 z)U_*a-mM&7vPf#Jv7_=0W4QX{YiX)SY6;CPNK@>a2&U??^z#-2t-?~d zZYWbk5sHKn@xc2cXxfZtOeIH*(m_z8;2Ei}v5zi&NNxg+!twNBqYyU4ZEqp?-JzPW z`ut60M@yQyCExpw4ngksoyYTZanwDGk+;A~)-rVj675@6*A!-~)@sD%$unwfD#o;G z%#<~>#$9foV}7(d<7=9D%ivlk!%PQdal1i4?MGD+n&q*_9a@z`#|%kwKZ35HW_)@Q zTe=}BCOi>;7h@Hm7-Kfm*EJS`ez~GnU0qY>uwitC;BLB_y67t-Hne!N9*ZyOeyhV~ zY(JXL#GPAOC64G+>3kr*hQ-~$y6_r)#Wz}`{4b`=c z&5v7ZTAw`4k~&k|)ZWt@^Q^0HXgHjQ=lRRAq8BCI#m3_#%xps$Ha8DS!(BNcKWlhh~u6ekH|1P}J zkrREGKmRlUdaQWi#6{cAgY^K3zgwGjX*@1l`^~;H3JC5SKm|2ys)!2R+34pn?-Ik=F?Ps)Ip1R7gXfkkBbY zS2#bej2OmkgMpLr!|}W%9J*zpAI8EB{|+|VRhzGG?0h<4P$E&)QZVUe=BZIm_#9N#WFJ8 zPsw%RG|`+C+xur7+fa;+CX;j$9USM=Op@1W`!n{XAhVKLFDcVgJY$0yjhaM{J=Fcj z1gkMz*MYaEOAbF<#hT^qXi|E)sp9n7vdl^k9SSYQXg|V2N&HWADbK*^q8x-e@#!a* zPp&P$5y$eOmjY>~6M>P~m0dYt9V|VJnL#T*R4i#+F4Inn+6iBdDd1p3h$0JZ)q$X)1Xs&^nAQ{jw!83JIlX2{X#9R4(U%CSyf~_Q{_@QvA z431I74_%rOD3FeaPac`Pe?pe|X?N-dd=J+cER5N$<>Tzqa{YgouNPR1u45c7zg49J zr_gn-7pJR}tQAT}3vFnoT4ZjN73sG)GKq@Tm&X-1Z&n!V$sF?-2H3Z=sKq!vt#A%~ ztUb6?^S>dIJ~mC;SAJ}s^WFORcp+Q_2<@ghe`;MXsr=No-3)+{cD}rFemY|VsWvpJ z`CA}2dJtq^z0YJBCJ5I7uCac9p{)}%VTi5b5RvJs1+KAnKa;Zm{Nc{Yq3u#9_``Ih zZz#}XWMG&|Iy+*JP`*l58c!(|$tmv+Xj)jabR{fxy2-3O;( z@4GbiQ&pSb|EaX-r}g#wKXoWO_IFs`Ac_&|tX(T{hcfDbzJNgzd&s0LG|sq8^FF$Z zoCU-1Iu(Z;VU7G|^QIXoz8TCqM^r}QKwEcdtQdA(u|XzUzr z-F-k&+5HS}FG{fE8W>l#dyC>eapyhkW zKcr>RU>W_isGh@7QP2NNG7(tEYG`R++9*yb(=8UhGBn%)YDj(P&o6rO+%VmA67-Rk zG0>tvr(6DVnWHWU6mAZY{@tJ_TL&f$A37Dj)h6-tW|VW%$l%ilZ0Tixp+ewz=`3qD z0dh=1le<1Yat|ViPuF_kjKt1H*((mzvL~}|n;3YynjwEzN8AQ?ul4g*Tm{_u0;%&*F6<0AIw+&?Tl~Rr`wIv=8Ey zCz{F)-`2bYBJ)^zZcV0RCb$f9jhv6OaqKk17rz2nB%!wVcitSjIvZW~>&7q0Bt7># zY;^HZy>Ywgil{3uyv)a0ut^rg*pkNUjURMYNTGRqERLW*w9&TsdQ|lhN#6G>xunI_ZKnmLAF?d5AEe9!sRbmE>zGU zw1PqfV@YLx@=(eel81B&MICkAM$zYbbo@?O+)9G+iX=&}RY;_@OI^zf5dgBtSEKnEeOX8?9pD{VICQy5hq+fYB z>uWk$a47#JR?m=c!W2&xzqY=-A09J*kxt?y(L6BZuDK4fEJZ#ak2l>*0gujUT|1g8 zl}kbrA#?iFcrzlEYzp7Jy8iH0%MUq{tO?&jIg|I@%3CR$!e4J(bue{vomS!#-p0>x z)<7Q4SQhZTY402TeDBAP_aN$)PBQ(SVD_I2aKYD499jR~S0Vo%krkd+d&d7dBD+YD zFs7F!=eFZ8$3iIh+ns>ciif6BoQ}v+{x5`)_6igTF!Q|$qF!Z0u*b9)=AV8XQTSQdXx zG06r+0OeQB1UpSlTc2htVjp7Wkh`5BWMou)RIpPy>!Ntk&oL?cQ6O94HdrJ}9?X1c z@DMAZmkVp5uXduywcgvYxb{pe3gF5-zpifR(^la?C8@b zH-*iyU`@`G?|W)`E}ZyZDluv?7VyA$AX|~HLzeFFzTiH2`To4%0)eiTsXORX6Hk`X z9T3x7pxR>=L!BszI1R(tuT#M!E4Px|Vc`x;M!?^Bj1@OnVxSuY<6Vj=OLSPmVk#oZ zVxkRBj-xLMuquDwC5v#mSWG)@Eg^6x53xzR*5v}ZyI{g)yjZlHT50ZpyQ<12xRNj^ zgbU+VOaqRi6_V179u9OVWu@B|oQ%lin&0Kzwg+AH^_x1`S2Yx`D1B&JyF!c<&|ag9 z1>QV{0xZ1ci7psGx_on~{GGqiFb`P?QJhH)kS_bLmX(wsF*hrk|BG~atLEw9=2q?h zTeWuu@kZ{5HC0ERce7URn@Qx}_CIn=t=7hY-551JK3Q$pV@N1(G%UIo?^Fl}!CE+N zKDWCUKj}uA+Zt$a1#ItL;U*_@5oWce!GikXf=`15Q8&j`Ljrds>jiIE=nD6fFm&D; zaPAvZ?SVe652he4Y!jgD`%i;hDI1*m(^TnIZ&JumgT5ei^MDoEMfV-DL8VJ(`)(*M z-?d3!?{+{GYgVt;Cp@5FYLV8u$?LwAQP;>Byid_HXG93Jy(tEXka#nA8W&YD=|+5az36i&1B&S|OZ@9p_9R)STS|89Y~18#>d!@_o(h zK?m1pvAaYcCv7R!6>w{B_mKfN^|Hb!D(_Pxr-Y2*`5@~mohD#~S-lGYK9J-nJ_K?iy_}77Ev^(RIOc9#42?`OO4Yi1u_kI!04f zr@6fq^7&I}1BGp;h+EnFjc=ff+hRbhf(Fh+;Sog6v2>pYkqs0aNv4rS4@*{hQb8%@ zU55meVPZ6y(mL#ZY8}roohE0}ssglaL&#v({E(xk0`So*J=0+`I$rQd_ByHdo?^C2o&2t{>Fusb zrkF@oG;U|;(m{e`A%&fgP9K;(g$T3I)$#IZ)Ha*}L0i1-EYc>kEo`)7fCFt1Y)AW^ zPcMjGhH&Q0iuQFX>4!4%_EHZW%Wv8P;7JBTjie@bUE6~i!&%~IApCdHC)Ss$g5BSY-cZ81~XD0 zurlK??jC7HstUZzlm?kCKiyeC=q_WGJ9_zAbFmP0kgTb-`SM_@GhHahNL`u;OSAV< zl=O4dT~Q68oAOqKw;QS5_7`ABEtSe~uI8u{bqWs4Qf1odm5r3g!xelqaMg~WI(b4I z1+n7F3N7txsgQ;vQ8AV#Co>@#)28%;DhI7Ci&5_o_U#48g_B;3CZ+X-V=ddX5|ty*kCC_V6IF4b!YA(l~7 z4nNtB#ZF5=1!`-W)lqQV+H48M1-V6(B;1XvQ@MX-S+ZajB$;RPm5d-AGj9E_r7|xZrLn zrCfkX+M7T-YOiyn5-#|$ZU?h^!DLq5f!$7{ZPR9*`tL6<`8L++D(9qCb@gaNWQdPB zM3tWac?|ueg5wbfi5l7gr^1BNn%_?X6#ODH zhV`+{K9^ucMboEJpDmc-%i`A`qnrpgW|whK-n_~CPOFSNpP)>XyEI5TT34@G)$1YB zi1oK_Iu;Qb(>rgxSC!^xr?_>BKl@jH$=~?1ci&z-?qFweRWN_@-t*|J0rX$q^U@#~ zC<7GvKfLGJNz++Sz(op+w9}kl9dBPW#|fcqVrk$cJ;`y$^W=<+u{l<&adkLD?%&S1 zQiu@+C+W$GFC>$tr%SMZKjS)Cg8k(1&#IVNd`>JH)D;B1`xSZcV}T3?3l2%* zQ6Y3L^ zsjs*Xr=b56e@ZtB;i3!e*ITlA(GTok?pZU(iqr9LUa1ENI3$ z&9>Pb0!T|)OG6-VLKlaW3{Eh+&CYBs=gudDU<5^aCxlXJFo6JaOw$z1h};}<$o4ui zFU9)kS6CL)+HYdvw=cg~)G%#y%+!uyV0u%S4dP4EWK2zk(}-ZyMLrH0pa+w0`cB zLIQ(X4dG*;ig$u@TV4%2wxy}Lw1;d@VcfL@nuF?L{qO~G<{1dyEA|*cA(7Y#Gpbm1 zR%L(zc|+T$U46z>S@XSBCc0yNZ0;1=1MY_iPw%q}bt+fSFL zlfeGs0n`575Eq?(E_|mAF;);tNBYk+!a9!f&*y^KRiTb|oeS+%p}Wi!PHF@ka2fI| zhjH8(u964B##xk#o=0QKMOjG#2F)DWDf~=O(x<4tp_8yN2f6Uj!Z?&eo@>rwURdKr zcL6?z%bLhQKGoonM5M!O8e5N=Pphe!cF&Vvr;q+2HfP z!p8PbZMC#PMwD*9W=a>AhwiJy*tbamh!J7Mq@N=S-Rp1a&bG-sP$+h~P<@FE$?)W{ z`%7_pDpXl=DSNPw*QqVoE4Z74`3);wYxdf7gu-1uV+9;=Jy-iW>Xr3aP2xQoOMY(#T00W&C^H*-kZ4X z+M2Ox2mlQ+Nk#&Xrs>^;(p-y`{OJq=sgsciuR{jEiDIbnoTi`gVk$8~y@EEs@oo{u zhYP-3R+R0#2}F_630RU;uvP-zy4!BBB)9o(IgBpySU89Yp~Y`iVgBHIS>;otHV91q zt8FaJyhhW$cJK)40_rBkR(YT~v$g?3I6J-jYx`M|=C}Xj_^V&!^V9v;&Y#=AtyX^S z_<6YX`5A~zbf*)>?6T7Z7p&Upt`=yn?6Fq+DcJMwbr>r`W~#W}n%+qFBV0r#@dTj) z?m0!M3}fE#jFGQi+yO!0`%fT4=Ak2fF9OR(23`g(^E}F1dFKIw$$n-J8ANP|_DoXA z6B~vd{Ujc7FR+DrCq2^&S^=T+P=|;R3aJCq`zfL_14~Xs@TgWr;zG6b$U-Ly@~T?O zzU|iW>@20c6#=3%N?O4k>^%#>eb}cIW>TJk#pM@CrnlcMNCYy^U! z)KKy*UDWpyYHO-6JS@-Y`YCLll`9I~p_T`cAw0rFWQs!gZB@SES|E%ygs^3=e6M3X zrstV=UHDlmQ>yloZdswFsJjlK45cW!XOY^*Tp`ii(_>FdsvX7AL0v;KWVvxl{9vX! zEO6*|*4s|k=bCfweNUg}((fcfWgm>$Uot}Ted=#(<4id1JO=7*cSSAd^7A|8qQidb zT0|_H@cyXN1cHOq39;w~xqht&{Lb--q3ON6zTwj82FYbVbzoNzg~n}PQtOP%# z&E9@V18l+Kw}+lzJ^J#nlcGdI+VJ^xw!QR0-4ZEiCzvW_A;Zhep6G&yQkXTuCN9uZ z<_Zzq(uf%|j|?fRX7orU2$_pjhUW$ZLrA@)bBrz4Sl@ov_dC=CK`aI*H;0bJabI*m zucu1Sli*(ld}+)k`K5P`xeYh2%7aAMMbe0O;lO1hq#ThL7XS|!eO0EAjq(A&Ey<6T zdyt8u6uJhuOhVHcTreh%*VH!+!wc#FLwC7_(?VjVcuE9cU6B4uWhg-W(>c?=fy)n` zq(QwZc`++MnKsODQ-8nw(%qrkp4zXn%nqQ)t`XjxrdKJxO#-T@V3qxn#}OVtLu}%# zGF>6{IFqqPw+l>lvY}4@MCxZkPUq$k!m-@x?N2FcAwz&pxGvRS(yX${r|X^t23_eU z1c<%XnV6qtN#@#23(DzdUM>|G6FCVE2gqra4pkCwB2>r0jx+VRDpH@+vYXzQTnum6%=q81l>A&!+H}EUM3O#L$WUAhFOJ&iFs9k}lI}@6^El{=2-I_0dKgY2+N>X1U3H zuJG=~X(=xfo=<0@Uj2CgjOf>Q(h#dH*syF>ij0kWATRv9jxipkJVwxG2kw2~v1A=o zD+!sHPFU6!|K4q)*~9H^#ZmLKWcZ4{SK8;W<@@bFip2=AX;ve!% z`*ho~HmKpw?#+zahBg{LncWgLt9t%Uv)s60HVDnmGxOTl>B{XInf+<-2=O- iUnKKHlgE(h9EfSykJE%We_JQOqKvH&c=`TqmT;LUXa literal 0 HcmV?d00001 diff --git a/docs/skillmaps.md b/docs/skillmaps.md new file mode 100644 index 00000000..efa8d03a --- /dev/null +++ b/docs/skillmaps.md @@ -0,0 +1,19 @@ +# Skillmaps + + +## Getting started + +```codecard +[ +{ + "name": "Beginner Skillmap", + "cardType": "link", + "description": "Learn to make exciting and shareable arcade games by following a few quick tutorials!", + "imageUrl": "/static/skillmap/backgrounds/beginner.png", + "url": "http://localhost:3232--skillmap#mini", + "label": "New? Try This!", + "labelClass": "orange ribbon large", + "directOpen": true +} +] +``` diff --git a/editor/dialogs.tsx b/editor/dialogs.tsx index b5190fae..43b18b50 100644 --- a/editor/dialogs.tsx +++ b/editor/dialogs.tsx @@ -12,7 +12,7 @@ export function renderUsbPairDialog(firmwareUrl?: string, failedOnce?: boolean):

- {lf("Comic + {lf("Comic
@@ -27,7 +27,7 @@ export function renderUsbPairDialog(firmwareUrl?: string, failedOnce?: boolean):
- {lf("Comic + {lf("Comic
@@ -73,7 +73,7 @@ export function renderBrowserDownloadInstructions(): JSX.Element {
- {lf("Comic + {lf("Comic
@@ -88,7 +88,7 @@ export function renderBrowserDownloadInstructions(): JSX.Element {
- {lf("Comic + {lf("Comic
diff --git a/editor/extension.tsx b/editor/extension.tsx index 1992e32c..740890cb 100644 --- a/editor/extension.tsx +++ b/editor/extension.tsx @@ -9,7 +9,7 @@ import * as flash from "./flash"; import * as patch from "./patch"; pxt.editor.initExtensionsAsync = function (opts: pxt.editor.ExtensionOptions): Promise { - pxt.debug('loading microbit target extensions...') + pxt.debug('loading calliope mini target extensions...') const manyAny = Math as any; if (!manyAny.imul) @@ -24,35 +24,22 @@ pxt.editor.initExtensionsAsync = function (opts: pxt.editor.ExtensionOptions): P }; const res: pxt.editor.ExtensionResult = { - hexFileImporters: [{ - id: "blockly", - canImport: data => data.meta.cloudId == "microbit.co.uk" && data.meta.editor == "blockly", - importAsync: (project, data) => { - pxt.tickEvent('import.legacyblocks.redirect'); - return dialogs.cantImportAsync(project); - } - }, { - id: "td", - canImport: data => data.meta.cloudId == "microbit.co.uk" && data.meta.editor == "touchdevelop", - importAsync: (project, data) => { - pxt.tickEvent('import.legacytd.redirect'); - return dialogs.cantImportAsync(project); - } - }] + hexFileImporters: [] }; pxt.usb.setFilters([{ - vendorId: 0x1366, - productId: 0x1025 - }, - { vendorId: 0x0D28, - productId: 0x0204 + productId: 0x0204, + classCode: 0xff, + subclassCode: 0x03 // the ctrl pipe endpoint + }, { + vendorId: 0x0D28, + productId: 0x0204, + classCode: 0xff, + subclassCode: 0x00 // the custom CMSIS2 endpoint }]) res.mkPacketIOWrapper = flash.mkDAPLinkPacketIOWrapper; res.blocklyPatch = patch.patchBlocks; - res.renderBrowserDownloadInstructions = dialogs.renderBrowserDownloadInstructions; - res.renderUsbPairDialog = dialogs.renderUsbPairDialog; return Promise.resolve(res); } diff --git a/editor/flash.ts b/editor/flash.ts index bc3f4f35..2b470f06 100644 --- a/editor/flash.ts +++ b/editor/flash.ts @@ -1,9 +1,11 @@ const imul = (Math as any).imul; -const timeoutMessage = "timeout" -const membase = 0x20000000 -const loadAddr = membase -const dataAddr = 0x20002000 -const stackAddr = 0x20001000 +const timeoutMessage = "timeout"; +const membase = 0x20000000; +const loadAddr = membase; +const dataAddr = 0x20002000; +const stackAddr = 0x20001000; +const FULL_FLASH_TIMEOUT = 100000; // 100s +const PARTIAL_FLASH_TIMEOUT = 60000; // 60s const flashPageBIN = new Uint32Array([ 0xbe00be00, // bkpt - LR is set to this @@ -35,7 +37,7 @@ function log(msg: string) { let ts = ("00000" + now).slice(-5) pxt.debug(`dap ${ts}: ${msg}`) } - +const logV = /webusbdbg=1/.test(window.location.href) ? log : (msg: string) => { } function murmur3_core(data: Uint8Array) { let h0 = 0x2F9BE6CC; @@ -57,23 +59,41 @@ function murmur3_core(data: Uint8Array) { return [h0, h1] } +function bufferConcat(a: Uint8Array, b: Uint8Array) { + const r = new Uint8Array(a.length + b.length) + r.set(a, 0) + r.set(b, a.length) + return r +} + class DAPWrapper implements pxt.packetio.PacketIOWrapper { familyID: number; private dap: DapJS.DAP; private cortexM: DapJS.CortexM private cmsisdap: any; private flashing = false; + private flashAborted = false; private readSerialId = 0; private pbuf = new pxt.U.PromiseBuffer(); private pageSize = 1024; private numPages = 256; - private binName = pxtc.BINARY_HEX; + private usesCODAL = false; + private forceFullFlash = /webusbfullflash=1/.test(window.location.href); + private get useJACDAC() { + return this.usesCODAL; + } + + onSerial = (buf: Uint8Array, isStderr: boolean) => { }; + onCustomEvent = (type: string, payload: Uint8Array) => { }; constructor(public readonly io: pxt.packetio.PacketIO) { - this.familyID = 0x1366; // this is the microbit vendor id, not quite UF2 family id - this.io.onDeviceConnectionChanged = (connect) => + this.familyID = 0x0D28; // this is the microbit vendor id, not quite UF2 family id + this.io.onDeviceConnectionChanged = (connect) => { + log(`device connection changed`); this.disconnectAsync() .then(() => connect && this.reconnectAsync()); + } + this.io.onData = buf => { // console.log("RD: " + pxt.Util.toHex(buf)) this.pbuf.push(buf); @@ -82,96 +102,199 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { this.allocDAP(); } - icon = "usb"; + icon = "xicon microbit"; + + private pendingSerial: Uint8Array + private lastPendingSerial: number + + private processSerialLine(line: Uint8Array) { + if (this.onSerial) { + try { + // catch encoding bugs + this.onSerial(line, false) + } + catch (err) { + log(`serial decoding error: ${err.message}`); + pxt.tickEvent("hid.flash.serial.decode.error"); + console.error({ err, line }) + } + } + } + + private async readSerial(): Promise { + let buf = await this.dapCmdNums(0x83) + const len = buf[1] + // concat received data with previous data + if (len) { + buf = buf.slice(2, 2 + len) + if (this.pendingSerial) buf = bufferConcat(this.pendingSerial, buf) + let ptr = 0 + let beg = 0 + while (ptr < buf.length) { + if (buf[ptr] == 10 || buf[ptr] == 13) { + ptr++; + // eat \r\n + while (ptr < buf.length && (buf[ptr] == 10 || buf[ptr] == 13)) + ptr++; + const line = buf.slice(beg, ptr) + if (line.length) + this.processSerialLine(line); + beg = ptr + } + else + ptr++ + } + buf = buf.slice(beg) + this.pendingSerial = buf.length ? buf : null + if (this.pendingSerial) { + this.lastPendingSerial = Date.now() + //logV(`pending serial ${this.pendingSerial.length}`) + } + } else if (this.pendingSerial) { + const d = Date.now() - this.lastPendingSerial + if (d > 500) { + this.processSerialLine(this.pendingSerial) + this.pendingSerial = null + } + } + return len + } private startReadSerial() { - log(`start read serial`) const rid = this.readSerialId; - const readSerial = () => { - if (rid != this.readSerialId) { - log(`stopped read serial ${rid}`) - return; - } - if (this.flashing) { - setTimeout(readSerial, 500); - return; - } - // done - this.cmsisdap.cmdNums(0x83, []) - .then((r: number[]) => { - const len = r[1] - let str = "" - for (let i = 2; i < len + 2; ++i) { - str += String.fromCharCode(r[i]) + const startTime = Date.now(); + log(`start read serial ${rid}`) + const readSerialLoop = async () => { + try { + while (rid === this.readSerialId) { + const len = await this.readSerial() + const hasData = len > 0 + //if (hasData) + // logV(`serial read ${len} bytes`) + await this.jacdacProcess(hasData) + } + log(`stopped serial reader ${rid}`) + } catch (err) { + log(`serial error ${rid}: ${err.message}`); + console.error(err) + if (rid != this.readSerialId) { + log(`stopped serial reader ${rid}`) + } else { + pxt.tickEvent("hid.flash.serial.error"); + const timeRunning = Date.now() - startTime + await this.disconnectAsync(); // force disconnect + // if we've been running for a while, try reconnecting + if (timeRunning > 1000) { + log(`auto-reconnect`) + await this.reconnectAsync(); } - if (str.length > 0) { - pxt.U.nextTick(readSerial) - if (this.onSerial) { - const utf8Str = pxt.U.toUTF8(str); - this.onSerial(pxt.U.stringToUint8Array(utf8Str), false) - } - } else - setTimeout(readSerial, 50) - }, (err: any) => { - log(`read error: ` + err.message); - this.disconnectAsync(); // force disconnect - }); + } + } } - readSerial(); + + readSerialLoop(); } private stopSerialAsync() { - log(`stopping serial reader`) + log(`cancelling serial reader ${this.readSerialId}`) this.readSerialId++; - return Promise.delay(200); + return pxt.Util.delay(200); } - onSerial: (buf: Uint8Array, isStderr: boolean) => void; - private allocDAP() { log(`alloc dap`); + const h = this.io; this.dap = new DapJS.DAP({ - write: writeAsync, + write: data => h.sendPacketAsync(new Uint8Array(data)), close: this.disconnectAsync, - read: readAsync, + read: () => this.recvPacketAsync(), //sendMany: sendMany }); this.cmsisdap = (this.dap as any).dap; this.cortexM = new DapJS.CortexM(this.dap); + } - const h = this.io; - const pbuf = this.pbuf; - function writeAsync(data: ArrayBuffer) { - //console.log("WR: " + pxt.Util.toHex(new Uint8Array(data))); - return h.sendPacketAsync(new Uint8Array(data)); + get binName() { + return (this.usesCODAL ? "mbcodal-" : "mbdal-") + pxtc.BINARY_HEX; + } + + unsupportedParts() { + if (!this.usesCODAL) { + return ["logotouch", "builtinspeaker", "microphone", "flashlog"] + } + return []; + } + + async reconnectAsync(): Promise { + log(`reconnect`) + this.flashAborted = false; + + function stringResponse(buf: Uint8Array) { + return pxt.U.uint8ArrayToString(buf.slice(2, 2 + buf[1])) } - function readAsync() { - return pbuf.shiftAsync(); + await this.stopSerialAsync() + + this.allocDAP(); // clean dap apis + + await this.io.reconnectAsync() + + // before calling into dapjs, we use our dapCmdNums() a few times, which which will make sure the responses + // to commends from previous sessions (if any) are flushed + const info = await this.dapCmdNums(0x00, 0x04) // info + const daplinkVersion = stringResponse(info) + log(`daplink version: ${daplinkVersion}`) + + const r = await this.dapCmdNums(0x80) + this.usesCODAL = r[2] == 57 && r[3] == 57 && r[5] >= 51; + const binVersion = stringResponse(r); + log(`bin name: ${this.binName} v:${binVersion}`); + + pxt.tickEvent("hid.flash.connect", { codal: this.usesCODAL ? 1 : 0, daplink: daplinkVersion, bin: binVersion }); + + const baud = new Uint8Array(5) + baud[0] = 0x82 // set baud + pxt.HF2.write32(baud, 1, 115200) + await this.dapCmd(baud) + // setting the baud rate on serial may reset NRF (depending on daplink version), so delay after + await pxt.Util.delay(200); + + // only init after setting baud rate, in case we got reset + await this.cortexM.init() + + const res = await this.readWords(0x10000010, 2); + this.pageSize = res[0] + this.numPages = res[1] + log(`page size ${this.pageSize}, num pages ${this.numPages}`); + + await this.checkStateAsync(true); + await this.jacdacSetup(); + + this.startReadSerial(); + } + + private async checkStateAsync(resume?: boolean): Promise { + const states = ["reset", "lockup", "sleeping", "halted", "running"] + try { + const state = await this.cortexM.getState(); + log(`cortex state: ${states[state]}`) + if (resume && state == DapJS.CoreState.TARGET_HALTED) + await this.cortexM.resume(); + } catch (e) { + log(`cortex state failed`) + pxt.tickEvent("hid.checkstate.error") + console.debug(e) } } - reconnectAsync(): Promise { - log(`reconnect`) - // configure serial at 115200 - return this.stopSerialAsync() - .then(() => this.io.reconnectAsync()) - .then(() => this.cortexM.init()) - .then(() => this.cmsisdap.cmdNums(0x80, [])) - .then(r => { - this.binName = (r[2] == 57 && r[3] == 57 && r[5] >= 51 ? "mbcodal-" : "") + pxtc.BINARY_HEX - }) - .then(() => this.cortexM.memory.readBlock(0x10000010, 2, this.pageSize)) - .then(res => { - this.pageSize = pxt.HF2.read32(res, 0) - this.numPages = pxt.HF2.read32(res, 4) - }) - .then(() => this.cmsisdap.cmdNums(0x82, [0x00, 0xC2, 0x01, 0x00])) - .then(() => this.startReadSerial()); + private checkAborted() { + if (this.flashAborted) + throw new Error(lf("Download cancelled")); } disconnectAsync() { log(`disconnect`) + this.flashAborted = true; return this.stopSerialAsync() .then(() => this.io.disconnectAsync()); } @@ -180,72 +303,195 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { log("reflash") startTime = 0 pxt.tickEvent("hid.flash.start"); + this.flashAborted = false; this.flashing = true; return (this.io.isConnected() ? Promise.resolve() : this.io.reconnectAsync()) + .then(() => this.stopSerialAsync()) .then(() => this.cortexM.init()) .then(() => this.cortexM.reset(true)) - .then(() => this.cortexM.memory.readBlock(0x10001014, 1, this.pageSize)) - .then(v => { - if ((pxt.HF2.read32(v, 0) & 0xff) != 0) { + .then(() => this.checkStateAsync()) + .then(() => this.readUICR()) + .then(uicr => { + pxt.tickEvent("hid.flash.uicr", { uicr }); + // shortcut, do a full flash + if (uicr != 0 || this.forceFullFlash) { pxt.tickEvent("hid.flash.uicrfail"); return this.fullVendorCommandFlashAsync(resp); } - return this.quickHidFlashAsync(resp); + // check flash checksums + return this.computeFlashChecksum(resp) + .then(chk => { + pxt.tickEvent("hid.flash.checksum", { quick: chk.quick ? 1 : 0, changed: chk.changed ? chk.changed.length : 0 }); + // let's do a quick flash! + if (chk.quick) + return this.quickHidFlashAsync(chk.changed); + else + return this.fullVendorCommandFlashAsync(resp); + }); }) + .then(() => this.checkStateAsync(true)) + .then(() => pxt.tickEvent("hid.flash.success")) .finally(() => { this.flashing = false }) - .then(() => Promise.delay(100)) - .then(() => this.disconnectAsync()) + // don't disconnect here + // the micro:bit will automatically disconnect and reconnect + // via the webusb events + } + + private recvPacketAsync() { + if (this.io.recvPacketAsync) + return this.io.recvPacketAsync() + else + return this.pbuf.shiftAsync() + } + + private dapCmd(buf: Uint8Array) { + return this.io.sendPacketAsync(buf) + .then(() => this.recvPacketAsync()) + .then(resp => { + if (resp[0] != buf[0]) { + pxt.tickEvent('hid.flash.cmderror', { req: buf[0], resp: resp[0] }) + const msg = `bad dapCmd response: ${buf[0]} -> ${resp[0]}` + + // in case we got an invalid response, try to get another response, in case the current + // response is a left-over from previous communications + log(msg + "; retrying") + return this.recvPacketAsync() + .then(resp => { + if (resp[0] == buf[0]) + return resp + throw new Error(msg) + }, err => { + throw new Error(msg) + }) + } + return resp + }) + } + + private dapCmdNums(...nums: number[]) { + return this.dapCmd(new Uint8Array(nums)) } private fullVendorCommandFlashAsync(resp: pxtc.CompileResult): Promise { log("full flash") + pxt.tickEvent("hid.flash.full.start"); const chunkSize = 62; - let aborted = false; - return Promise.resolve() + let sentPages = 0; + return pxt.Util.promiseTimeout( + FULL_FLASH_TIMEOUT, + Promise.resolve() + .then(() => this.dapCmdNums(0x8A /* DAPLinkFlash.OPEN */, 1)) + .then((res) => { + log(`daplinkflash open: ${pxt.U.toHex(res)}`) + if (res[1] !== 0) { + pxt.tickEvent('hid.flash.full.error.open', { res: res[1] }) + throw new Error(lf("Download failed, please try again")); + } + const binFile = resp.outfiles[this.binName]; + log(`bin file ${this.binName} in ${Object.keys(resp.outfiles).join(', ')}, ${binFile?.length || -1}b`) + const hexUint8 = pxt.U.stringToUint8Array(binFile); + log(`hex ${hexUint8?.byteLength || -1}b, ~${(hexUint8.byteLength / chunkSize) | 0} chunks of ${chunkSize}b`) + + const sendPages = (offset: number = 0): Promise => { + const end = Math.min(hexUint8.length, offset + chunkSize); + const nextPageData = hexUint8.slice(offset, end); + const cmdData = new Uint8Array(2 + nextPageData.length) + cmdData[0] = 0x8C /* DAPLinkFlash.WRITE */ + cmdData[1] = nextPageData.length + cmdData.set(nextPageData, 2) + if (sentPages % 128 == 0) // reduce logging + log(`next page ${sentPages}: [${offset.toString(16)}, ${end.toString(16)}] (${Math.ceil((hexUint8.length - end) / 1000)}kb left)`) + return this.dapCmd(cmdData) + .then(() => { + this.checkAborted() + if (end < hexUint8.length) { + sentPages++; + return sendPages(end); + } + return Promise.resolve() + }); + } + + return sendPages(); + }) + .then(() => { + log(`close`) + return this.dapCmdNums(0x8B /* DAPLinkFlash.CLOSE */); + }) + .then(res => { + log(`daplinkclose: ${pxt.U.toHex(res)}`) + return this.dapCmdNums(0x89 /* DAPLinkFlash.RESET */); + }) + .then((res) => { + log(`daplinkreset: ${pxt.U.toHex(res)}`) + log(`full flash done`); + pxt.tickEvent("hid.flash.full.success"); + }), + timeoutMessage + ).catch((e) => { + log(`error: abort`) + pxt.tickEvent("hid.flash.full.error"); + this.flashAborted = true; + return this.resetAndThrowAsync(e); + }); + } + + private resetAndThrowAsync(e: any) { + log(`reset on error`) + pxt.tickEvent("hid.flash.reset"); + console.debug(e) + // reset any pending daplink + return this.dapCmdNums(0x89 /* DAPLinkFlash.RESET */) + .catch((e2: any) => { + // Best effort reset, no-op if there's an error + }) + .then(() => this.cortexM.reset(false)) + .catch((e2: any) => { + // Best effort reset, no-op if there's an error + }) .then(() => { - return this.cmsisdap.cmdNums(0x8A /* DAPLinkFlash.OPEN */, [1]); - }) - .then((res) => { - const hexUint8 = pxt.U.stringToUint8Array(resp.outfiles[this.binName]); - const hexArray: number[] = Array.prototype.slice.call(hexUint8); - - const sendPages = (offset: number = 0): Promise => { - const end = Math.min(hexArray.length, offset + chunkSize); - const nextPage = hexArray.slice(offset, end); - nextPage.unshift(nextPage.length); - return this.cmsisdap.cmdNums(0x8C /* DAPLinkFlash.WRITE */, nextPage) - .then(() => { - if (!aborted && end < hexArray.length) { - return sendPages(end); - } - return Promise.resolve(); - }); - } - - return sendPages(); - }) - .then((res) => { - return this.cmsisdap.cmdNums(0x8B /* DAPLinkFlash.CLOSE */, []); - }) - .timeout(60000, timeoutMessage) - .catch((e) => { - aborted = true; - return this.cmsisdap.cmdNums(0x89 /* DAPLinkFlash.RESET */, []) - .catch((e2: any) => { - // Best effort reset, no-op if there's an error - }) - .then(() => { - return Promise.reject(e); - }); + throw e; }); } - private quickHidFlashAsync(resp: pxtc.CompileResult): Promise { + private readUICR() { + return this.readWords(0x10001014, 1) + .then(v => { + const uicr = v[0] & 0xff; + log(`uicr: ${uicr.toString(16)} (${v[0].toString(16)})`); + return uicr; + }); + } + + private computeFlashChecksum(resp: pxtc.CompileResult) { + const binFile = resp.outfiles[this.binName]; + if (!binFile) + throw new Error(`unable to find ${this.binName} in outfiles ${Object.keys(resp.outfiles).join(', ')}`); + + return this.getFlashChecksumsAsync() + .then(checksums => { + log(`checksums ${pxt.Util.toHex(checksums)}`); + // TODO this is seriously inefficient (130ms on a fast machine) + const uf2 = ts.pxtc.UF2.newBlockFile(); + ts.pxtc.UF2.writeHex(uf2, binFile.split(/\r?\n/)); + const bytes = pxt.U.stringToUint8Array(ts.pxtc.UF2.serializeFile(uf2)); + const parsed = ts.pxtc.UF2.parseFile(bytes); + + const aligned = DAPWrapper.pageAlignBlocks(parsed, this.pageSize); + const changed = DAPWrapper.onlyChanged(aligned, checksums, this.pageSize); + const quick = changed.length < aligned.length / 2; + log(`pages: ${aligned.length}, changed ${changed.length}, ${quick ? "quick" : "full"}`); + return { + quick, + changed + } + }); + } + + private quickHidFlashAsync(changed: ts.pxtc.UF2.Block[]): Promise { log("quick flash") - let logV = (msg: string) => { } - //let logV = log - let aborted = false; + pxt.tickEvent("hid.flash.quick.start"); const runFlash = (b: ts.pxtc.UF2.Block, dataAddr: number) => { const cmd = this.cortexM.prepareCommand(); @@ -266,45 +512,39 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { return cmd.go() }) .then(() => { - logV("dbg en") // starts the program + logV(`cortex.debug.enable`) return this.cortexM.debug.enable() }) } - let checksums: Uint8Array - return this.getFlashChecksumsAsync() - .then(buf => { - checksums = buf; - log("write code"); - return this.cortexM.memory.writeBlock(loadAddr, flashPageBIN); - }) - .then(() => { - log("convert"); - // TODO this is seriously inefficient (130ms on a fast machine) - let uf2 = ts.pxtc.UF2.newBlockFile(); - ts.pxtc.UF2.writeHex(uf2, resp.outfiles[this.binName].split(/\r?\n/)); - let bytes = pxt.U.stringToUint8Array(ts.pxtc.UF2.serializeFile(uf2)); - let parsed = ts.pxtc.UF2.parseFile(bytes); - - let aligned = DAPWrapper.pageAlignBlocks(parsed, this.pageSize); - log(`initial: ${aligned.length} pages`); - aligned = DAPWrapper.onlyChanged(aligned, checksums, this.pageSize); - log(`incremental: ${aligned.length} pages`); - - return Promise.mapSeries(pxt.U.range(aligned.length), + return pxt.Util.promiseTimeout( + PARTIAL_FLASH_TIMEOUT, + Promise.resolve() + .then(() => this.cortexM.memory.writeBlock(loadAddr, flashPageBIN)) + .then(() => pxt.Util.promiseMapAllSeries(pxt.U.range(changed.length), i => { - if (aborted) return Promise.resolve(); - let b = aligned[i]; - if (b.targetAddr >= 0x10000000) + this.checkAborted(); + let b = changed[i]; + if (b.targetAddr >= 0x10000000) { + log(`target address 0x${b.targetAddr.toString(16)} > 0x10000000`) return Promise.resolve(); + } - logV("about to write at 0x" + b.targetAddr.toString(16)); - - let writeBl = Promise.resolve(); + log(`about to write at 0x${b.targetAddr.toString(16)}`); let thisAddr = (i & 1) ? dataAddr : dataAddr + this.pageSize; let nextAddr = (i & 1) ? dataAddr + this.pageSize : dataAddr; + let writeBl; + + if (i == 0) { + let u32data = new Uint32Array(b.data.length / 4); + for (let i = 0; i < b.data.length; i += 4) + u32data[i >> 2] = pxt.HF2.read32(b.data, i); + writeBl = this.cortexM.memory.writeBlock(thisAddr, u32data); + } + + if (i == 0) { let u32data = new Uint32Array(b.data.length / 4); @@ -316,7 +556,7 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { return writeBl .then(() => runFlash(b, thisAddr)) .then(() => { - let next = aligned[i + 1]; + let next = changed[i + 1]; if (!next) return Promise.resolve(); logV("write next"); @@ -330,18 +570,21 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { .then(() => { logV("done block"); }); - }) - .then(() => { - log("flash done"); - pxt.tickEvent("hid.flash.done"); - return this.cortexM.reset(false); - }); - }) - .timeout(25000, timeoutMessage) - .catch((e) => { - aborted = true; - return Promise.reject(e); - }); + })) + .then(() => { + log("quick flash done"); + return this.cortexM.reset(false); + }) + .then(() => { + pxt.tickEvent("hid.flash.quick.success"); + return this.checkStateAsync(true) + }), + timeoutMessage + ).catch((e) => { + pxt.tickEvent("hid.flash.quick.error"); + this.flashAborted = true; + return this.resetAndThrowAsync(e); + }); } private getFlashChecksumsAsync() { @@ -352,6 +595,21 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { .then(() => this.cortexM.memory.readBlock(dataAddr, pages * 2, this.pageSize)) } + private readWords(addr: number, numWords: number) { + return this.cortexM.memory.readBlock(addr, numWords, this.pageSize) + // assume browser is little-endian + .then(u8 => new Uint32Array(u8.buffer)) + } + + private writeWords(addr: number, buf: Uint32Array) { + return this.cortexM.memory.writeBlock(addr, buf) + } + + private readBytes(addr: number, numBytes: number) { + return this.cortexM.memory.readBlock(addr, (numBytes + 3) >> 2, this.pageSize) + .then(u8 => u8.length == numBytes ? u8 : u8.slice(0, numBytes)) + } + static onlyChanged(blocks: ts.pxtc.UF2.Block[], checksums: Uint8Array, pageSize: number) { return blocks.filter(b => { let idx = b.targetAddr / pageSize @@ -392,6 +650,184 @@ class DAPWrapper implements pxt.packetio.PacketIOWrapper { } return res } + + // + // jacdac stuff starts here + // + + private irqn: number + private xchgAddr: number = null + private lastXchg: number + private currSend: SendItem + private sendQ: SendItem[] = [] + private lastSend: number + + sendCustomEventAsync(type: string, buf: Uint8Array): Promise { + if (type == "jacdac") { + if (this.xchgAddr == null) + return Promise.resolve() + if (buf.length & 3) { + const tmp = new Uint8Array((buf.length + 3) & ~3) + tmp.set(buf) + buf = tmp + } + return new Promise(resolve => { + this.sendQ.push({ + buf, + cb: resolve + }) + }) + } + return Promise.reject(new Error("invalid custom event type")) + } + + private writeWord(addr: number, val: number) { + return this.cortexM.memory.write32(addr, val) + } + + private async findJacdacXchgAddr() { + const memStart = 0x2000_0000 + const memStop = memStart + 128 * 1024 + const checkSize = 1024 + + let p0 = 0x20006000 + let p1 = 0x20006000 + checkSize + + const check = async (addr: number) => { + if (addr < memStart) + return null + if (addr + checkSize > memStop) + return null + const buf = await this.readWords(addr, checkSize >> 2) + for (let i = 0; i < buf.length; ++i) { + if (buf[i] == 0x786D444A && buf[i + 1] == 0xB0A6C0E9) + return addr + (i << 2) + } + return 0 + } + + while (true) { + const a0 = await check(p0) + if (a0) return a0 + const a1 = await check(p1) + if (a1) return a1 + if (a0 === null && a1 === null) + return null + p0 -= checkSize + p1 += checkSize + } + } + + private async jacdacSetup() { + this.xchgAddr = null + if (!this.useJACDAC) { + log(`jacdac: disabled`) + return + } + await pxt.Util.delay(700); // wait for the program to start and setup memory correctly + const xchg = await this.findJacdacXchgAddr() + if (xchg == null) { + log("jacdac: xchg address not found") + pxt.tickEvent("hid.flash.jacdac.error.missingxchg"); + return + } + const info = await this.readBytes(xchg, 16) + this.irqn = info[8] + if (info[12 + 2] != 0xff) { + log("jacdac: invalid memory; try power-cycling the micro:bit") + pxt.tickEvent("hid.flash.jacdac.error.invalidmemory"); + console.debug({ info, xchg }) + return + } + this.xchgAddr = xchg + // clear initial lock + await this.writeWord(xchg + 12, 0) + log(`jacdac: exchange address 0x${xchg.toString(16)}; irqn=${this.irqn}`) + pxt.tickEvent("hid.flash.jacdac.connected"); + } + + private async triggerIRQ(irqn: number) { + const addr = 0xE000E200 + (irqn >> 5) * 4 + await this.writeWord(addr, 1 << (irqn & 31)) + } + + private async jacdacProcess(hadSerial: boolean) { + if (this.xchgAddr == null) { + if (!hadSerial) + await this.dapDelay(5000) + return + } + + const now = Date.now() + if (this.lastXchg && now - this.lastXchg > 50) { + logV("slow xchg: " + (now - this.lastXchg) + "ms") + } + this.lastXchg = now + + let numev = 0 + // TODO only read say 32 bytes first, and more if needed + let inp = await this.readBytes(this.xchgAddr + 12, 256) + if (inp[2]) { + await this.writeWord(this.xchgAddr + 12, 0) + await this.triggerIRQ(this.irqn) + inp = inp.slice(0, inp[2] + 12) + this.onCustomEvent("jacdac", inp) + numev++ + } + + let sendFree = false + if (this.currSend) { + const send = await this.readBytes(this.xchgAddr + 12 + 256, 4) + if (!send[2]) { + this.currSend.cb() + this.currSend = null + sendFree = true + numev++ + } + } + + if (!this.currSend && this.sendQ.length) { + if (!sendFree) { + const send = await this.readBytes(this.xchgAddr + 12 + 256, 4) + if (!send[2]) + sendFree = true + } + if (sendFree) { + this.currSend = this.sendQ.shift() + const bbody = this.currSend.buf.slice(4) + await this.writeWords(this.xchgAddr + 12 + 256 + 4, new Uint32Array(bbody.buffer)) + const bhead = this.currSend.buf.slice(0, 4) + await this.writeWords(this.xchgAddr + 12 + 256, new Uint32Array(bhead.buffer)) + await this.triggerIRQ(this.irqn) + this.lastSend = Date.now() + numev++ + } else { + if (this.lastSend) { + const d = Date.now() - this.lastSend + if (d > 50) { + this.lastSend = 0 + console.error("failed to send packet fast enough") + } + } + } + } + + if (numev == 0 && !hadSerial) + await this.dapDelay(5000) + } + + private dapDelay(micros: number) { + if (micros > 0xffff) + throw new Error("too large delay") + const cmd = new Uint8Array([0x09, 0, 0]) + pxt.HF2.write16(cmd, 1, micros) + return this.dapCmd(cmd) + } +} + +interface SendItem { + buf: Uint8Array + cb: () => void } export function mkDAPLinkPacketIOWrapper(io: pxt.packetio.PacketIO): pxt.packetio.PacketIOWrapper { diff --git a/editor/tsconfig.json b/editor/tsconfig.json index 47c94f4a..e7a1f77a 100644 --- a/editor/tsconfig.json +++ b/editor/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2017", "noImplicitAny": true, "noImplicitReturns": true, "noImplicitThis": true, @@ -12,6 +12,13 @@ "rootDir": ".", "newLine": "LF", "sourceMap": false, - "jsx": "react" + "jsx": "react", + "lib": [ + "dom", + "dom.iterable", + "scripthost", + "es2017", + "ES2018.Promise" + ] } } diff --git a/faviconDescription.json b/faviconDescription.json index a3fa76c9..d4eb3879 100644 --- a/faviconDescription.json +++ b/faviconDescription.json @@ -1,6 +1,6 @@ { "masterPicture": "docs/static/microbit.simplified.svg", - "iconsPath": "/static/icons", + "iconsPath": "/docs/static/icons", "design": { "ios": { "pictureAspect": "backgroundAndMargin", diff --git a/fieldeditors/tsconfig.json b/fieldeditors/tsconfig.json index 9f5342cb..10ae6cd0 100644 --- a/fieldeditors/tsconfig.json +++ b/fieldeditors/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2017", "noImplicitAny": false, "noImplicitReturns": true, "module": "commonjs", diff --git a/libs/blocksprj/pxt.json b/libs/blocksprj/pxt.json index c15ee157..4e9dbf9f 100644 --- a/libs/blocksprj/pxt.json +++ b/libs/blocksprj/pxt.json @@ -1,8 +1,7 @@ { "name": "{0} block", "dependencies": { - "core": "file:../core", - "radio": "file:../radio" + "core": "file:../core" }, "description": "", "files": [ diff --git a/libs/bluetooth/BLEHF2Service.cpp b/libs/bluetooth/BLEHF2Service.cpp index baa1a0ef..bdf25e6a 100644 --- a/libs/bluetooth/BLEHF2Service.cpp +++ b/libs/bluetooth/BLEHF2Service.cpp @@ -1,8 +1,58 @@ #include "MicroBitConfig.h" -#include "ble/UUID.h" #include "BLEHF2Service.h" #include "MicroBitEvent.h" +//================================================================ +#if MICROBIT_CODAL +//================================================================ + +const uint8_t BLEHF2Service::service_base_uuid[ 16] = +{ 0xb1,0x12,0x00,0x00,0x26,0x79,0x30,0xda,0xa2,0x6e,0x02,0x73,0xb6,0x04,0x38,0x49 }; + +const uint8_t BLEHF2Service::char_base_uuid[ 16] = +{ 0xb1,0x12,0x00,0x00,0x26,0x79,0x30,0xda,0xa2,0x6e,0x02,0x73,0xb6,0x04,0x38,0x4a }; + +const uint16_t BLEHF2Service::serviceUUID = 0xf5e6; +const uint16_t BLEHF2Service::charUUID[ mbbs_cIdxCOUNT] = { 0xf5e6 }; + + +BLEHF2Service::BLEHF2Service(BLEDevice &_ble) : + ble(_ble) +{ + // Initialise our characteristic values. + memset(&txCharacteristicMessage, 0, sizeof(txCharacteristicMessage)); + + // Register the base UUID and create the service. + RegisterBaseUUID( service_base_uuid); + CreateService( serviceUUID); + + RegisterBaseUUID( char_base_uuid); + CreateCharacteristic( mbbs_cIdxMESSAGE, charUUID[ mbbs_cIdxMESSAGE], + (uint8_t *)&txCharacteristicMessage, + sizeof(txCharacteristicMessage), sizeof(txCharacteristicMessage), + microbit_propNOTIFY); +} + +void BLEHF2Service::sendSerial(const char *data, int len, bool isError) { + if (getConnected()) + { + int32_t sent = 0; + while(sent < len) { + int32_t n = min(BLEHF2_DATA_LENGTH, len - sent); + txCharacteristicMessage.command = (isError ? BLEHF2_FLAG_SERIAL_OUT : BLEHF2_FLAG_SERIAL_ERR) | n; + memcpy(&txCharacteristicMessage.data, data + sent, n); + notifyChrValue(mbbs_cIdxMESSAGE,(uint8_t *)&txCharacteristicMessage, sizeof(txCharacteristicMessage)); + sent += n; + } + } +} + +//================================================================ +#else // MICROBIT_CODAL +//================================================================ + +#include "ble/UUID.h" + BLEHF2Service::BLEHF2Service(BLEDevice &_ble) : ble(_ble) { @@ -47,4 +97,8 @@ const uint8_t BLEHF2ServiceUUID[] = { const uint8_t BLEHF2TxCharacteristicUUID[] = { 0xb1,0x12,0xf5,0xe6,0x26,0x79,0x30,0xda,0xa2,0x6e,0x02,0x73,0xb6,0x04,0x38,0x4a -}; \ No newline at end of file +}; + +//================================================================ +#endif // MICROBIT_CODAL +//================================================================ diff --git a/libs/bluetooth/BLEHF2Service.h b/libs/bluetooth/BLEHF2Service.h index 20c67788..b4d34458 100644 --- a/libs/bluetooth/BLEHF2Service.h +++ b/libs/bluetooth/BLEHF2Service.h @@ -2,7 +2,6 @@ #define BLE_HF2_SERVICE_H #include "MicroBitConfig.h" -#include "ble/BLE.h" #include "MicroBitThermometer.h" #include "EventModel.h" #include "pxt.h" @@ -22,6 +21,65 @@ struct BLEHF2Packet { uint8_t data[BLEHF2_DATA_LENGTH]; }; +//================================================================ +#if MICROBIT_CODAL +//================================================================ + +#include "MicroBitBLEManager.h" +#include "MicroBitBLEService.h" + +class BLEHF2Service : public MicroBitBLEService +{ + public: + + /** + * Constructor. + * Create a representation of the TemperatureService + * @param _ble The instance of a BLE device that we're running on. + */ + BLEHF2Service(BLEDevice &_ble); + + /** + * Sends text + */ + void sendSerial(const char *data, int len, bool isError); + + private: + + // Bluetooth stack we're running on. + BLEDevice &ble; + + // memory for buffers. + BLEHF2Packet txCharacteristicMessage; + + // Index for each charactersitic in arrays of handles and UUIDs + typedef enum mbbs_cIdx + { + mbbs_cIdxMESSAGE, + mbbs_cIdxCOUNT + } mbbs_cIdx; + + // UUIDs for our service and characteristics + static const uint8_t service_base_uuid[ 16]; + static const uint8_t char_base_uuid[ 16]; + static const uint16_t serviceUUID; + static const uint16_t charUUID[ mbbs_cIdxCOUNT]; + + // Data for each characteristic when they are held by Soft Device. + MicroBitBLEChar chars[ mbbs_cIdxCOUNT]; + + public: + + int characteristicCount() { return mbbs_cIdxCOUNT; }; + MicroBitBLEChar *characteristicPtr( int idx) { return &chars[ idx]; }; +}; + +//================================================================ +#else // MICROBIT_CODAL +//================================================================ + +#include "ble/BLE.h" + class BLEHF2Service { public: @@ -50,5 +108,8 @@ class BLEHF2Service GattAttribute::Handle_t txCharacteristicHandle; }; +//================================================================ +#endif // MICROBIT_CODAL +//================================================================ -#endif \ No newline at end of file +#endif diff --git a/libs/bluetooth/bluetooth.cpp b/libs/bluetooth/bluetooth.cpp index cb3efc5a..155bfcc3 100644 --- a/libs/bluetooth/bluetooth.cpp +++ b/libs/bluetooth/bluetooth.cpp @@ -14,7 +14,7 @@ namespace bluetooth { BLEHF2Service* pHF2 = NULL; //% - void __log(String msg) { + void __log(int priority, String msg) { if (NULL == pHF2) pHF2 = new BLEHF2Service(*uBit.ble); pHF2->sendSerial(msg->getUTF8Data(), msg->getUTF8Size(), false); @@ -125,19 +125,18 @@ namespace bluetooth { startUartService(); int bytes = uart->rxBufferedSize(); auto buffer = mkBuffer(NULL, bytes); + auto res = buffer; + registerGCObj(buffer); int read = uart->read(buffer->data, buffer->length); // read failed if (read < 0) { - decrRC(buffer); - return mkBuffer(NULL, 0); + res = mkBuffer(NULL, 0); + } else if (read != buffer->length) { + // could not fill the buffer + res = mkBuffer(buffer->data, read); } - // could not fill the buffer - if (read != buffer->length) { - auto tmp = mkBuffer(buffer->data, read); - decrRC(buffer); - buffer = tmp; - } - return buffer; + unregisterGCObj(buffer); + return res; } /** @@ -184,6 +183,7 @@ namespace bluetooth { //% blockId=eddystone_advertise_url block="bluetooth advertise url %url|with power %power|connectable %connectable" //% parts=bluetooth weight=11 blockGap=8 //% help=bluetooth/advertise-url blockExternalInputs=1 + //% hidden=1 deprecated=1 void advertiseUrl(String url, int power, bool connectable) { #if CONFIG_ENABLED(MICROBIT_BLE_EDDYSTONE_URL) power = min(MICROBIT_BLE_POWER_LEVELS-1, max(0, power)); @@ -199,7 +199,7 @@ namespace bluetooth { * @param power power level between 0 and 7, eg: 7 * @param connectable true to keep bluetooth connectable for other services, false otherwise. */ - //% parts=bluetooth weight=12 advanced=true + //% parts=bluetooth weight=12 advanced=true deprecated=1 void advertiseUidBuffer(Buffer nsAndInstance, int power, bool connectable) { #if CONFIG_ENABLED(MICROBIT_BLE_EDDYSTONE_UID) auto buf = nsAndInstance; @@ -227,6 +227,7 @@ namespace bluetooth { //% blockId=eddystone_stop_advertising block="bluetooth stop advertising" //% parts=bluetooth weight=10 //% help=bluetooth/stop-advertising advanced=true + //% hidden=1 deprecated=1 void stopAdvertising() { uBit.bleManager.stopAdvertising(); } diff --git a/libs/bluetooth/bluetooth.ts b/libs/bluetooth/bluetooth.ts index 49b76dff..482dc136 100644 --- a/libs/bluetooth/bluetooth.ts +++ b/libs/bluetooth/bluetooth.ts @@ -10,10 +10,10 @@ namespace bluetooth { * Internal use */ //% shim=bluetooth::__log - export function __log(msg: string) { + export function __log(priority: number, msg: string) { return; } - console.addListener(function (msg) { __log(msg) }); + console.addListener(function (_pri, msg) { __log(_pri, msg) }); /** * Writes to the Bluetooth UART service buffer. From there the data is transmitted over Bluetooth to a connected device. @@ -78,6 +78,7 @@ namespace bluetooth { //% blockId=eddystone_advertise_uid block="bluetooth advertise UID|namespace (bytes 6-9)%ns|instance (bytes 2-6)%instance|with power %power|connectable %connectable" //% parts=bluetooth weight=12 blockGap=8 //% help=bluetooth/advertise-uid blockExternalInputs=1 + //% hidden=1 deprecated=1 export function advertiseUid(ns: number, instance: number, power: number, connectable: boolean) { const buf = pins.createBuffer(16); buf.setNumber(NumberFormat.Int32BE, 6, ns); diff --git a/libs/bluetooth/pxt.json b/libs/bluetooth/pxt.json index 8c4a4bc2..51cc58c2 100644 --- a/libs/bluetooth/pxt.json +++ b/libs/bluetooth/pxt.json @@ -10,12 +10,13 @@ "BLEHF2Service.h", "BLEHF2Service.cpp" ], + "weight": 10, + "searchOnly": true, "icon": "./static/packages/bluetooth/icon.png", "public": true, "dependencies": { "core": "file:../core" }, - "disablesVariants": ["mbcodal"], "yotta": { "config": { "microbit-dal": { @@ -29,7 +30,8 @@ "stack_size": 1280, "gatt_table_size": "0x700" } - } - }, - "installedVersion": "vzlhfd" -} \ No newline at end of file + }, + "userConfigs": [ + ] + } +} diff --git a/libs/bluetooth/shims.d.ts b/libs/bluetooth/shims.d.ts index 46f84bf0..4e2b6e69 100644 --- a/libs/bluetooth/shims.d.ts +++ b/libs/bluetooth/shims.d.ts @@ -109,7 +109,8 @@ declare namespace bluetooth { */ //% blockId=eddystone_advertise_url block="bluetooth advertise url %url|with power %power|connectable %connectable" //% parts=bluetooth weight=11 blockGap=8 - //% help=bluetooth/advertise-url blockExternalInputs=1 shim=bluetooth::advertiseUrl + //% help=bluetooth/advertise-url blockExternalInputs=1 + //% hidden=1 deprecated=1 shim=bluetooth::advertiseUrl function advertiseUrl(url: string, power: int32, connectable: boolean): void; /** @@ -118,7 +119,7 @@ declare namespace bluetooth { * @param power power level between 0 and 7, eg: 7 * @param connectable true to keep bluetooth connectable for other services, false otherwise. */ - //% parts=bluetooth weight=12 advanced=true shim=bluetooth::advertiseUidBuffer + //% parts=bluetooth weight=12 advanced=true deprecated=1 shim=bluetooth::advertiseUidBuffer function advertiseUidBuffer(nsAndInstance: Buffer, power: int32, connectable: boolean): void; /** @@ -134,7 +135,8 @@ declare namespace bluetooth { */ //% blockId=eddystone_stop_advertising block="bluetooth stop advertising" //% parts=bluetooth weight=10 - //% help=bluetooth/stop-advertising advanced=true shim=bluetooth::stopAdvertising + //% help=bluetooth/stop-advertising advanced=true + //% hidden=1 deprecated=1 shim=bluetooth::stopAdvertising function stopAdvertising(): void; } diff --git a/libs/core/_locales/core-jsdoc-strings.json b/libs/core/_locales/core-jsdoc-strings.json index 0e7542c8..5aea2b8b 100644 --- a/libs/core/_locales/core-jsdoc-strings.json +++ b/libs/core/_locales/core-jsdoc-strings.json @@ -4,6 +4,7 @@ "AcceleratorRange.OneG": "The accelerator measures forces up to 1 gravity", "AcceleratorRange.TwoG": "The accelerator measures forces up to 2 gravity", "Array": "Add, remove, and replace items in lists.", + "Array._pickRandom": "Return a random value from the array", "Array._popStatement": "Remove the last element from an array and return it.", "Array._removeAtStatement": "Remove the element at a certain index.", "Array._shiftStatement": "Remove the first element from an array and return it. This method changes the length of the array.", @@ -41,6 +42,7 @@ "Array.reverse": "Reverse the elements in an array. The first array element becomes the last, and the last array element becomes the first.", "Array.set": "Store a value at a particular index", "Array.set|param|index": "the zero-based position in the list to store the value, eg: 0", + "Array.set|param|value": "the value to insert, eg: 0", "Array.shift": "Remove the first element from an array and return it. This method changes the length of the array.", "Array.slice": "Return a section of an array.", "Array.slice|param|end": "The end of the specified portion of the array. eg: 0", @@ -124,9 +126,15 @@ "Image.showFrame": "Show a particular frame of the image strip.", "Image.showFrame|param|frame": "image frame to show", "Image.showImage": "Shows an frame from the image at offset ``x offset``.", + "Image.showImage|param|interval": "time in milliseconds to pause after drawing", "Image.showImage|param|xOffset": "column index to start displaying the image", "Image.width": "Gets the width in columns", "Infinity": "Constant representing positive infinity.", + "JSON.parse": "Converts a JavaScript Object Notation (JSON) string into an object.", + "JSON.stringify": "Converts a JavaScript value to a JavaScript Object Notation (JSON) string.", + "JSON.stringify|param|indent": "Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.", + "JSON.stringify|param|replacer": "Not supported; use null.", + "JSON.stringify|param|value": "A JavaScript value, usually an object or array, to be converted.", "Math": "More complex operations with numbers.", "Math.abs": "Returns the absolute value of a number (the value without regard to whether it is positive or negative).\nFor example, the absolute value of -5 is the same as the absolute value of 5.", "Math.abs|param|x": "A numeric expression for which the absolute value is needed.", @@ -225,7 +233,7 @@ "String.split": "Splits the string according to the separators", "String.split|param|separator": "@param limit", "String.substr": "Return a substring of the current string.", - "String.substr|param|length": "number of characters to extract", + "String.substr|param|length": "number of characters to extract, eg: 10", "String.substr|param|start": "first character index; can be negative from counting from the end, eg:0", "String.toLowerCase": "Converts the string to lower case characters.", "String.trim": "Return a substring of the current string with whitespace removed from both ends", @@ -245,30 +253,31 @@ "basic.pause|param|ms": "how long to pause for, eg: 100, 200, 500, 1000, 2000", "basic.plotLeds": "Draws an image on the LED screen.", "basic.plotLeds|param|leds": "pattern of LEDs to turn on/off", + "basic.rgb": "Converts red, green, blue channels into a RGB color", "basic.rgbw": "Converts red, green, blue channels into a RGB color", "basic.rgbw|param|blue": "value of the blue channel between 0 and 255. eg: 255", "basic.rgbw|param|green": "value of the green channel between 0 and 255. eg: 255", "basic.rgbw|param|red": "value of the red channel between 0 and 255. eg: 255", "basic.rgbw|param|white": "value of the white channel between 0 and 255. eg: 0", + "basic.rgb|param|blue": "value of the blue channel between 0 and 255. eg: 255", + "basic.rgb|param|green": "value of the green channel between 0 and 255. eg: 255", + "basic.rgb|param|red": "value of the red channel between 0 and 255. eg: 255", "basic.setLedColor": "Sets the color on the build-in LED. Set to 0 to turn off.", "basic.showAnimation": "Shows a sequence of LED screens as an animation.", "basic.showAnimation|param|interval": "time in milliseconds between each redraw", "basic.showAnimation|param|leds": "pattern of LEDs to turn on/off", - "basic.showArrow": "Draws an arrow on the LED screen", - "basic.showArrow|param|direction": "the direction of the arrow", - "basic.showArrow|param|interval": "the amount of time (milliseconds) to show the icon. Default is 600.", "basic.showCompass": "Draws needle on the screen which always points to north", "basic.showCompass|param|interval": "the amount of time (milliseconds) to show the needle. Default is 600.", "basic.showIcon": "Draws the selected icon on the LED screen", "basic.showIcon|param|icon": "the predefined icon id", - "basic.showIcon|param|interval": "the amount of time (milliseconds) to show the icon. Default is 600.", + "basic.showIcon|param|interval": "the amount of time (milliseconds) to block the LED Matrix for showing the icon. Default is 200.", "basic.showLeds": "Draws an image on the LED screen.", "basic.showLeds|param|interval": "time in milliseconds to pause after drawing", "basic.showLeds|param|leds": "the pattern of LED to turn on/off", "basic.showNumber": "Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll.", - "basic.showNumber|param|interval": "speed of scroll; eg: 150, 100, 200, -100", + "basic.showNumber|param|interval": "speed of scroll; eg: 50, 100, 150, 200", "basic.showString": "Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll.", - "basic.showString|param|interval": "how fast to shift characters; eg: 150, 100, 200, -100", + "basic.showString|param|interval": "how fast to shift characters; eg: 50, 100, 150, 200", "basic.showString|param|text": "the text to scroll on the screen, eg: \"hi!\"", "basic.turnRgbLedOff": "Sets the color on the build-in LED. Set to 0 to turn off.", "console": "Reading and writing data to the console output.", @@ -280,31 +289,48 @@ "console.logValue": "Write a name:value pair as a line of text to the console output.", "console.logValue|param|name": "name of the value stream, eg: \"x\"", "console.logValue|param|value": "to write", + "console.log|param|value": "to send", + "console.minPriority": "Minimum priority to send messages to listeners", + "console.removeListener": "Removes a listener", "control": "Runtime and event utilities.", + "control.allocateNotifyEvent": "Allocates the next user notification event", "control.assert": "If the condition is false, display msg on serial console, and panic with code 098.", + "control.benchmark": "Runs the function and returns run time in microseconds.", "control.createBuffer": "Create a new zero-initialized buffer.", "control.createBufferFromUTF8": "Create a new buffer with UTF8-encoded string", "control.createBufferFromUTF8|param|str": "the string to put in the buffer", "control.createBuffer|param|size": "number of bytes in the buffer", + "control.deviceLongSerialNumber": "Derive a unique, consistent 64-bit serial number of this device from internal data.", "control.deviceName": "Make a friendly name for the device based on its serial number", "control.deviceSerialNumber": "Derive a unique, consistent serial number of this device from internal data.", + "control.dmesg": "Write a message to DMESG debugging buffer.", + "control.dmesgPerfCounters": "Dump values of profiling performance counters.", + "control.dmesgPtr": "Write a message and value (pointer) to DMESG debugging buffer.", + "control.enablePerfCounter": "Enable profiling for current function.", "control.eventSourceId": "Returns the value of a C++ runtime constant", "control.eventTimestamp": "Gets the timestamp of the last event executed on the bus", "control.eventValue": "Gets the value of the last event executed on the bus", "control.eventValueId": "Returns the value of a C++ runtime constant", + "control.gc": "Force GC and dump basic information about heap.", "control.gcStats": "Get various statistics about the garbage collector (GC)", + "control.heapDump": "Force GC and halt waiting for debugger to do a full heap dump.", + "control.heapSnapshot": "Record a heap snapshot to debug memory leaks.", "control.inBackground": "Schedules code that run in the background.", "control.micros": "Gets current time in microseconds. Overflows every ~18 minutes.", "control.millis": "Gets the number of milliseconds elapsed since power on.", "control.onEvent": "Registers an event handler.", "control.panic": "Display specified error code and stop the program.", + "control.profilingEnabled": "Return true if profiling is enabled in the current build.", "control.raiseEvent": "Raises an event in the event bus.", "control.raiseEvent|param|mode": "optional definition of how the event should be processed after construction (default is CREATE_AND_FIRE).", "control.raiseEvent|param|src": "ID of the MicroBit Component that generated the event e.g. MICROBIT_ID_BUTTON_A.", "control.raiseEvent|param|value": "Component specific code indicating the cause of the event.", + "control.ramSize": "Returns estimated size of memory in bytes.", "control.reset": "Resets the BBC micro:bit.", "control.runInParallel": "Run other code in the parallel.", "control.runtimeWarning": "Display warning in the simulator.", + "control.setDebugFlags": "Set flags used when connecting an external debugger.", + "control.simmessages.onReceived": "Registers the handler for a message on a given channel", "control.waitForEvent": "Blocks the calling thread until the specified event is raised.", "control.waitMicros": "Blocks the current fiber for the given microseconds", "control.waitMicros|param|micros": "number of micro-seconds to wait. eg: 4", @@ -401,38 +427,39 @@ "input": "Events and data from sensors", "input.acceleration": "Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)", "input.acceleration|param|dimension": "x, y, or z dimension, eg: Dimension.X", + "input.assumeCalibrationCompass": "Obsolete, compass calibration is automatic.", + "input.buttonEventValueId": "Returns the value of a C++ runtime constant", "input.buttonIsPressed": "Get the button state (pressed or not) for ``A`` and ``B``.", "input.buttonIsPressed|param|button": "the button to query the request, eg: Button.A", - "input.calibrate": "Obsolete, use input.calibrateCompass instead.", "input.calibrateCompass": "Obsolete, compass calibration is automatic.", + "input.clearCalibrationCompass": "Obsolete, compass calibration is automatic.", "input.compassHeading": "Get the current compass heading in degrees.", + "input.isCalibratedCompass": "Returns 'true' when the compass is calibrated. Otherwise returns 'false'.", "input.isGesture": "Tests if a gesture is currently detected.", "input.isGesture|param|gesture": "the type of gesture to detect, eg: Gesture.Shake", "input.lightLevel": "Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.", + "input.loudness": "gets the level of loudness from 0 (silent) to 255 (loud)", "input.magneticForce": "Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator.", "input.magneticForce|param|dimension": "the x, y, or z dimension, eg: Dimension.X", + "input.onButtonEvent": "Do something when a button (A, B or both A+B) receives an event.", + "input.onButtonEvent|param|body": "code to run when event is raised", + "input.onButtonEvent|param|button": "the button", + "input.onButtonEvent|param|eventType": "event Type", "input.onButtonPressed": "Do something when a button (A, B or both A+B) is pushed down and released again.", "input.onButtonPressed|param|body": "code to run when event is raised", "input.onButtonPressed|param|button": "the button that needs to be pressed", "input.onGesture": "Do something when when a gesture is done (like shaking the micro:bit).", "input.onGesture|param|body": "code to run when gesture is raised", "input.onGesture|param|gesture": "the type of gesture to track, eg: Gesture.Shake", - "input.onLogoDown": "Attaches code to run when the logo is oriented downwards and the board is vertical.", - "input.onLogoDown|param|body": "TODO", - "input.onLogoUp": "Attaches code to run when the logo is oriented upwards and the board is vertical.", - "input.onLogoUp|param|body": "TODO", "input.onPinPressed": "Do something when a pin is touched and released again (while also touching the GND pin).", "input.onPinPressed|param|body": "the code to run when the pin is pressed", "input.onPinPressed|param|name": "the pin that needs to be pressed, eg: TouchPin.P0", "input.onPinReleased": "Do something when a pin is released.", "input.onPinReleased|param|body": "the code to run when the pin is released", "input.onPinReleased|param|name": "the pin that needs to be released, eg: TouchPin.P0", - "input.onScreenDown": "Attaches code to run when the screen is facing down.", - "input.onScreenDown|param|body": "TODO", - "input.onScreenUp": "Attaches code to run when the screen is facing up.", - "input.onScreenUp|param|body": "TODO", - "input.onShake": "Attaches code to run when the device is shaken.", - "input.onShake|param|body": "TODO", + "input.onPinTouchEvent": "Do something when a pin receives an touch event (while also touching the GND pin).", + "input.onPinTouchEvent|param|body": "the code to run when event is fired on pin", + "input.onPinTouchEvent|param|name": "the pin, eg: TouchPin.P0", "input.pinIsPressed": "Get the pin state (pressed or not). Requires to hold the ground to close the circuit.", "input.pinIsPressed|param|name": "pin used to detect the touch, eg: TouchPin.P0", "input.rotation": "The pitch or roll of the device, rotation along the ``x-axis`` or ``y-axis``, in degrees.", @@ -441,7 +468,7 @@ "input.runningTimeMicros": "Gets the number of microseconds elapsed since power on.", "input.setAccelerometerRange": "Sets the accelerometer sample range in gravities.", "input.setAccelerometerRange|param|range": "a value describe the maximum strengh of acceleration measured", - "input.soundLevel": "gets the level of loudness in 0-100%", + "input.soundLevel": "gets the level of loudness from 0 (silent) to 255 (loud)", "input.temperature": "Gets the temperature in Celsius degrees (°C).", "led": "Control of the LED screen.", "led.brightness": "Get the screen brightness from 0 (off) to 255 (full bright).", @@ -482,7 +509,10 @@ "led.unplot|param|x": "the horizontal coordinate of the LED", "led.unplot|param|y": "the vertical coordinate of the LED", "light.sendWS2812Buffer": "Sends a color buffer to a light strip", + "light.sendWS2812BufferWithBrightness": "Sends a color buffer to a light strip", "light.setMode": "Sets the light mode of a pin", + "loops.everyInterval": "Repeats the code forever in the background.\nAfter each iteration, allows other codes to run for a set duration\nso that it runs on a timer", + "loops.everyInterval|param|interval": "time (in ms) to wait between each iteration of the action.", "motors": "Blocks to control the onboard motors", "motors.dualMotorPower": "Controls two motors attached to the board. Switches to dual-motor mode!", "motors.motorCommand": "Send break, coast or sleep commands to the motor. Has no effect in dual-motor mode.", @@ -522,6 +552,7 @@ "music.startMelody": "Starts playing a melody.\nNotes are expressed as a string of characters with this format: NOTE[octave][:duration]", "music.startMelody|param|melodyArray": "the melody array to play", "music.startMelody|param|options": "melody options, once / forever, in the foreground / background", + "music.stopAllSounds": "Stop all sounds and melodies currently playing.", "music.stopMelody": "Stops the melodies", "music.stopMelody|param|options": "which melody to stop", "music.tempo": "Returns the tempo in beats per minute. Tempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play.", @@ -531,6 +562,9 @@ "parseInt|param|radix": "optional A value between 2 and 36 that specifies the base of the number in text.", "parseInt|param|text": "A string to convert into an integral number. eg: \"123\"", "pause": "Pause for the specified time in milliseconds", + "pauseUntil": "Busy wait for a condition to be true", + "pauseUntil|param|condition": "condition to test for", + "pauseUntil|param|timeOut": "if positive, maximum duration to wait for in milliseconds", "pause|param|ms": "how long to pause for, eg: 100, 200, 500, 1000, 2000", "pins": "Control currents in Pins for analog/digital signals, servos, i2c, ...", "pins.C10": "Pin C10", @@ -597,9 +631,12 @@ "pins.servoWritePin": "Write a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).", "pins.servoWritePin|param|name": "pin to write to, eg: AnalogPin.P1", "pins.servoWritePin|param|value": "angle or rotation speed, eg:180,90,0", + "pins.setAudioPin": "Set the pin used when producing sounds and melodies. Default is P0.", + "pins.setAudioPin|param|name": "pin to modulate pitch from", "pins.setEvents": "Configure the events emitted by this pin. Events can be subscribed to\nusing ``control.onEvent()``.", "pins.setEvents|param|name": "pin to set the event mode on, eg: DigitalPin.P0", "pins.setEvents|param|type": "the type of events for this pin to emit, eg: PinEventType.Edge", + "pins.setMatrixWidth": "Set the matrix width for Neopixel strip (already assigned to a pin).\nShould be used in conjunction with `set matrix width` from Neopixel package.", "pins.setPull": "Configure the pull directiion of of a pin.", "pins.setPull|param|name": "pin to set the pull mode on, eg: DigitalPin.P0", "pins.setPull|param|pull": "one of the mbed pull configurations, eg: PinPullMode.PullUp", @@ -622,8 +659,8 @@ "serial.delimiters": "Return the corresponding delimiter string", "serial.onDataReceived": "Register an event to be fired when one of the delimiter is matched.", "serial.onDataReceived|param|delimiters": "the characters to match received characters against.", - "serial.readBuffer": "Read multiple characters from the receive buffer. Pause until enough characters are present.", - "serial.readBuffer|param|length": "default buffer length, eg: 64", + "serial.readBuffer": "Read multiple characters from the receive buffer. \nIf length is positive, pauses until enough characters are present.", + "serial.readBuffer|param|length": "default buffer length", "serial.readLine": "Read a line of text from the serial port.", "serial.readString": "Read the buffered received data as a string", "serial.readUntil": "Read a line of text from the serial port and return the buffer when the delimiter is met.", @@ -647,5 +684,20 @@ "serial.writeString": "Send a piece of text through the serial connection.", "serial.writeValue": "Write a name:value pair as a line to the serial port.", "serial.writeValue|param|name": "name of the value stream, eg: x", - "serial.writeValue|param|value": "to write" + "serial.writeValue|param|value": "to write", + "storage": "Provides access to persistent storage functionality.\n\nProvides access to persistent storage functionality.", + "storage.getNumber": "Reads a key value pair from the non volatile storage as a number", + "storage.getNumber|param|key": "the key for accesing the value", + "storage.getValueInt": "Reads a key value pair from the non volatile storage", + "storage.getValueInt|param|key": "the key for accesing the value", + "storage.putNumber": "Saves a key value pair in the non volatile storage", + "storage.putNumber|param|key": "the key for accesing the value", + "storage.putNumber|param|value": "value to store", + "storage.putValueInt": "Saves a key value pair in the non volatile storage", + "storage.putValueInt|param|key": "the key for accesing the value", + "storage.putValueInt|param|value": "value to store", + "storage.remove": "Removes a key value pair from the non volatile storage", + "storage.removeKeyInt": "Deletes the key from the non volatile storage", + "storage.removeKeyInt|param|key": "the key for accesing the value", + "storage.remove|param|key": "the key for accesing the value" } \ No newline at end of file diff --git a/libs/core/_locales/core-strings.json b/libs/core/_locales/core-strings.json index fb0ea9f8..cae59eec 100644 --- a/libs/core/_locales/core-strings.json +++ b/libs/core/_locales/core-strings.json @@ -7,6 +7,7 @@ "AcceleratorRange.OneG|block": "1g", "AcceleratorRange.TwoG": "The accelerator measures forces up to 2 gravity", "AcceleratorRange.TwoG|block": "2g", + "Array._pickRandom|block": "get random value from %list", "Array._popStatement|block": "remove last value from %list", "Array._removeAtStatement|block": "%list| remove value at %index", "Array._shiftStatement|block": "remove first value from %list", @@ -21,14 +22,6 @@ "Array.shift|block": "get and remove first value from %list", "Array.unshift|block": "%list| insert %value| at beginning", "Array|block": "Array", - "ArrowNames.East|block": "East", - "ArrowNames.NorthEast|block": "North East", - "ArrowNames.NorthWest|block": "North West", - "ArrowNames.North|block": "North", - "ArrowNames.SouthEast|block": "South East", - "ArrowNames.SouthWest|block": "South West", - "ArrowNames.South|block": "South", - "ArrowNames.West|block": "West", "BaudRate.BaudRate115200|block": "115200", "BaudRate.BaudRate1200|block": "1200", "BaudRate.BaudRate14400|block": "14400", @@ -49,6 +42,10 @@ "BeatFraction.Whole|block": "1", "Buffer|block": "Buffer", "Button.AB|block": "A+B", + "ButtonEvent.Click|block": "clicked", + "ButtonEvent.Down|block": "pressed down", + "ButtonEvent.LongClick|block": "long clicked", + "ButtonEvent.Up|block": "released up", "Colors.Blue|block": "blue", "Colors.Green|block": "green", "Colors.Indigo|block": "indigo", @@ -112,46 +109,20 @@ "IconNames.ArrowSouth|block": "arrow south", "IconNames.ArrowWest|block": "arrow west", "IconNames.Asleep|block": "asleep", - "IconNames.Butterfly|block": "butterfly", - "IconNames.Chessboard|block": "chess board", "IconNames.Confused|block": "confused", - "IconNames.Cow|block": "cow", - "IconNames.Diamond|block": "diamond", - "IconNames.Duck|block": "duck", - "IconNames.EigthNote|block": "eigth note", "IconNames.Fabulous|block": "fabulous", - "IconNames.Ghost|block": "ghost", - "IconNames.Giraffe|block": "giraffe", "IconNames.Happy|block": "happy", "IconNames.Heart|block": "heart", - "IconNames.House|block": "house", - "IconNames.LeftTriangle|block": "left triangle", "IconNames.Meh|block": "meh", "IconNames.No|block": "no", - "IconNames.Pitchfork|block": "pitchfork", - "IconNames.QuarterNote|block": "quarter note", - "IconNames.Rabbit|block": "rabbit", - "IconNames.Rollerskate|block": "roller skate", "IconNames.Sad|block": "sad", - "IconNames.Scissors|block": "scissors", "IconNames.Silly|block": "silly", - "IconNames.Skull|block": "skull", - "IconNames.SmallDiamond|block": "small diamond", "IconNames.SmallHeart|block": "small heart", - "IconNames.SmallSquare|block": "small square", - "IconNames.Snake|block": "snake", - "IconNames.Square|block": "square", - "IconNames.StickFigure|block": "stick figure", "IconNames.Surprised|block": "surprised", - "IconNames.Sword|block": "sword", - "IconNames.TShirt|block": "t-shirt", - "IconNames.Target|block": "target", - "IconNames.Tortoise|block": "tortoise", - "IconNames.Triangle|block": "triangle", - "IconNames.Umbrella|block": "umbrella", "IconNames.Yes|block": "yes", - "Image.scrollImage|block": "scroll image %sprite(myImage)|with offset %frameoffset|and interval (ms) %delay", - "Image.showImage|block": "show image %sprite(myImage)|at offset %offset", + "Image.scrollImage|block": "scroll image %sprite(myImage)|with offset %frameoffset|and interval (ms) %interval", + "Image.showImage|block": "show image %sprite(myImage)|at offset %offset ||and interval (ms) %interval", + "JSON|block": "JSON", "LedSpriteProperty.Blink|block": "blink", "LedSpriteProperty.Brightness|block": "brightness", "LedSpriteProperty.Direction|block": "direction", @@ -248,6 +219,13 @@ "PulseValue.Low|block": "low", "Rotation.Pitch|block": "pitch", "Rotation.Roll|block": "roll", + "StorageSlots.s1|block": "Slot 1", + "StorageSlots.s2|block": "Slot 2", + "StorageSlots.s3|block": "Slot 3", + "StorageSlots.s4|block": "Slot 4", + "StorageSlots.s5|block": "Slot 5", + "StorageSlots.s6|block": "Slot 6", + "StorageSlots.s7|block": "Slot 7", "String.charAt|block": "char from %this=text|at %pos", "String.compare|block": "compare %this=text| to %that", "String.fromCharCode|block": "text from char code %code", @@ -264,13 +242,13 @@ "basic.forever|block": "forever", "basic.pause|block": "pause (ms) %pause", "basic.rgbw|block": "red %red|green %green|blue %blue|white %white", + "basic.rgb|block": "red %red|green %green|blue %blue", "basic.setLedColor|block": "set led to %color=colorNumberPicker", - "basic.showArrow|block": "show arrow %i=device_arrow", "basic.showCompass|block": "show compass needle for $interval|ms", - "basic.showIcon|block": "show icon %i", + "basic.showIcon|block": "show icon %i || for %interval ms", "basic.showLeds|block": "show leds", - "basic.showNumber|block": "show|number %number", - "basic.showString|block": "show|string %text", + "basic.showNumber|block": "show|number %number || in an interval of %interval ms", + "basic.showString|block": "show|string %text || in an interval of %interval ms", "basic.turnRgbLedOff|block": "turn build-in LED off", "basic|block": "basic", "console|block": "console", @@ -314,29 +292,34 @@ "game.setScore|block": "set score %points", "game.startCountdown|block": "start countdown|(ms) %duration", "game|block": "game", - "images.arrowImage|block": "arrow image %i", - "images.arrowNumber|block": "%arrow", "images.createBigImage|block": "create big image", "images.createImage|block": "create image", "images.iconImage|block": "icon image %i", "images|block": "images", "input.acceleration|block": "acceleration (mg)|%NAME", + "input.assumeCalibrationCompass|block": "assume calibration compass", + "input.buttonEventValueId|block": "%id", "input.buttonIsPressed|block": "button|%NAME|is pressed", "input.calibrateCompass|block": "calibrate compass", + "input.clearCalibrationCompass|block": "clear calibration compass", "input.compassHeading|block": "compass heading (°)", + "input.isCalibratedCompass|block": "is compass calibrated", "input.isGesture|block": "is %gesture gesture", "input.lightLevel|block": "light level", + "input.loudness|block": "Loudness", "input.magneticForce|block": "magnetic force (µT)|%NAME", + "input.onButtonEvent|block": "on button %NAME| %eventType=control_button_event_value_id", "input.onButtonPressed|block": "on button|%NAME|pressed", "input.onGesture|block": "on |%NAME", "input.onPinPressed|block": "on pin %name|pressed", "input.onPinReleased|block": "on pin %NAME|released", + "input.onPinTouchEvent|block": "on pin %name| %eventType=control_button_event_value_id", "input.pinIsPressed|block": "pin %NAME|is pressed", "input.rotation|block": "rotation (°)|%NAME", "input.runningTimeMicros|block": "running time (micros)", "input.runningTime|block": "running time (ms)", "input.setAccelerometerRange|block": "set accelerometer|range %range", - "input.soundLevel|block": "Loudness", + "input.soundLevel|block": "soundLevel", "input.temperature|block": "temperature (°C)", "input|block": "input", "led.brightness|block": "brightness", @@ -353,6 +336,8 @@ "led.unplot|block": "unplot|x %x|y %y", "led|block": "led", "light|block": "light", + "loops.everyInterval|block": "every $interval ms", + "loops|block": "loops", "motors.dualMotorPower|block": "motor %motor|at %percent \\%", "motors.motorCommand|block": "motor %command", "motors.motorPower|block": "motor on at %percent \\%", @@ -371,6 +356,7 @@ "music.setTempo|block": "set tempo to (bpm)|%value", "music.setVolume|block": "set volume %volume", "music.startMelody|block": "start melody %melody=device_builtin_melody| repeating %options", + "music.stopAllSounds|block": "stop all sounds", "music.stopMelody|block": "stop melody $options", "music.tempo|block": "tempo (bpm)", "music.volume|block": "volume", @@ -394,7 +380,9 @@ "pins.pulseIn|block": "pulse in (µs)|pin %name|pulsed %value", "pins.servoSetPulse|block": "servo set pulse|pin %value|to (µs) %micros", "pins.servoWritePin|block": "servo write|pin %name|to %value", + "pins.setAudioPin|block": "set audio pin $name", "pins.setEvents|block": "set pin %pin|to emit %type|events", + "pins.setMatrixWidth|block": "neopixel matrix width|pin %pin %width", "pins.setPull|block": "set pull|pin %pin|to %pull", "pins.spiFormat|block": "spi format|bits %bits|mode %mode", "pins.spiFrequency|block": "spi frequency %frequency", @@ -421,6 +409,13 @@ "serial.writeString|block": "serial|write string %text", "serial.writeValue|block": "serial|write value %name|= %value", "serial|block": "serial", + "storage.getNumber|block": "read from number %key", + "storage.getValueInt|block": "get number from %key", + "storage.putNumber|block": "Save into number %key a value of %value", + "storage.putValueInt|block": "Put into %key a value of %value as Int", + "storage.removeKeyInt|block": "Clear number %key", + "storage.remove|block": "remove %key", + "storage|block": "storage", "{id:category}AnalogInPin": "AnalogInPin", "{id:category}AnalogOutPin": "AnalogOutPin", "{id:category}Array": "Array", @@ -438,8 +433,10 @@ "{id:category}Image": "Image", "{id:category}Images": "Images", "{id:category}Input": "Input", + "{id:category}JSON": "JSON", "{id:category}Led": "Led", "{id:category}Light": "Light", + "{id:category}Loops": "Loops", "{id:category}Math": "Math", "{id:category}MicrobitPin": "MicrobitPin", "{id:category}Motors": "Motors", @@ -450,15 +447,27 @@ "{id:category}Pins": "Pins", "{id:category}PwmOnlyPin": "PwmOnlyPin", "{id:category}Serial": "Serial", + "{id:category}Storage": "Storage", "{id:category}String": "String", "{id:category}Text": "Text", "{id:category}_py": "_py", "{id:group}Configuration": "Configuration", + "{id:group}Control": "Control", + "{id:group}Events": "Events", + "{id:group}Get": "Get", + "{id:group}LED matrix": "LED matrix", "{id:group}Melody": "Melody", "{id:group}Melody Advanced": "Melody Advanced", "{id:group}Modify": "Modify", "{id:group}Operations": "Operations", + "{id:group}Put": "Put", + "{id:group}RGB LED": "RGB LED", "{id:group}Read": "Read", + "{id:group}Remove": "Remove", + "{id:group}Sensors": "Sensors", + "{id:group}Silence": "Silence", + "{id:group}States": "States", + "{id:group}System": "System", "{id:group}Tempo": "Tempo", "{id:group}Tone": "Tone", "{id:group}Volume": "Volume" diff --git a/libs/core/_locales/de/core-jsdoc-strings.json b/libs/core/_locales/de/core-jsdoc-strings.json index cf9c1879..9fa1157a 100644 --- a/libs/core/_locales/de/core-jsdoc-strings.json +++ b/libs/core/_locales/de/core-jsdoc-strings.json @@ -1,210 +1,214 @@ { - "Math.abs": "Gibt den absoluten Wert einer Zahl aus (den Wert unabhängig davon, ob er positiv oder negativ ist).\nDer absolute Wert von -5 ist zum Beispiel der gleiche wie der von 5.", - "Math.abs|param|x": "Ein numerischer Ausdruck, für den der absolute Wert benötigt wird.", - "Math.max": "Gibt den größeren von zwei vorhandenen numerischen Ausdrücken aus.", - "Math.min": "Gibt den niedrigeren von zwei vorhandenen numerischen Ausdrücken aus.", - "Math.pow": "Gibt den Wert eines grundlegenden Ausdrucks bis zu einer bestimmten Stärke aus.", - "Math.pow|param|x": "Der Basiswert des Ausdrucks.", - "Math.pow|param|y": "Der exponentielle Wert des Ausdrucks.", - "Math.random": "Gibt eine pseudozufüllige Zahl zwischen 0 und `max`aus.", - "Math.randomBoolean": "Erzeugt zufällig einen \"wahr\" oder \"falsch\"-Wert, wie bei einem Münzwurf.", - "Math.sign": "Gibt das Vorzeichen von x aus und zeigt an, ob dieses positiv, negativ oder null ist.", - "Math.sign|param|x": "Der numerische Ausdruck, der getestet werden soll", - "Math.sqrt": "Gibt die Quadratwurzel einer Zahl aus.", - "Math.sqrt|param|x": "Ein numerischer Ausdruck.", - "String.charAt": "Gibt den Buchstaben beim angegebenen Index aus.", - "String.charAt|param|index": "Der null-basierte index des gewünschten Zeichens.", - "String.charCodeAt": "Gibt den Unicode-Wert des Zeichens am vorgegebenen Ort aus.", - "String.charCodeAt|param|index": "Der null-basierte Index des gewünschten Zeichens. Wenn kein Zeichen am angegeben Index vorhanden ist, wird NaN ausgegeben.", - "String.compare": "Bestimmt die relative Reihenfolge zweier Strings (in ASCII).", - "String.compare|param|that": "Zeichenfolge, die mit der Zielzeichenfolge verglichen werden soll", - "String.concat": "Gibt eine Zeichenfolge aus, die die Verkettung von zwei oder mehr Zeichenfolgen ist.", - "String.concat|param|other": "Die Zeichenfolge, die an das Ende einer Zeichenfolge angehängt werden soll.", - "String.fromCharCode": "Erstelle Sie eine Zeichenfolge aus dem angegebenen ASCII-Zeichencode.", - "String.isEmpty": "Gibt einen Wert aus, der anzeigt, ob die Zeichenfolge leer ist", - "String.length": "Gibt die Länge einer Zeichenfolge aus.", - "String.substr": "Gibt eine Teilzeichenfolge der aktuellen Zeichenfolge aus.", - "String.substr|param|length": "Anzahl der zu extrahierenden Zeichen", - "String.substr|param|start": "Erster Zeichenindex, kann beim zählen vom Ende negativ sein, zum Beispiel: 0", - "basic": "Bietet Zugriff auf grundlegende mini-Funktionalität.", - "basic.clearScreen": "Schalte alle LEDs aus", - "basic.color": "Konvertiert den Farbnamen in eine Nummer", - "basic.forever": "Wiederholt immer wieder den Code im Hintergrund. Bei jeder Iteration ist es möglich, anderen Code auszuführen.", - "basic.pause": "Pausiere für die angegebene Zeit in Millisekunden", - "basic.pause|param|ms": "wie lange pausieren, z.B.: 100, 200, 500, 1000, 2000", - "basic.plotLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", - "basic.plotLeds|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", - "basic.rgbw": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe", - "basic.rgbw|param|blue": "Blauwert zwischen 0 und 255, z.B. 255", - "basic.rgbw|param|green": "Grünwert zwischen 0 und 255, z.B. 255", - "basic.rgbw|param|red": "Rotwert zwischen 0 und 255, z.B. 255", - "basic.rgbw|param|white": "Weißwert zwischen 0 und 255, z.B. 0", - "basic.setLedColor": "Legt die Farbe der eingebauten LED fest. Setze auf 0, um diese abzuschalten.", - "basic.showAnimation": "Zeigt eine Abfolge von LED-Anzeigen als Animation.", - "basic.showAnimation|param|interval": "Zeit in Millisekunden zwischen jedem Neuzeichnen", - "basic.showAnimation|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", - "basic.showLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", - "basic.showLeds|param|interval": "Zeit in Millisekunden, die nach der Zeichnung gewartet wird", - "basic.showLeds|param|leds": "Muster der LEDs, die ein- und ausgeschaltet werden", - "basic.showNumber": "Zeige eine Nummer auf dem Display. Wenn die Nummer auf das Display passt (es sich also um eine einstellige Zahl handelt), scrolle nicht weiter.", - "basic.showNumber|param|interval": "Scroll-Geschwindigkeit; z.B. 150, 100, 200,-100", - "basic.showString": "Zeige Text auf dem Display an, Buchstabe für Buchstabe. Wenn die Zeichenfolge in das Display passt (also wenn es sich um einen einzelnen Buchstaben handelt), scrolle nicht weiter.", - "basic.showString|param|interval": "Wie schnell die Zeichen geändert werden; z.B. 150, 100, 200,-100", - "basic.showString|param|text": "Text auf dem Bildschirm dargestellt werden soll, z.B.: \"Hallo!\"", - "control": "Laufzeit- und Event-Dienstprogramme.", - "control.assert": "Wenn die Bedingung falsch ist, zeige eine Nachricht auf der seriellen Konsole und gebe Panic-Code 098 aus", - "control.deviceName": "Erzeugt einen Namen für das Gerät, basierend auf der Seriennummer", - "control.eventSourceId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", - "control.eventTimestamp": "Holt den Zeitstempel des letzten Events auf dem Bus", - "control.eventValue": "Holt den Wert des letzten ausgeführten Events auf dem Bus", - "control.eventValueId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", - "control.inBackground": "Plant Code, der im Hintergrund wiedergegeben wird.", - "control.onEvent": "Startet ein Event auf dem Event-Bus.", - "control.panic": "Zeigt einen spezifizierten Fehlercode und hält das Programm an.", - "control.raiseEvent": "Startet ein Event auf dem Event-Bus.", - "control.raiseEvent|param|mode": "optionale Definition davon, wie ein Event nach dem Erstellen ausgeführt wird (Standard ist \"CREATE_AND_FIRE).", - "control.raiseEvent|param|src": "ID der Calliope mini-Komponente, die das Event generiert hat, zum Beispiel CALLIOPE_ID_BUTTON_A.", - "control.raiseEvent|param|value": "Komponentenspezifischer Code, der den Grund des Events angibt.", - "control.reset": "Seit den mini zurück.", - "control.runtimeWarning": "Zeige Warnmeldung im Simulator.", - "control.waitMicros": "Sperrt die aktuelle Leitung für die Dauer der angegebenen Mikrosekunden", - "control.waitMicros|param|micros": "Anzahl der Mikrosekunden, die gewartet werden soll, z.B.: 4", - "game": "Eine Einzel-LED-Sprite-Spielumgebung", - "game.addLife": "Fügt Leben zum aktuellen Spielstand hinzu", - "game.addScore": "Fügt zum aktuellen Spielstand Punkte hinzu", - "game.addScore|param|points": "Anzahl von zu verändernden Punkten, z.B.: 1", - "game.createSprite": "Erzeugt einen neuen LED-Sprite, der nach rechts zeigt.", - "game.createSprite|param|x": "horizontale Koordinate des Sprites, z.B. 2", - "game.createSprite|param|y": "vertikale Koordinate des Sprites, z.B. 2", - "game.currentTime": "Ruft die verbliebene Zeit (seit `starte Countdown`) oder die aktuelle Zeit (seit das Gerät gestartet wurde oder eine Stoppuhr aktiviert wurde) an.", - "game.gameOver": "Gibt über eine Animation ein Spiel wieder.", - "game.invalidSprite": "Ruft einen invaliden Sprite ab; wird genutzt, um Locale zu initialisieren.", - "game.isGameOver": "Zeigt an, ob das Spil die \"Game Over\"-Sequenz angezeigt hat.", - "game.isRunning": "Holt einen Wert, der anzeigt, ob das Spiel noch läuft. Gibt `falsch`aus, wenn das Spiel zu Ende ist.", - "game.level": "Ruft das aktuelle Level ab", - "game.levelUp": "Erhöht das Level und zeigt eine Nachricht an.", - "game.life": "Ruft das aktuelle Leben ab", - "game.removeLife": "Entfernt ein Leben", - "game.score": "Ruft den aktuellen Punktestand ab", - "game.setLife": "Setzt den aktuellen Wert der Leben", - "game.setScore": "Setzt den aktuellen Wert des Spielstands", - "game.showScore": "Zeigt den Spielstand auf dem Display.", - "game.startCountdown": "Startet einen Spiel-Countdown", - "game.startCountdown|param|ms": "Countdown-Dauer in Millisekunden, z.B.: 10000", - "game.startStopwatch": "Startet eine Stoppuhr.`aktuelle Zeit`gibt die vergangene Zeit an.", - "images": "Erstellung, Bearbeitung und Anzeige von LED-Bildern.", - "images.createBigImage": "Erstellt ein Bild mit zwei Einzelbildern.", - "images.createImage": "Erstellt ein Bild, das auf den LED-Bildschirm passt.", - "input": "Ereignisse und Daten der Sensoren", - "input.acceleration": "Holt den Beschleunigungswert in Milli-Erdanziehung (wenn das Board flach mit dem Display nach oben liegt, X = 0, y = 0 und Z =-1024)", - "input.buttonIsPressed": "Erhalte den Sie den Tastenstatus (gepresst oder nicht) für ``A`` und ``B``.", - "input.calibrate": "Veraltet, Kompasskalibrierung erfolgt automatisch.", - "input.compassHeading": "Holt die aktuelle Kompassrichtung in Grad.", - "input.lightLevel": "Liest die Lichtintensität auf dem LED-Bildschirm im Bereich von ``0`` (dunkel) und `` 255`` (hell).", - "input.magneticForce": "Ruft den Wert der Magnetkraft in ``Mikro-Tesla`` (``µT``) ab. Diese Funktion wird im Simulator nicht unterstützt.", - "input.onButtonPressed": "Tue etwas, wenn eine Taste (``A``, ``B`` oder ``A + B``) gedrückt wird", - "input.onGesture": "Mache etwas, wenn eine Geste gemacht wird (wie den mini zu schütteln).", - "input.onLogoDown": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach unten zeigt und das Board vertikal ausgerichtet ist.", - "input.onLogoUp": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach oben zeigt und das Board vertikal ausgerichtet ist.", - "input.onPinPressed": "Mache etwas, wenn eine Pin gehalten wird.", - "input.onPinPressed|param|body": "Code, der ausführt wird, wenn ein Pin gehalten wird", - "input.onPinReleased": "Mache etwas, wenn der Pin losgelassen wird.", - "input.onPinReleased|param|body": "Code, der ausgeführt werden soll, wenn der Pin losgelassen wird", - "input.onScreenDown": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach unten zeigt.", - "input.onScreenUp": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach oben zeigt.", - "input.onShake": "Hängt Code an, der ausgeführt wird, wenn der mini geschüttelt wird.", - "input.pinIsPressed": "Ruft den Pin-Zustand (gehalten oder nicht) ab. Die Erdung muss gehalten werden, um den Stromkreis zu schließen.", - "input.rotation": "Die Neigung und Drehung des mini Drehung auf ``X-Achse``oder ``Y-Achse``, in Grad.", - "input.runningTime": "Ruft die Anzahl der Millisekunden auf, die seit dem Einschalten vergangen sind.", - "input.setAccelerometerRange": "Legt die Stichprobenbereich des Beschleunigungssensors in Schwerkraft fest.", - "input.setAccelerometerRange|param|range": "Ein Wert, der die maximale Stärke der gemessenen Beschleunigung beschreibt", - "input.temperature": "Ruft die aktuelle Temperatur in Grad Celsius (°C) ab.", - "led": "Steuerung des LED-Bildschirms.", - "led.brightness": "Ruft die Helligkeit des Bildschirms ab, von 0 (aus) bis 255 (volle Helligkeit).", - "led.enable": "Schaltet das Display an und aus", - "led.fadeIn": "Blendet die Bildschirmanzeige ein.", - "led.fadeOut": "Blendet die Bildschirmhelligkeit aus.", - "led.plot": "Schalte die angegebene LED mit Hilfe von X- und Y-Koordinaten ein (X ist horizontal, Y ist vertikal). (0,0) ist die obere linke Ecke.", - "led.plotAll": "Schaltet alle LEDs an", - "led.plotBarGraph": "Zeigt ein vertikales Balkendiagramm an, basierend auf dem `Wert`und dem `Hoch`-Wert. Wenn `Hoch`0 ist, wird das Diagramm automatisch angepasst.", - "led.plotBarGraph|param|high": "maximalen Wert. Wenn dieser 0 ist, wird der Maximalwert automatisch angepasst, z.B.: 0", - "led.plotBarGraph|param|value": "aktueller Wert zum Darstellen", - "led.point": "Ruft den An/Aus-Status einer vorgegebenen LED mittels X-/Y-Koordinaten ab. (0,0) ist oben links.", - "led.screenshot": "Macht einen Screenshot vom LED-Bildschirm und gibt ein Bild aus.", - "led.setBrightness": "Lege die Helligkeit des Bildschirms fest, von 0 (aus) bis 255 (volle Helligkeit).", - "led.setBrightness|param|value": "Helligkeitswert, z.B.: 255, 127, 0", - "led.setDisplayMode": "Legt den Anzeigemodus von Wiedergabe-LEDs zwischen Schwarz und Weiß und Graustufen fest.", - "led.setDisplayMode|param|mode": "TODO", - "led.stopAnimation": "Bricht die aktuelle Animation ab und löscht andere ausstehende Animationen.", - "led.toggle": "Schaltet ein bestimmtes Pixel ein", - "led.toggleAll": "Invertiert die aktuelle LED-Anzeige", - "led.unplot": "Schalte die angegebene LED mit x-und y-Koordinaten ab (X ist horizontal, y ist vertikal). (0,0) ist oben links.", - "motors": "Blöcke, die genutzt werden, um Onboard-Motoren zu steuern", - "motors.dualMotorPower": "Steuert zwei an das Board angeschlossene Motoren. Schaltet auf Dual-Motor-Modus um!", - "motors.motorCommand": "Schicke Anhalten, Ausrollen oder Anhalten-Befehle an den Motor. Hat im Dual-Motor-Modus keinen Effekt.", - "motors.motorPower": "Schaltet den Motor bei einer bestimmten Prozentzahl der Kraft an. Schaltet um auf den Single-Motor-Modus!", - "motors.motorPower|param|power": "%percent der Kraft, die an den Motor geschickt wird. Negative Werte laufen rückwärts, z.B. 50", - "music": "Generierung von von Musik durch Pin ``P0``.", - "music.beat": "Gibt die Dauer eines Taktes in Milli-Sekunden aus", - "music.changeTempoBy": "Ändere die Geschwindigkeit um den angegebenen Betrag", - "music.changeTempoBy|param|bpm": "Die Änderung in Schlägen pro Minute auf das Tempo, z.B.: 20", - "music.noteFrequency": "Ruft die Frequenz einer Note ab.", - "music.playTone": "Spielt einen Ton für den angegebenen Zeitraum auf dem Lautsprecher ab.", - "music.playTone|param|ms": "Tondauer in Millisekunden (ms)", - "music.rest": "Ruht (spielt nichts) für eine bestimmte Zeit auf Pin ``P0``.", - "music.rest|param|ms": "Restdauer in Millisekunden (ms)", - "music.ringTone": "Spielt einen Ton durch den Lautsprecher ab.", - "music.ringTone|param|frequency": "Tonhöhe des abzuspielenden Tones in Hertz (Hz)", - "music.setTempo": "Legt die Geschwindigkeit auf den angegebenen Wert fest.", - "music.setTempo|param|bpm": "Die neue Geschwindigkeit in Schlägen pro Minute, z.B.: 120", - "music.tempo": "Gibt die Geschwindigkeit in Schlägen pro Minute aus. Die Geschwindigkeit ist Schnelligkeit (Bpm = Beats pro Minute), in der Töne abgespielt werden. Je größer der Wert, desto schneller werden die Töne abgespielt.", - "pins": "Steuere die Stromstärke über die Pins für analoge/digitale Signale, Servos, I2C,...", - "pins.analogPitch": "Gibt ein Pulsweiten Modulation (PWM)-Signal über den aktuellen Pitch-Pin. Benutze `analog set pitch pin`, um den Pitch-Pin festzulegen.", - "pins.analogReadPin": "Lese den Anschlusswert als Analog aus, d. h. als einen Wert zwischen 0 und 1023.", - "pins.analogSetPeriod": "Stellt die Pulsweite Modulation (PWM) des Analogausganges auf den angegebenen Wert in ** Mikrosekunden ** oder `1/1000` Millisekunden ein.\nWenn dieser Pin nicht als einen Analogausgang (mit `analog write pin`) konfiguriert ist, hat der Vorgang keine Auswirkungen.", - "pins.analogSetPeriod|param|micros": "Zeit in Mikrosekunden. z.B.: 20000", - "pins.analogWritePin": "Legt den Wert des Verbinders auf analog fest. Der Wert muss zwischen 0 und 1023 liegen.", - "pins.analogWritePin|param|value": "Wert, der auf den Pin geschrieben werden soll, zwischen ``0`` und ``1023`` z.B.: 1023,0", - "pins.createBuffer": "Erstellt einen Null-initialisierten Zwischenspeicher.", - "pins.createBuffer|param|size": "Anzahl der Bytes im Zwischenspeicher", - "pins.digitalReadPin": "Lese den angegebene Pin oder Verbinder als 0 oder 1", - "pins.digitalWritePin": "Setzt einen Pin- oder Verbinder-Wert auf 0 oder 1.", - "pins.digitalWritePin|param|value": "Wert, der auf dem Pin 1 gesetzt werden soll, z.B. 0", - "pins.i2cReadBuffer": "Lese `Größe`bytes aus einer 7-bit I2C-Adresse.", - "pins.i2cReadNumber": "Lese eine Nummer aus einer 7-bit I2C-Adresse.", - "pins.i2cWriteBuffer": "Schreibt Bytes in eine 7-bit I2C-Adresse.", - "pins.i2cWriteNumber": "Schreibe eine Nummer in eine 7-bit I2C-Adresse.", - "pins.map": "Definiert eine Nummer von einer Auswahl zu einer anderen um. Ein Wert ``von niedrig``wird so auf ``zu niedrig``umgeändert, ein Wert ``von hoch`` zu ``zu hoch`` etc.", - "pins.map|param|fromHigh": "die obere Grenze des aktuellen Wertebereichs, z.B.: 1023", - "pins.map|param|fromLow": "die untere Grenze des aktuellen Wertebereichs", - "pins.map|param|toHigh": "die Obergrenze des Wertezielbereichs, z.B.: 4", - "pins.map|param|toLow": "die Untergrenze des Wertezielbereichs", - "pins.map|param|value": "Wert in Bereichen zuordnen", - "pins.onPulsed": "Stellt diesen Pin als einen Digitaleingang ein und generiert Ereignisse, deren Zeitstempel die Dauer darstellt, in der der Pin entweder ``hoch``oder ``niedrig``war.", - "pins.pulseDuration": "Ruft die Dauer des letzten Impulses in Mikrosendungen ab. Diese Funktion soll von einem `onPulsed`-Handler aufgerufen werden.", - "pins.pulseIn": "Gibt die Dauer eines Pulses in Mikrosekunden an", - "pins.pulseIn|param|name": "der Pin, der den Puls misst", - "pins.pulseIn|param|value": "der Wert des Pulses (Standard hoch)", - "pins.servoSetPulse": "Konfiguriert diesen IO-Pin als einen analogen/PWM-Ausgang, stellt den Zeitraum auf 20 ms ein und setzt die Pulsweite fest, basieren auf dem angegeben Wert **Mikrosekunden** oder `1/1000`Millisekunden.", - "pins.servoSetPulse|param|micros": "Impulsdauer in Mikrosekunden, z.B.: 1500", - "pins.servoSetPulse|param|name": "PIN-Name", - "pins.servoWritePin": "Schreibt einen Wert in den Servo, der die Welle entsprechend kontroliert. Auf einem Standard-Servo wird so der Winkel der Welle (in Grad) eingestellt, sodass sich die Welle entsprechend anpasst. Auf einem kontinuierlich drehenden Servo wird dadurch die Geschwindigkeit des Servos festgelegt, wobei ``0``die volle Geschwindigkeit in eine Richtung darstellt, ``180``die volle Geschwindigkeit in die andere, und ein Wert von ``90`` einen Stillstand erzeugt.", - "pins.servoWritePin|param|value": "Winkel oder Rotationsbeschleunigung, z.B.: 180,90,0", - "pins.setPull": "Stellt die Anziehungskraft des Pins ein.", - "pins.sizeOf": "Ruft die Bytegröße im spezifierten Nummernformat ab.", - "pins.spiWrite": "Schreibe in den SPI-Slave und gebe die Antwort aus", - "pins.spiWrite|param|value": "Daten, die an den SPI-Slave geschickt werden sollen", - "serial": "Lesen und Schreiben von Daten über eine serielle Verbindung.", - "serial.delimiters": "Gibt die mit dem Begrenzer korrespondierende Zeichenfolge aus.", - "serial.onLineReceived": "Registriert ein Event, das ausgeführt wird, wenn eine Zeile empfangen wurde", - "serial.readLine": "Liest eine Textzeile aus der seriellen Schnittstelle.", - "serial.readUntil": "Liest aus eine Textzeile aus dem seriellen Anschluss und gibt den Puffer aus, wenn die Begrenzung erreicht wurde.", - "serial.readUntil|param|delimiter": "Text-Begrenzung, die die Textblöcke voneinander trennt", - "serial.redirect": "Konfiguriert dynamisch die serielle Instanz, damit sie andere Pins als USBTX und USBRX benutzt.", - "serial.writeLine": "Gibt eine Zeile des Textes an die serielle", - "serial.writeNumber": "Gibt einen numerischen Wert an die serielle", - "serial.writeString": "Sendet ein Stück Text über serielle Verbindung.", - "serial.writeValue": "Schreibt ein ``Namen: Wert`` Wertepaar auf die serielle Schnittstelle.", - "serial.writeValue|param|name": "Name des Wertestreams, z.B.: x", - "serial.writeValue|param|value": "Schreiben" + "Math.abs": "Gibt den absoluten Wert einer Zahl aus (den Wert unabhängig davon, ob er positiv oder negativ ist).\nDer absolute Wert von -5 ist zum Beispiel der gleiche wie der von 5.", + "Math.abs|param|x": "Ein numerischer Ausdruck, für den der absolute Wert benötigt wird.", + "Math.max": "Gibt den größeren von zwei vorhandenen numerischen Ausdrücken aus.", + "Math.min": "Gibt den niedrigeren von zwei vorhandenen numerischen Ausdrücken aus.", + "Math.pow": "Gibt den Wert eines grundlegenden Ausdrucks bis zu einer bestimmten Stärke aus.", + "Math.pow|param|x": "Der Basiswert des Ausdrucks.", + "Math.pow|param|y": "Der exponentielle Wert des Ausdrucks.", + "Math.random": "Gibt eine pseudozufüllige Zahl zwischen 0 und `max`aus.", + "Math.randomBoolean": "Erzeugt zufällig einen \"wahr\" oder \"falsch\"-Wert, wie bei einem Münzwurf.", + "Math.sign": "Gibt das Vorzeichen von x aus und zeigt an, ob dieses positiv, negativ oder null ist.", + "Math.sign|param|x": "Der numerische Ausdruck, der getestet werden soll", + "Math.sqrt": "Gibt die Quadratwurzel einer Zahl aus.", + "Math.sqrt|param|x": "Ein numerischer Ausdruck.", + "String.charAt": "Gibt den Buchstaben beim angegebenen Index aus.", + "String.charAt|param|index": "Der null-basierte index des gewünschten Zeichens.", + "String.charCodeAt": "Gibt den Unicode-Wert des Zeichens am vorgegebenen Ort aus.", + "String.charCodeAt|param|index": "Der null-basierte Index des gewünschten Zeichens. Wenn kein Zeichen am angegeben Index vorhanden ist, wird NaN ausgegeben.", + "String.compare": "Bestimmt die relative Reihenfolge zweier Strings (in ASCII).", + "String.compare|param|that": "Zeichenfolge, die mit der Zielzeichenfolge verglichen werden soll", + "String.concat": "Gibt eine Zeichenfolge aus, die die Verkettung von zwei oder mehr Zeichenfolgen ist.", + "String.concat|param|other": "Die Zeichenfolge, die an das Ende einer Zeichenfolge angehängt werden soll.", + "String.fromCharCode": "Erstelle Sie eine Zeichenfolge aus dem angegebenen ASCII-Zeichencode.", + "String.isEmpty": "Gibt einen Wert aus, der anzeigt, ob die Zeichenfolge leer ist", + "String.length": "Gibt die Länge einer Zeichenfolge aus.", + "String.substr": "Gibt eine Teilzeichenfolge der aktuellen Zeichenfolge aus.", + "String.substr|param|length": "Anzahl der zu extrahierenden Zeichen", + "String.substr|param|start": "Erster Zeichenindex, kann beim zählen vom Ende negativ sein, zum Beispiel: 0", + "basic": "Bietet Zugriff auf grundlegende mini-Funktionalität.", + "basic.clearScreen": "Schalte alle LEDs aus", + "basic.color": "Konvertiert den Farbnamen in eine Nummer", + "basic.forever": "Wiederholt immer wieder den Code im Hintergrund. Bei jeder Iteration ist es möglich, anderen Code auszuführen.", + "basic.pause": "Pausiere für die angegebene Zeit in Millisekunden", + "basic.pause|param|ms": "wie lange pausieren, z.B.: 100, 200, 500, 1000, 2000", + "basic.plotLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", + "basic.plotLeds|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", + "basic.rgbw": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe", + "basic.rgbw|param|blue": "Blauwert zwischen 0 und 255, z.B. 255", + "basic.rgbw|param|green": "Grünwert zwischen 0 und 255, z.B. 255", + "basic.rgbw|param|red": "Rotwert zwischen 0 und 255, z.B. 255", + "basic.rgbw|param|white": "Weißwert zwischen 0 und 255, z.B. 0", + "basic.rgb": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe", + "basic.rgb|param|blue": "Blauwert zwischen 0 und 255, z.B. 255", + "basic.rgb|param|green": "Grünwert zwischen 0 und 255, z.B. 255", + "basic.rgb|param|red": "Rotwert zwischen 0 und 255, z.B. 255", + "basic.setLedColor": "Legt die Farbe der eingebauten LED fest. Setze auf 0, um diese abzuschalten.", + "basic.showAnimation": "Zeigt eine Abfolge von LED-Anzeigen als Animation.", + "basic.showAnimation|param|interval": "Zeit in Millisekunden zwischen jedem Neuzeichnen", + "basic.showAnimation|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", + "basic.showLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", + "basic.showLeds|param|interval": "Zeit in Millisekunden, die nach der Zeichnung gewartet wird", + "basic.showLeds|param|leds": "Muster der LEDs, die ein- und ausgeschaltet werden", + "basic.showNumber": "Zeige eine Nummer auf dem Display. Wenn die Nummer auf das Display passt (es sich also um eine einstellige Zahl handelt), scrolle nicht weiter.", + "basic.showNumber|param|interval": "Scroll-Geschwindigkeit; z.B. 150, 100, 200,-100", + "basic.showString": "Zeige Text auf dem Display an, Buchstabe für Buchstabe. Wenn die Zeichenfolge in das Display passt (also wenn es sich um einen einzelnen Buchstaben handelt), scrolle nicht weiter.", + "basic.showString|param|interval": "Wie schnell die Zeichen geändert werden; z.B. 150, 100, 200,-100", + "basic.showString|param|text": "Text auf dem Bildschirm dargestellt werden soll, z.B.: \"Hallo!\"", + "control": "Laufzeit- und Event-Dienstprogramme.", + "control.assert": "Wenn die Bedingung falsch ist, zeige eine Nachricht auf der seriellen Konsole und gebe Panic-Code 098 aus", + "control.deviceName": "Erzeugt einen Namen für das Gerät, basierend auf der Seriennummer", + "control.eventSourceId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", + "control.eventTimestamp": "Holt den Zeitstempel des letzten Events auf dem Bus", + "control.eventValue": "Holt den Wert des letzten ausgeführten Events auf dem Bus", + "control.eventValueId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", + "control.inBackground": "Plant Code, der im Hintergrund wiedergegeben wird.", + "control.onEvent": "Startet ein Event auf dem Event-Bus.", + "control.panic": "Zeigt einen spezifizierten Fehlercode und hält das Programm an.", + "control.raiseEvent": "Startet ein Event auf dem Event-Bus.", + "control.raiseEvent|param|mode": "optionale Definition davon, wie ein Event nach dem Erstellen ausgeführt wird (Standard ist \"CREATE_AND_FIRE).", + "control.raiseEvent|param|src": "ID der Calliope mini-Komponente, die das Event generiert hat, zum Beispiel CALLIOPE_ID_BUTTON_A.", + "control.raiseEvent|param|value": "Komponentenspezifischer Code, der den Grund des Events angibt.", + "control.reset": "Seit den mini zurück.", + "control.runtimeWarning": "Zeige Warnmeldung im Simulator.", + "control.waitMicros": "Sperrt die aktuelle Leitung für die Dauer der angegebenen Mikrosekunden", + "control.waitMicros|param|micros": "Anzahl der Mikrosekunden, die gewartet werden soll, z.B.: 4", + "game": "Eine Einzel-LED-Sprite-Spielumgebung", + "game.addLife": "Fügt Leben zum aktuellen Spielstand hinzu", + "game.addScore": "Fügt zum aktuellen Spielstand Punkte hinzu", + "game.addScore|param|points": "Anzahl von zu verändernden Punkten, z.B.: 1", + "game.createSprite": "Erzeugt einen neuen LED-Sprite, der nach rechts zeigt.", + "game.createSprite|param|x": "horizontale Koordinate des Sprites, z.B. 2", + "game.createSprite|param|y": "vertikale Koordinate des Sprites, z.B. 2", + "game.currentTime": "Ruft die verbliebene Zeit (seit `starte Countdown`) oder die aktuelle Zeit (seit das Gerät gestartet wurde oder eine Stoppuhr aktiviert wurde) an.", + "game.gameOver": "Gibt über eine Animation ein Spiel wieder.", + "game.invalidSprite": "Ruft einen invaliden Sprite ab; wird genutzt, um Locale zu initialisieren.", + "game.isGameOver": "Zeigt an, ob das Spil die \"Game Over\"-Sequenz angezeigt hat.", + "game.isRunning": "Holt einen Wert, der anzeigt, ob das Spiel noch läuft. Gibt `falsch`aus, wenn das Spiel zu Ende ist.", + "game.level": "Ruft das aktuelle Level ab", + "game.levelUp": "Erhöht das Level und zeigt eine Nachricht an.", + "game.life": "Ruft das aktuelle Leben ab", + "game.removeLife": "Entfernt ein Leben", + "game.score": "Ruft den aktuellen Punktestand ab", + "game.setLife": "Setzt den aktuellen Wert der Leben", + "game.setScore": "Setzt den aktuellen Wert des Spielstands", + "game.showScore": "Zeigt den Spielstand auf dem Display.", + "game.startCountdown": "Startet einen Spiel-Countdown", + "game.startCountdown|param|ms": "Countdown-Dauer in Millisekunden, z.B.: 10000", + "game.startStopwatch": "Startet eine Stoppuhr.`aktuelle Zeit`gibt die vergangene Zeit an.", + "images": "Erstellung, Bearbeitung und Anzeige von LED-Bildern.", + "images.createBigImage": "Erstellt ein Bild mit zwei Einzelbildern.", + "images.createImage": "Erstellt ein Bild, das auf den LED-Bildschirm passt.", + "input": "Ereignisse und Daten der Sensoren", + "input.acceleration": "Holt den Beschleunigungswert in Milli-Erdanziehung (wenn das Board flach mit dem Display nach oben liegt, X = 0, y = 0 und Z =-1024)", + "input.buttonIsPressed": "Erhalte den Sie den Tastenstatus (gepresst oder nicht) für ``A`` und ``B``.", + "input.calibrate": "Veraltet, Kompasskalibrierung erfolgt automatisch.", + "input.compassHeading": "Holt die aktuelle Kompassrichtung in Grad.", + "input.lightLevel": "Liest die Lichtintensität auf dem LED-Bildschirm im Bereich von ``0`` (dunkel) und `` 255`` (hell).", + "input.magneticForce": "Ruft den Wert der Magnetkraft in ``Mikro-Tesla`` (``µT``) ab. Diese Funktion wird im Simulator nicht unterstützt.", + "input.onButtonPressed": "Tue etwas, wenn eine Taste (``A``, ``B`` oder ``A + B``) gedrückt wird", + "input.onGesture": "Mache etwas, wenn eine Geste gemacht wird (wie den mini zu schütteln).", + "input.onLogoDown": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach unten zeigt und das Board vertikal ausgerichtet ist.", + "input.onLogoUp": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach oben zeigt und das Board vertikal ausgerichtet ist.", + "input.onPinPressed": "Mache etwas, wenn eine Pin gehalten wird.", + "input.onPinPressed|param|body": "Code, der ausführt wird, wenn ein Pin gehalten wird", + "input.onPinReleased": "Mache etwas, wenn der Pin losgelassen wird.", + "input.onPinReleased|param|body": "Code, der ausgeführt werden soll, wenn der Pin losgelassen wird", + "input.onScreenDown": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach unten zeigt.", + "input.onScreenUp": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach oben zeigt.", + "input.onShake": "Hängt Code an, der ausgeführt wird, wenn der mini geschüttelt wird.", + "input.pinIsPressed": "Ruft den Pin-Zustand (gehalten oder nicht) ab. Die Erdung muss gehalten werden, um den Stromkreis zu schließen.", + "input.rotation": "Die Neigung und Drehung des mini Drehung auf ``X-Achse``oder ``Y-Achse``, in Grad.", + "input.runningTime": "Ruft die Anzahl der Millisekunden auf, die seit dem Einschalten vergangen sind.", + "input.setAccelerometerRange": "Legt die Stichprobenbereich des Beschleunigungssensors in Schwerkraft fest.", + "input.setAccelerometerRange|param|range": "Ein Wert, der die maximale Stärke der gemessenen Beschleunigung beschreibt", + "input.temperature": "Ruft die aktuelle Temperatur in Grad Celsius (°C) ab.", + "led": "Steuerung des LED-Bildschirms.", + "led.brightness": "Ruft die Helligkeit des Bildschirms ab, von 0 (aus) bis 255 (volle Helligkeit).", + "led.enable": "Schaltet das Display an und aus", + "led.fadeIn": "Blendet die Bildschirmanzeige ein.", + "led.fadeOut": "Blendet die Bildschirmhelligkeit aus.", + "led.plot": "Schalte die angegebene LED mit Hilfe von X- und Y-Koordinaten ein (X ist horizontal, Y ist vertikal). (0,0) ist die obere linke Ecke.", + "led.plotAll": "Schaltet alle LEDs an", + "led.plotBarGraph": "Zeigt ein vertikales Balkendiagramm an, basierend auf dem `Wert`und dem `Hoch`-Wert. Wenn `Hoch`0 ist, wird das Diagramm automatisch angepasst.", + "led.plotBarGraph|param|high": "maximalen Wert. Wenn dieser 0 ist, wird der Maximalwert automatisch angepasst, z.B.: 0", + "led.plotBarGraph|param|value": "aktueller Wert zum Darstellen", + "led.point": "Ruft den An/Aus-Status einer vorgegebenen LED mittels X-/Y-Koordinaten ab. (0,0) ist oben links.", + "led.screenshot": "Macht einen Screenshot vom LED-Bildschirm und gibt ein Bild aus.", + "led.setBrightness": "Lege die Helligkeit des Bildschirms fest, von 0 (aus) bis 255 (volle Helligkeit).", + "led.setBrightness|param|value": "Helligkeitswert, z.B.: 255, 127, 0", + "led.setDisplayMode": "Legt den Anzeigemodus von Wiedergabe-LEDs zwischen Schwarz und Weiß und Graustufen fest.", + "led.setDisplayMode|param|mode": "TODO", + "led.stopAnimation": "Bricht die aktuelle Animation ab und löscht andere ausstehende Animationen.", + "led.toggle": "Schaltet ein bestimmtes Pixel ein", + "led.toggleAll": "Invertiert die aktuelle LED-Anzeige", + "led.unplot": "Schalte die angegebene LED mit x-und y-Koordinaten ab (X ist horizontal, y ist vertikal). (0,0) ist oben links.", + "motors": "Blöcke, die genutzt werden, um Onboard-Motoren zu steuern", + "motors.dualMotorPower": "Steuert zwei an das Board angeschlossene Motoren. Schaltet auf Dual-Motor-Modus um!", + "motors.motorCommand": "Schicke Anhalten, Ausrollen oder Anhalten-Befehle an den Motor. Hat im Dual-Motor-Modus keinen Effekt.", + "motors.motorPower": "Schaltet den Motor bei einer bestimmten Prozentzahl der Kraft an. Schaltet um auf den Single-Motor-Modus!", + "motors.motorPower|param|power": "%percent der Kraft, die an den Motor geschickt wird. Negative Werte laufen rückwärts, z.B. 50", + "music": "Generierung von von Musik durch Pin ``P0``.", + "music.beat": "Gibt die Dauer eines Taktes in Milli-Sekunden aus", + "music.changeTempoBy": "Ändere die Geschwindigkeit um den angegebenen Betrag", + "music.changeTempoBy|param|bpm": "Die Änderung in Schlägen pro Minute auf das Tempo, z.B.: 20", + "music.noteFrequency": "Ruft die Frequenz einer Note ab.", + "music.playTone": "Spielt einen Ton für den angegebenen Zeitraum auf dem Lautsprecher ab.", + "music.playTone|param|ms": "Tondauer in Millisekunden (ms)", + "music.rest": "Ruht (spielt nichts) für eine bestimmte Zeit auf Pin ``P0``.", + "music.rest|param|ms": "Restdauer in Millisekunden (ms)", + "music.ringTone": "Spielt einen Ton durch den Lautsprecher ab.", + "music.ringTone|param|frequency": "Tonhöhe des abzuspielenden Tones in Hertz (Hz)", + "music.setTempo": "Legt die Geschwindigkeit auf den angegebenen Wert fest.", + "music.setTempo|param|bpm": "Die neue Geschwindigkeit in Schlägen pro Minute, z.B.: 120", + "music.tempo": "Gibt die Geschwindigkeit in Schlägen pro Minute aus. Die Geschwindigkeit ist Schnelligkeit (Bpm = Beats pro Minute), in der Töne abgespielt werden. Je größer der Wert, desto schneller werden die Töne abgespielt.", + "pins": "Steuere die Stromstärke über die Pins für analoge/digitale Signale, Servos, I2C,...", + "pins.analogPitch": "Gibt ein Pulsweiten Modulation (PWM)-Signal über den aktuellen Pitch-Pin. Benutze `analog set pitch pin`, um den Pitch-Pin festzulegen.", + "pins.analogReadPin": "Lese den Anschlusswert als Analog aus, d. h. als einen Wert zwischen 0 und 1023.", + "pins.analogSetPeriod": "Stellt die Pulsweite Modulation (PWM) des Analogausganges auf den angegebenen Wert in ** Mikrosekunden ** oder `1/1000` Millisekunden ein.\nWenn dieser Pin nicht als einen Analogausgang (mit `analog write pin`) konfiguriert ist, hat der Vorgang keine Auswirkungen.", + "pins.analogSetPeriod|param|micros": "Zeit in Mikrosekunden. z.B.: 20000", + "pins.analogWritePin": "Legt den Wert des Verbinders auf analog fest. Der Wert muss zwischen 0 und 1023 liegen.", + "pins.analogWritePin|param|value": "Wert, der auf den Pin geschrieben werden soll, zwischen ``0`` und ``1023`` z.B.: 1023,0", + "pins.createBuffer": "Erstellt einen Null-initialisierten Zwischenspeicher.", + "pins.createBuffer|param|size": "Anzahl der Bytes im Zwischenspeicher", + "pins.digitalReadPin": "Lese den angegebene Pin oder Verbinder als 0 oder 1", + "pins.digitalWritePin": "Setzt einen Pin- oder Verbinder-Wert auf 0 oder 1.", + "pins.digitalWritePin|param|value": "Wert, der auf dem Pin 1 gesetzt werden soll, z.B. 0", + "pins.i2cReadBuffer": "Lese `Größe`bytes aus einer 7-bit I2C-Adresse.", + "pins.i2cReadNumber": "Lese eine Nummer aus einer 7-bit I2C-Adresse.", + "pins.i2cWriteBuffer": "Schreibt Bytes in eine 7-bit I2C-Adresse.", + "pins.i2cWriteNumber": "Schreibe eine Nummer in eine 7-bit I2C-Adresse.", + "pins.map": "Definiert eine Nummer von einer Auswahl zu einer anderen um. Ein Wert ``von niedrig``wird so auf ``zu niedrig``umgeändert, ein Wert ``von hoch`` zu ``zu hoch`` etc.", + "pins.map|param|fromHigh": "die obere Grenze des aktuellen Wertebereichs, z.B.: 1023", + "pins.map|param|fromLow": "die untere Grenze des aktuellen Wertebereichs", + "pins.map|param|toHigh": "die Obergrenze des Wertezielbereichs, z.B.: 4", + "pins.map|param|toLow": "die Untergrenze des Wertezielbereichs", + "pins.map|param|value": "Wert in Bereichen zuordnen", + "pins.onPulsed": "Stellt diesen Pin als einen Digitaleingang ein und generiert Ereignisse, deren Zeitstempel die Dauer darstellt, in der der Pin entweder ``hoch``oder ``niedrig``war.", + "pins.pulseDuration": "Ruft die Dauer des letzten Impulses in Mikrosendungen ab. Diese Funktion soll von einem `onPulsed`-Handler aufgerufen werden.", + "pins.pulseIn": "Gibt die Dauer eines Pulses in Mikrosekunden an", + "pins.pulseIn|param|name": "der Pin, der den Puls misst", + "pins.pulseIn|param|value": "der Wert des Pulses (Standard hoch)", + "pins.servoSetPulse": "Konfiguriert diesen IO-Pin als einen analogen/PWM-Ausgang, stellt den Zeitraum auf 20 ms ein und setzt die Pulsweite fest, basieren auf dem angegeben Wert **Mikrosekunden** oder `1/1000`Millisekunden.", + "pins.servoSetPulse|param|micros": "Impulsdauer in Mikrosekunden, z.B.: 1500", + "pins.servoSetPulse|param|name": "PIN-Name", + "pins.servoWritePin": "Schreibt einen Wert in den Servo, der die Welle entsprechend kontroliert. Auf einem Standard-Servo wird so der Winkel der Welle (in Grad) eingestellt, sodass sich die Welle entsprechend anpasst. Auf einem kontinuierlich drehenden Servo wird dadurch die Geschwindigkeit des Servos festgelegt, wobei ``0``die volle Geschwindigkeit in eine Richtung darstellt, ``180``die volle Geschwindigkeit in die andere, und ein Wert von ``90`` einen Stillstand erzeugt.", + "pins.servoWritePin|param|value": "Winkel oder Rotationsbeschleunigung, z.B.: 180,90,0", + "pins.setPull": "Stellt die Anziehungskraft des Pins ein.", + "pins.sizeOf": "Ruft die Bytegröße im spezifierten Nummernformat ab.", + "pins.spiWrite": "Schreibe in den SPI-Slave und gebe die Antwort aus", + "pins.spiWrite|param|value": "Daten, die an den SPI-Slave geschickt werden sollen", + "serial": "Lesen und Schreiben von Daten über eine serielle Verbindung.", + "serial.delimiters": "Gibt die mit dem Begrenzer korrespondierende Zeichenfolge aus.", + "serial.onLineReceived": "Registriert ein Event, das ausgeführt wird, wenn eine Zeile empfangen wurde", + "serial.readLine": "Liest eine Textzeile aus der seriellen Schnittstelle.", + "serial.readUntil": "Liest aus eine Textzeile aus dem seriellen Anschluss und gibt den Puffer aus, wenn die Begrenzung erreicht wurde.", + "serial.readUntil|param|delimiter": "Text-Begrenzung, die die Textblöcke voneinander trennt", + "serial.redirect": "Konfiguriert dynamisch die serielle Instanz, damit sie andere Pins als USBTX und USBRX benutzt.", + "serial.writeLine": "Gibt eine Zeile des Textes an die serielle", + "serial.writeNumber": "Gibt einen numerischen Wert an die serielle", + "serial.writeString": "Sendet ein Stück Text über serielle Verbindung.", + "serial.writeValue": "Schreibt ein ``Namen: Wert`` Wertepaar auf die serielle Schnittstelle.", + "serial.writeValue|param|name": "Name des Wertestreams, z.B.: x", + "serial.writeValue|param|value": "Schreiben" } \ No newline at end of file diff --git a/libs/core/_locales/de/core-strings.json b/libs/core/_locales/de/core-strings.json index 37a2c6bd..5fdd3d9b 100644 --- a/libs/core/_locales/de/core-strings.json +++ b/libs/core/_locales/de/core-strings.json @@ -1,201 +1,202 @@ { - "AcceleratorRange.EightG": "Der Bewegungssensor misst Kräfte bis 8g", - "AcceleratorRange.EightG|block": "8g", - "AcceleratorRange.FourG": "Der Bewegungssensor misst Kräfte bis 4g", - "AcceleratorRange.FourG|block": "4g", - "AcceleratorRange.OneG": "Der Bewegungssensor misst Kräfte bis 1g", - "AcceleratorRange.OneG|block": "1g", - "AcceleratorRange.TwoG": "Der Bewegungssensor misst Kräfte bis 2g", - "AcceleratorRange.TwoG|block": "2g", - "BaudRate.BaudRate115200|block": "115200", - "BaudRate.BaudRate9600|block": "9600", - "BeatFraction.Eighth|block": "1/8", - "BeatFraction.Half|block": "1/2", - "BeatFraction.Quarter|block": "1/4", - "BeatFraction.Sixteenth|block": "1/16", - "BeatFraction.Whole|block": "1", - "Button.AB|block": "A+B", - "Colors.Blue|block": "Blau", - "Colors.Green|block": "Grün", - "Colors.Indigo|block": "Indigo", - "Colors.Orange|block": "Orange", - "Colors.Purple|block": "Violett", - "Colors.Red|block": "Rot", - "Colors.Violet|block": "Veilchenblau", - "Colors.White|block": "Weiß", - "Colors.Yellow|block": "Gelb", - "Delimiters.Dollar|block": "$", - "Delimiters.Hash|block": "#", - "Delimiters.NewLine|block": "Neue Zeile", - "Dimension.Strength|block": "Stärke", - "Dimension.X|block": "x", - "Dimension.Y|block": "y", - "Dimension.Z|block": "z", - "Direction.Left|block": "links", - "Direction.Right|block": "rechts", - "DisplayMode.BackAndWhite|block": "Schwarz-Weiß", - "DisplayMode.Greyscale|block": "Graustufen", - "EventCreationMode.CreateAndFire": "Calliope mini-Event wurde initialisiert, seine Event-Handler werden unverzüglich ausgeführt (nicht geeignet für die Nutzung bei Unterbrechungen!).", - "EventCreationMode.CreateOnly": "Calliope mini-Event wurde initialisiert, es wird keine weitere Verarbeitung vorgenommen.", - "Gesture.FreeFall": "Wird ausgeführt, wenn das Board fällt!", - "Gesture.FreeFall|block": "freier Fall", - "Gesture.LogoDown": "Wird ausgeführt, wenn das Logo nach unten zeigt und das Display vertikal ist.", - "Gesture.LogoDown|block": "Logo nach unten", - "Gesture.LogoUp": "Wird ausgeführt, wenn das Logo nach oben zeigt und das Display vertikal ist.", - "Gesture.LogoUp|block": "Logo oben", - "Gesture.ScreenDown": "Wird ausgeführt, wenn das Display nach oben zeigt und das Board horizontal ist.", - "Gesture.ScreenDown|block": "Display nach unten", - "Gesture.ScreenUp": "Wird ausgeführt, wenn das Display nach unten zeigt und das Board horizontal ist.", - "Gesture.ScreenUp|block": "Display nach oben", - "Gesture.Shake": "Wird erhöht, wenn geschüttelt", - "Gesture.Shake|block": "geschüttelt", - "Gesture.SixG": "Wird ausgeführt, ein 6g starker Stoß erkannt wird", - "Gesture.SixG|block": "6g", - "Gesture.ThreeG": "Wird ausgeführt, ein 3g starker Stoß erkannt wird", - "Gesture.ThreeG|block": "3g", - "Gesture.TiltLeft": "Wird ausgeführt, wenn das Display nach links zeigt", - "Gesture.TiltLeft|block": "nach links neigen", - "Gesture.TiltRight": "Wird ausgeführt, wenn das Display nach rechts zeigt", - "Gesture.TiltRight|block": "nach rechts neigen", - "LedSpriteProperty.Blink|block": "blinken", - "LedSpriteProperty.Brightness|block": "Helligkeit", - "LedSpriteProperty.Direction|block": "Richtung", - "LedSpriteProperty.X|block": "x", - "LedSpriteProperty.Y|block": "y", - "Math.randomBoolean|block": "wähle zufälligen Wahr- oder Falsch-Wert", - "Math|block": "Mathematik", - "Motor.AB|block": "A und B", - "MotorCommand.Break|block": "Pause", - "MotorCommand.Coast|block": "auslaufen", - "MotorCommand.Sleep|block": "schlafen", - "Note.CSharp3|block": "C#3", - "Note.CSharp4|block": "C#4", - "Note.CSharp5|block": "C#5", - "Note.CSharp|block": "C#", - "Note.FSharp3|block": "F#3", - "Note.FSharp4|block": "F#4", - "Note.FSharp5|block": "F#5", - "Note.FSharp|block": "F#", - "Note.GSharp3|block": "G#3", - "Note.GSharp4|block": "G#4", - "Note.GSharp5|block": "G#5", - "Note.GSharp|block": "G#", - "PinPullMode.PullDown|block": "nach unten", - "PinPullMode.PullUp|block": "nach oben", - "Rotation.Pitch|block": "Winkel", - "Rotation.Roll|block": "rollen", - "String.charAt|block": "Zeichen an Position %pos aus|%this", - "String.compare|block": "vergleiche %this| mit %that", - "String.concat|block": "hänge %this| mit %other aneinander", - "String.fromCharCode|block": "Text aus ASCII-Code %code", - "String.isEmpty|block": "%this| ist leer", - "String.length|block": "Länge von %VALUE", - "String.substr|block": "extrahiere aus %this|beginnend mit %start|%length Zeichen", - "String|block": "Zeichenfolge", - "basic.clearScreen|block": "Bildschirminhalt löschen", - "basic.color|block": "%c", - "basic.forever|block": "dauerhaft", - "basic.pause|block": "pausiere (ms) %pause", - "basic.rgbw|block": "Rot %red|Grün %green|Blau %blue|Weiß %white", - "basic.setLedColor|block": "setze LED-Farbe auf %color=color_id", - "basic.showLeds|block": "zeige LEDs", - "basic.showNumber|block": "zeige|Nummer %number", - "basic.showString|block": "zeige|Zeichenfolge %text", - "basic|block": "Grundlagen", - "control.deviceName|block": "Gerätename", - "control.deviceSerialNumber|block": "Seriennnummer", - "control.eventSourceId|block": "%id", - "control.eventTimestamp|block": "Ereigniszeitstempel", - "control.eventValueId|block": "%id", - "control.eventValue|block": "Ereigniswert", - "control.inBackground|block": "im Hintergrund ausführen", - "control.onEvent|block": "wenn Ereignis|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", - "control.raiseEvent|block": "Ereignis auslösen|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", - "control.reset|block": "zurücksetzen", - "control.waitMicros|block": "Warte (µs)%micros", - "control|block": "Steuerung", - "game.addScore|block": "Ändere Spielstand um|%points", - "game.createSprite|block": "erzeuge Sprite an Position|x: %x|y:%y", - "game.gameOver|block": "Spiel beendet", - "game.score|block": "Spielstand", - "game.startCountdown|block": "Countdown| starten (ms) %duration", - "game|block": "Spiel", - "images.createBigImage|block": "erstelle großes Bild", - "images.createImage|block": "erstelle Bild", - "images|block": "Bilder", - "input.acceleration|block": "Beschleunigung (mg) |%NAME", - "input.buttonIsPressed|block": "Button|%NAME|ist gedrückt", - "input.compassHeading|block": "Kompassausrichtung (°)", - "input.lightLevel|block": "Lichtstärke", - "input.magneticForce|block": "Magnetkraft (µT) |%NAME", - "input.onButtonPressed|block": "wenn Knopf|%NAME|gedrückt", - "input.onGesture|block": "wenn |%NAME", - "input.onPinPressed|block": "wenn Pin %NAME|gedrückt", - "input.onPinReleased|block": "wenn Pin %NAME|losgelassen", - "input.pinIsPressed|block": "Pin %NAME|ist gedrückt", - "input.rotation|block": "Rotation (°)|%NAME", - "input.runningTime|block": "Laufzeit (ms)", - "input.setAccelerometerRange|block": "setze Bewegungsmesser auf|%range", - "input.temperature|block": "Temperatur (°C)", - "input|block": "Eingabe", - "led.brightness|block": "Helligkeit", - "led.plotBarGraph|block": "zeichne Balkendiagramm von %value|bis %high", - "led.plot|block": "Zeichne|x %x|y %y", - "led.point|block": "Punkt|x %x|y %y", - "led.setBrightness|block": "setze Helligkeit auf %value", - "led.stopAnimation|block": "halte Animation an", - "led.toggle|block": "Schalte zwischen|x %x|y %y", - "led.unplot|block": "schalte Pixel|x %x|y %y aus", - "led|block": "LED", - "motors.dualMotorPower|block": "Motor %motor an|mit %percent", - "motors.motorCommand|block": "Motor %command", - "motors.motorPower|block": "Motor an mit %percent", - "motors|block": "Motoren", - "music.beat|block": "%fraction|Takt", - "music.changeTempoBy|block": "ändere die Geschwindigkeit (bpm)|%value", - "music.noteFrequency|block": "%note", - "music.playTone|block": "spiele|Note %note=device_note|für %duration=device_beat", - "music.rest|block": "pausiere (ms)|%duration=device_beat", - "music.ringTone|block": "Klingelton (Hz) |%note = Device_note", - "music.setTempo|block": "ändere Geschwindigkeit auf (bpm)|%value", - "music.tempo|block": "Geschwindkeit (bpm)", - "music|block": "Musik", - "pins.analogReadPin|block": "lese analoge Werte von|Pin %name", - "pins.analogSetPeriod|block": "setze Zeitraum für analogen|Pin %pin|auf (µs)%micros", - "pins.analogWritePin|block": "schreibe analogen|Pin %name|auf %value", - "pins.digitalReadPin|block": "lese digitale Werte von|Pin %name", - "pins.digitalWritePin|block": "schreibe digitalen Wert von|pin %name|auf %value", - "pins.i2cReadNumber|block": "lese Nummer aus I2C|auf Adresse %address|im Format %format=i2c_sizeof", - "pins.i2cWriteNumber|block": "schreibe Nummer aus I2C|auf Adresse %address|mit Wert %value|im Format %format=i2c_sizeof", - "pins.map|block": "verteile %value|von niedrig %fromLow|von hoch %fromHigh| bis niedrig %toLow|bis hoch %toHigh", - "pins.onPulsed|block": "wenn|Pin %pin|gepulst %pulse", - "pins.pulseDuration|block": "Impulsdauer (µs)", - "pins.pulseIn|block": "Impuls in (µs)|Pin %name|mit %value", - "pins.servoSetPulse|block": "setze den Puls von Servo an|Pin %value|auf (µs) %micros", - "pins.servoWritePin|block": "schreibe Servo an|Pin %name|auf %value", - "pins.setPull|block": "setze Anziehungskraft von|Pin %pin|auf %pull", - "pins.spiWrite|block": "schreibe %value in SPI", - "pins|block": "Pins", - "serial.delimiters|block": "%del", - "serial.readLine|block": "serial|read line", - "serial.readUntil|block": "serial|read until %delimiter=serial_delimiter_conv", - "serial.redirect|block": "serial|redirect to|TX %tx|RX %rx|at baud rate %rate", - "serial.writeLine|block": "serial|write line %text", - "serial.writeNumber|block": "serial|write number %value", - "serial.writeString|block": "serial|write string %text", - "serial.writeValue|block": "serial|write value %name|= %value", - "serial|block": "Konsole", - "{id:category}Basic": "Grundlagen", - "{id:category}Control": "Steuerung", - "{id:category}Game": "Spiel", - "{id:category}Images": "Bilder", - "{id:category}Input": "Eingabe", - "{id:category}Led": "LED", - "{id:category}Math": "Mathematik", - "{id:category}Motors": "Motoren", - "{id:category}Music": "Musik", - "{id:category}Pins": "Pins", - "{id:category}Serial": "Konsole", - "{id:category}String": "Zeichenfolge", - "{id:category}Text": "Text" + "AcceleratorRange.EightG": "Der Bewegungssensor misst Kräfte bis 8g", + "AcceleratorRange.EightG|block": "8g", + "AcceleratorRange.FourG": "Der Bewegungssensor misst Kräfte bis 4g", + "AcceleratorRange.FourG|block": "4g", + "AcceleratorRange.OneG": "Der Bewegungssensor misst Kräfte bis 1g", + "AcceleratorRange.OneG|block": "1g", + "AcceleratorRange.TwoG": "Der Bewegungssensor misst Kräfte bis 2g", + "AcceleratorRange.TwoG|block": "2g", + "BaudRate.BaudRate115200|block": "115200", + "BaudRate.BaudRate9600|block": "9600", + "BeatFraction.Eighth|block": "1/8", + "BeatFraction.Half|block": "1/2", + "BeatFraction.Quarter|block": "1/4", + "BeatFraction.Sixteenth|block": "1/16", + "BeatFraction.Whole|block": "1", + "Button.AB|block": "A+B", + "Colors.Blue|block": "Blau", + "Colors.Green|block": "Grün", + "Colors.Indigo|block": "Indigo", + "Colors.Orange|block": "Orange", + "Colors.Purple|block": "Violett", + "Colors.Red|block": "Rot", + "Colors.Violet|block": "Veilchenblau", + "Colors.White|block": "Weiß", + "Colors.Yellow|block": "Gelb", + "Delimiters.Dollar|block": "$", + "Delimiters.Hash|block": "#", + "Delimiters.NewLine|block": "Neue Zeile", + "Dimension.Strength|block": "Stärke", + "Dimension.X|block": "x", + "Dimension.Y|block": "y", + "Dimension.Z|block": "z", + "Direction.Left|block": "links", + "Direction.Right|block": "rechts", + "DisplayMode.BackAndWhite|block": "Schwarz-Weiß", + "DisplayMode.Greyscale|block": "Graustufen", + "EventCreationMode.CreateAndFire": "Calliope mini-Event wurde initialisiert, seine Event-Handler werden unverzüglich ausgeführt (nicht geeignet für die Nutzung bei Unterbrechungen!).", + "EventCreationMode.CreateOnly": "Calliope mini-Event wurde initialisiert, es wird keine weitere Verarbeitung vorgenommen.", + "Gesture.FreeFall": "Wird ausgeführt, wenn das Board fällt!", + "Gesture.FreeFall|block": "freier Fall", + "Gesture.LogoDown": "Wird ausgeführt, wenn das Logo nach unten zeigt und das Display vertikal ist.", + "Gesture.LogoDown|block": "Logo nach unten", + "Gesture.LogoUp": "Wird ausgeführt, wenn das Logo nach oben zeigt und das Display vertikal ist.", + "Gesture.LogoUp|block": "Logo oben", + "Gesture.ScreenDown": "Wird ausgeführt, wenn das Display nach oben zeigt und das Board horizontal ist.", + "Gesture.ScreenDown|block": "Display nach unten", + "Gesture.ScreenUp": "Wird ausgeführt, wenn das Display nach unten zeigt und das Board horizontal ist.", + "Gesture.ScreenUp|block": "Display nach oben", + "Gesture.Shake": "Wird erhöht, wenn geschüttelt", + "Gesture.Shake|block": "geschüttelt", + "Gesture.SixG": "Wird ausgeführt, ein 6g starker Stoß erkannt wird", + "Gesture.SixG|block": "6g", + "Gesture.ThreeG": "Wird ausgeführt, ein 3g starker Stoß erkannt wird", + "Gesture.ThreeG|block": "3g", + "Gesture.TiltLeft": "Wird ausgeführt, wenn das Display nach links zeigt", + "Gesture.TiltLeft|block": "nach links neigen", + "Gesture.TiltRight": "Wird ausgeführt, wenn das Display nach rechts zeigt", + "Gesture.TiltRight|block": "nach rechts neigen", + "LedSpriteProperty.Blink|block": "blinken", + "LedSpriteProperty.Brightness|block": "Helligkeit", + "LedSpriteProperty.Direction|block": "Richtung", + "LedSpriteProperty.X|block": "x", + "LedSpriteProperty.Y|block": "y", + "Math.randomBoolean|block": "wähle zufälligen Wahr- oder Falsch-Wert", + "Math|block": "Mathematik", + "Motor.AB|block": "A und B", + "MotorCommand.Break|block": "Pause", + "MotorCommand.Coast|block": "auslaufen", + "MotorCommand.Sleep|block": "schlafen", + "Note.CSharp3|block": "C#3", + "Note.CSharp4|block": "C#4", + "Note.CSharp5|block": "C#5", + "Note.CSharp|block": "C#", + "Note.FSharp3|block": "F#3", + "Note.FSharp4|block": "F#4", + "Note.FSharp5|block": "F#5", + "Note.FSharp|block": "F#", + "Note.GSharp3|block": "G#3", + "Note.GSharp4|block": "G#4", + "Note.GSharp5|block": "G#5", + "Note.GSharp|block": "G#", + "PinPullMode.PullDown|block": "nach unten", + "PinPullMode.PullUp|block": "nach oben", + "Rotation.Pitch|block": "Winkel", + "Rotation.Roll|block": "rollen", + "String.charAt|block": "Zeichen an Position %pos aus|%this", + "String.compare|block": "vergleiche %this| mit %that", + "String.concat|block": "hänge %this| mit %other aneinander", + "String.fromCharCode|block": "Text aus ASCII-Code %code", + "String.isEmpty|block": "%this| ist leer", + "String.length|block": "Länge von %VALUE", + "String.substr|block": "extrahiere aus %this|beginnend mit %start|%length Zeichen", + "String|block": "Zeichenfolge", + "basic.clearScreen|block": "Bildschirminhalt löschen", + "basic.color|block": "%c", + "basic.forever|block": "dauerhaft", + "basic.pause|block": "pausiere (ms) %pause", + "basic.rgbw|block": "Rot %red|Grün %green|Blau %blue|Weiß %white", + "basic.rgb|block": "Rot %red|Grün %green|Blau %blue", + "basic.setLedColor|block": "setze LED-Farbe auf %color=color_id", + "basic.showLeds|block": "zeige LEDs", + "basic.showNumber|block": "zeige|Nummer %number", + "basic.showString|block": "zeige|Zeichenfolge %text", + "basic|block": "Grundlagen", + "control.deviceName|block": "Gerätename", + "control.deviceSerialNumber|block": "Seriennnummer", + "control.eventSourceId|block": "%id", + "control.eventTimestamp|block": "Ereigniszeitstempel", + "control.eventValueId|block": "%id", + "control.eventValue|block": "Ereigniswert", + "control.inBackground|block": "im Hintergrund ausführen", + "control.onEvent|block": "wenn Ereignis|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", + "control.raiseEvent|block": "Ereignis auslösen|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", + "control.reset|block": "zurücksetzen", + "control.waitMicros|block": "Warte (µs)%micros", + "control|block": "Steuerung", + "game.addScore|block": "Ändere Spielstand um|%points", + "game.createSprite|block": "erzeuge Sprite an Position|x: %x|y:%y", + "game.gameOver|block": "Spiel beendet", + "game.score|block": "Spielstand", + "game.startCountdown|block": "Countdown| starten (ms) %duration", + "game|block": "Spiel", + "images.createBigImage|block": "erstelle großes Bild", + "images.createImage|block": "erstelle Bild", + "images|block": "Bilder", + "input.acceleration|block": "Beschleunigung (mg) |%NAME", + "input.buttonIsPressed|block": "Button|%NAME|ist gedrückt", + "input.compassHeading|block": "Kompassausrichtung (°)", + "input.lightLevel|block": "Lichtstärke", + "input.magneticForce|block": "Magnetkraft (µT) |%NAME", + "input.onButtonPressed|block": "wenn Knopf|%NAME|gedrückt", + "input.onGesture|block": "wenn |%NAME", + "input.onPinPressed|block": "wenn Pin %NAME|gedrückt", + "input.onPinReleased|block": "wenn Pin %NAME|losgelassen", + "input.pinIsPressed|block": "Pin %NAME|ist gedrückt", + "input.rotation|block": "Rotation (°)|%NAME", + "input.runningTime|block": "Laufzeit (ms)", + "input.setAccelerometerRange|block": "setze Bewegungsmesser auf|%range", + "input.temperature|block": "Temperatur (°C)", + "input|block": "Eingabe", + "led.brightness|block": "Helligkeit", + "led.plotBarGraph|block": "zeichne Balkendiagramm von %value|bis %high", + "led.plot|block": "Zeichne|x %x|y %y", + "led.point|block": "Punkt|x %x|y %y", + "led.setBrightness|block": "setze Helligkeit auf %value", + "led.stopAnimation|block": "halte Animation an", + "led.toggle|block": "Schalte zwischen|x %x|y %y", + "led.unplot|block": "schalte Pixel|x %x|y %y aus", + "led|block": "LED", + "motors.dualMotorPower|block": "Motor %motor an|mit %percent", + "motors.motorCommand|block": "Motor %command", + "motors.motorPower|block": "Motor an mit %percent", + "motors|block": "Motoren", + "music.beat|block": "%fraction|Takt", + "music.changeTempoBy|block": "ändere die Geschwindigkeit (bpm)|%value", + "music.noteFrequency|block": "%note", + "music.playTone|block": "spiele|Note %note=device_note|für %duration=device_beat", + "music.rest|block": "pausiere (ms)|%duration=device_beat", + "music.ringTone|block": "Klingelton (Hz) |%note = Device_note", + "music.setTempo|block": "ändere Geschwindigkeit auf (bpm)|%value", + "music.tempo|block": "Geschwindkeit (bpm)", + "music|block": "Musik", + "pins.analogReadPin|block": "lese analoge Werte von|Pin %name", + "pins.analogSetPeriod|block": "setze Zeitraum für analogen|Pin %pin|auf (µs)%micros", + "pins.analogWritePin|block": "schreibe analogen|Pin %name|auf %value", + "pins.digitalReadPin|block": "lese digitale Werte von|Pin %name", + "pins.digitalWritePin|block": "schreibe digitalen Wert von|pin %name|auf %value", + "pins.i2cReadNumber|block": "lese Nummer aus I2C|auf Adresse %address|im Format %format=i2c_sizeof", + "pins.i2cWriteNumber|block": "schreibe Nummer aus I2C|auf Adresse %address|mit Wert %value|im Format %format=i2c_sizeof", + "pins.map|block": "verteile %value|von niedrig %fromLow|von hoch %fromHigh| bis niedrig %toLow|bis hoch %toHigh", + "pins.onPulsed|block": "wenn|Pin %pin|gepulst %pulse", + "pins.pulseDuration|block": "Impulsdauer (µs)", + "pins.pulseIn|block": "Impuls in (µs)|Pin %name|mit %value", + "pins.servoSetPulse|block": "setze den Puls von Servo an|Pin %value|auf (µs) %micros", + "pins.servoWritePin|block": "schreibe Servo an|Pin %name|auf %value", + "pins.setPull|block": "setze Anziehungskraft von|Pin %pin|auf %pull", + "pins.spiWrite|block": "schreibe %value in SPI", + "pins|block": "Pins", + "serial.delimiters|block": "%del", + "serial.readLine|block": "serial|read line", + "serial.readUntil|block": "serial|read until %delimiter=serial_delimiter_conv", + "serial.redirect|block": "serial|redirect to|TX %tx|RX %rx|at baud rate %rate", + "serial.writeLine|block": "serial|write line %text", + "serial.writeNumber|block": "serial|write number %value", + "serial.writeString|block": "serial|write string %text", + "serial.writeValue|block": "serial|write value %name|= %value", + "serial|block": "Konsole", + "{id:category}Basic": "Grundlagen", + "{id:category}Control": "Steuerung", + "{id:category}Game": "Spiel", + "{id:category}Images": "Bilder", + "{id:category}Input": "Eingabe", + "{id:category}Led": "LED", + "{id:category}Math": "Mathematik", + "{id:category}Motors": "Motoren", + "{id:category}Music": "Musik", + "{id:category}Pins": "Pins", + "{id:category}Serial": "Konsole", + "{id:category}String": "Zeichenfolge", + "{id:category}Text": "Text" } \ No newline at end of file diff --git a/libs/core/basic.cpp b/libs/core/basic.cpp index ea44b4c9..de787576 100644 --- a/libs/core/basic.cpp +++ b/libs/core/basic.cpp @@ -4,14 +4,122 @@ /** * Provides access to basic micro:bit functionality. */ -//% color=#1E90FF weight=116 icon="\uf00a" namespace basic { - /** + + /** + * Draws an image on the LED screen. + * @param leds the pattern of LED to turn on/off + * @param interval time in milliseconds to pause after drawing + */ + //% help=basic/show-leds + //% weight=85 blockGap=8 + //% imageLiteral=1 async + //% blockId=device_show_leds + //% block="show leds" icon="\uf00a" + //% parts="ledmatrix" + //% group="LED matrix" + void showLeds(ImageLiteral_ leds, int interval = 400) { + uBit.display.print(MicroBitImage(imageBytes(leds)), 0, 0, 0, interval); + } + + /** + * Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll. + * @param text the text to scroll on the screen, eg: "hi!" + * @param interval how fast to shift characters; eg: 50, 100, 150, 200 + */ + //% help=basic/show-string + //% weight=100 blockGap=16 + //% block="show|string %text || in an interval of %interval ms" + //% async + //% blockId=device_print_message + //% parts="ledmatrix" + //% text.shadowOptions.toString=true + //% expandableArgumentMode="toggle" + //% interval.defl=80 + //% group="LED matrix" + void showString(String text, int interval = 80) { + if (interval <= 0) + interval = 1; + int l = text ? text->getUTF8Size() : 0; + if (l == 0) { + uBit.display.clear(); + fiber_sleep(interval * 5); + } else if (l > 1) { + uBit.display.scroll(MSTR(text), interval); + } else { + uBit.display.printChar(text->getUTF8Data()[0], interval * 5); + } + } + + /** + * Shows a sequence of LED screens as an animation. + * @param leds pattern of LEDs to turn on/off + * @param interval time in milliseconds between each redraw + */ + //% help=basic/show-animation weight=83 imageLiteral=1 async + //% parts="ledmatrix" + //% group="LED matrix" + void showAnimation(ImageLiteral_ leds, int interval = 400) { + uBit.display.animate(MicroBitImage(imageBytes(leds)), interval, 5, 0, 0); + } + + /** + * Draws an image on the LED screen. + * @param leds pattern of LEDs to turn on/off + */ + //% help=basic/plot-leds weight=80 + //% parts="ledmatrix" + //% group="LED matrix" + void plotLeds(ImageLiteral_ leds) { + MicroBitImage i(imageBytes(leds)); + uBit.display.print(i, 0, 0, 0, 0); + } + + /** + * Turn off all LEDs + */ + //% help=basic/clear-screen weight=75 + //% blockId=device_clear_display block="clear screen" + //% parts="ledmatrix" + //% group="LED matrix" + //% advanced=true + void clearScreen() { + uBit.display.image.clear(); + } + + + /** + * Repeats the code forever in the background. On each iteration, allows other codes to run. + * @param body code to execute + */ + //% help=basic/forever weight=55 blockGap=16 blockAllowMultiple=1 afterOnStart=true + //% blockId=device_forever block="forever" icon="\uf01e" + //% group="Control" + void forever(Action a) { + runForever(a); + } + + /** + * Pause for the specified time in milliseconds + * @param ms how long to pause for, eg: 100, 200, 500, 1000, 2000 + */ + //% help=basic/pause weight=50 + //% async block="pause (ms) %pause" blockGap=16 + //% blockId=device_pause icon="\uf110" + //% pause.shadow=timePicker + //% group="Control" + void pause(int ms) { + fiber_sleep(ms); + } + + + /** * Sets the color on the build-in LED. Set to 0 to turn off. */ //% blockId=device_set_led_color //% block="set led to %color=colorNumberPicker" - //% weight=50 + //% weight=10 + //% group="RGB LED" void setLedColor(int color) { if (!color) { uBit.rgb.off(); @@ -31,104 +139,12 @@ namespace basic { * Sets the color on the build-in LED. Set to 0 to turn off. */ //% blockId=device_turn_rgb_led_off block="turn build-in LED off" - //% weight=50 + //% weight=10 + //% group="RGB LED" + //% advanced=true void turnRgbLedOff() { uBit.rgb.off(); } - /** - * Draws an image on the LED screen. - * @param leds the pattern of LED to turn on/off - * @param interval time in milliseconds to pause after drawing - */ - //% help=basic/show-leds - //% weight=95 blockGap=8 - //% imageLiteral=1 async - //% blockId=device_show_leds - //% block="show leds" icon="\uf00a" - //% parts="ledmatrix" - void showLeds(ImageLiteral_ leds, int interval = 400) { - uBit.display.print(MicroBitImage(imageBytes(leds)), 0, 0, 0, interval); - } - /** - * Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll. - * @param text the text to scroll on the screen, eg: "hi!" - * @param interval how fast to shift characters; eg: 150, 100, 200, -100 - */ - //% help=basic/show-string - //% weight=87 blockGap=16 - //% block="show|string %text" - //% async - //% blockId=device_print_message - //% parts="ledmatrix" - //% text.shadowOptions.toString=true - void showString(String text, int interval = 150) { - if (interval <= 0) - interval = 1; - int l = text ? text->getUTF8Size() : 0; - if (l == 0) { - uBit.display.clear(); - fiber_sleep(interval * 5); - } else if (l > 1) { - uBit.display.scroll(MSTR(text), interval); - } else { - uBit.display.printChar(text->getUTF8Data()[0], interval * 5); - } - } - - /** - * Turn off all LEDs - */ - //% help=basic/clear-screen weight=79 - //% blockId=device_clear_display block="clear screen" - //% parts="ledmatrix" - //% advanced=true - void clearScreen() { - uBit.display.image.clear(); - } - - /** - * Shows a sequence of LED screens as an animation. - * @param leds pattern of LEDs to turn on/off - * @param interval time in milliseconds between each redraw - */ - //% help=basic/show-animation imageLiteral=1 async - //% parts="ledmatrix" - void showAnimation(ImageLiteral_ leds, int interval = 400) { - uBit.display.animate(MicroBitImage(imageBytes(leds)), interval, 5, 0, 0); - } - - /** - * Draws an image on the LED screen. - * @param leds pattern of LEDs to turn on/off - */ - //% help=basic/plot-leds weight=80 - //% parts="ledmatrix" - void plotLeds(ImageLiteral_ leds) { - MicroBitImage i(imageBytes(leds)); - uBit.display.print(i, 0, 0, 0, 0); - } - - /** - * Repeats the code forever in the background. On each iteration, allows other codes to run. - * @param body code to execute - */ - //% help=basic/forever weight=55 blockGap=16 blockAllowMultiple=1 afterOnStart=true - //% blockId=device_forever block="forever" icon="\uf01e" - void forever(Action a) { - runForever(a); - } - - /** - * Pause for the specified time in milliseconds - * @param ms how long to pause for, eg: 100, 200, 500, 1000, 2000 - */ - //% help=basic/pause weight=54 - //% async block="pause (ms) %pause" blockGap=16 - //% blockId=device_pause icon="\uf110" - //% pause.shadow=timePicker - void pause(int ms) { - fiber_sleep(ms); - } } \ No newline at end of file diff --git a/libs/core/basic.ts b/libs/core/basic.ts index d832e8fd..b7dc96ad 100644 --- a/libs/core/basic.ts +++ b/libs/core/basic.ts @@ -37,17 +37,52 @@ enum Colors { /** * Provides access to basic micro:bit functionality. */ -//% color=#54C9C9 weight=100 +//% color=#54C9C9 weight=100 icon="\uf00a" +//% groups=['LED matrix', 'Control', 'RGB LED', 'others'] namespace basic { + + /** + * Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll. + * @param interval speed of scroll; eg: 50, 100, 150, 200 + */ + //% help=basic/show-number + //% weight=95 + //% blockId=device_show_number + //% block="show|number %number || in an interval of %interval ms" blockGap=8 + //% async + //% parts="ledmatrix" + //% expandableArgumentMode="toggle" + //% interval.defl=80 + //% group="LED matrix" + export function showNumber(value: number, interval?: number) { + showString(Math.roundWithPrecision(value, 2).toString(), interval); + } /** * Converts the color name to a number */ //% blockId=color_id block="%c" shim=TD_ID + //% group="RGB LED" + //% weight=1 + //% deprecated=true export function color(c: Colors): number { return c; } + /** + * Converts red, green, blue channels into a RGB color + * @param red value of the red channel between 0 and 255. eg: 255 + * @param green value of the green channel between 0 and 255. eg: 255 + * @param blue value of the blue channel between 0 and 255. eg: 255 + */ + //% weight=3 + //% blockId="core_rgb" block="red %red|green %green|blue %blue" + //% group="RGB LED" + export function rgb(red: number, green: number, blue: number): number { + return ((red & 0xFF) << 16) | ((green & 0xFF) << 8) | (blue & 0xFF); + } + + /** * Converts red, green, blue channels into a RGB color * @param red value of the red channel between 0 and 255. eg: 255 @@ -55,31 +90,21 @@ namespace basic { * @param blue value of the blue channel between 0 and 255. eg: 255 * @param white value of the white channel between 0 and 255. eg: 0 */ - //% weight=1 - //% blockId="core_rgb" block="red %red|green %green|blue %blue|white %white" + //% weight=2 + //% blockId="core_rgbw" block="red %red|green %green|blue %blue|white %white" + //% group="RGB LED" + //% deprecated=true export function rgbw(red: number, green: number, blue: number, white:number): number { return ((white & 0xFF) << 24) | ((red & 0xFF) << 16) | ((green & 0xFF) << 8) | (blue & 0xFF); } - - /** - * Scroll a number on the screen. If the number fits on the screen (i.e. is a single digit), do not scroll. - * @param interval speed of scroll; eg: 150, 100, 200, -100 - */ - //% help=basic/show-number - //% weight=96 - //% blockId=device_show_number block="show|number %number" blockGap=8 - //% async - //% parts="ledmatrix" interval.defl=150 - export function showNumber(value: number, interval?: number) { - showString(Math.roundWithPrecision(value, 2).toString(), interval); - } + } /** * Pause for the specified time in milliseconds * @param ms how long to pause for, eg: 100, 200, 500, 1000, 2000 */ -function pause(ms: number): void { + function pause(ms: number): void { basic.pause(ms); } @@ -89,4 +114,4 @@ function pause(ms: number): void { */ function forever(a: () => void): void { basic.forever(a); -} +} \ No newline at end of file diff --git a/libs/core/blocks-test/pins.blocks b/libs/core/blocks-test/pins.blocks index 9f7dc325..9e01d01c 100644 --- a/libs/core/blocks-test/pins.blocks +++ b/libs/core/blocks-test/pins.blocks @@ -1,10 +1,10 @@ - DigitalPin.C5 + DigitalPin.P5 PulseValue.Low - AnalogPin.C6 + AnalogPin.P9 5 @@ -12,7 +12,7 @@ - AnalogPin.C6 + AnalogPin.P10 20000 @@ -20,7 +20,7 @@ - DigitalPin.C6 + DigitalPin.P6 5 @@ -28,7 +28,7 @@ - AnalogPin.C5 + AnalogPin.P13 5 @@ -36,7 +36,7 @@ - AnalogPin.C6 + AnalogPin.P8 1500 @@ -65,7 +65,7 @@ 0 - DigitalPin.C9 + DigitalPin.P9 PulseValue.Low @@ -102,7 +102,7 @@ 0 - DigitalPin.C9 + DigitalPin.P9 @@ -110,7 +110,7 @@ 0 - AnalogPin.C6 + AnalogPin.P9 @@ -120,12 +120,12 @@ - DigitalPin.C11 - DigitalPin.C9 - DigitalPin.C10 + DigitalPin.P11 + DigitalPin.P9 + DigitalPin.P10 - DigitalPin.C9 + DigitalPin.P9 PinPullMode.PullDown @@ -141,11 +141,11 @@ - DigitalPin.C8 + DigitalPin.P8 PinEventType.Touch - AnalogPin.C6 + AnalogPin.P9 diff --git a/libs/core/blocks-test/test.blocks b/libs/core/blocks-test/test.blocks index 9650c840..d1e1be1e 100644 --- a/libs/core/blocks-test/test.blocks +++ b/libs/core/blocks-test/test.blocks @@ -150,31 +150,31 @@ DisplayMode.Greyscale - AnalogPin.C4 + AnalogPin.P4 1023 - AnalogPin.C5 + AnalogPin.P13 - DigitalPin.C10 + DigitalPin.P10 0 - DigitalPin.C15 + DigitalPin.P15 - AnalogPin.C6 + AnalogPin.P9 1234 @@ -230,7 +230,7 @@ - AnalogPin.C4 + AnalogPin.P14 1500 @@ -510,7 +510,7 @@ - DigitalPin.C10 + DigitalPin.P10 PulseValue.Low @@ -575,8 +575,8 @@ DigitalPin.P9 - DigitalPin.C14 - DigitalPin.C16 + DigitalPin.P14 + DigitalPin.P16 diff --git a/libs/core/codal.cpp b/libs/core/codal.cpp index 7ddb371e..877b4032 100644 --- a/libs/core/codal.cpp +++ b/libs/core/codal.cpp @@ -8,6 +8,21 @@ PXT_ABI(__aeabi_dsub) PXT_ABI(__aeabi_ddiv) PXT_ABI(__aeabi_dmul) +#if MICROBIT_CODAL +namespace codal { +int list_fibers(Fiber **dest) { + int i = 0; + for (Fiber *fib = codal::get_fiber_list(); fib; fib = fib->next) { + if (dest) + dest[i] = fib; + i++; + } + return i; +} + +} // namespace codal +#endif + extern "C" void target_panic(int error_code) { #if !MICROBIT_CODAL // wait for serial to flush @@ -28,6 +43,7 @@ namespace pxt { MicroBit uBit; MicroBitEvent lastEvent; +bool serialLoggingDisabled; void platform_init() { microbit_seed_random(); @@ -152,7 +168,8 @@ int current_time_ms() { } static void logwriten(const char *msg, int l) { - uBit.serial.send((uint8_t *)msg, l); + if (!serialLoggingDisabled) + uBit.serial.send((uint8_t *)msg, l); } static void logwrite(const char *msg) { diff --git a/libs/core/compass.ts b/libs/core/compass.ts index ee01e1aa..7afae7cf 100644 --- a/libs/core/compass.ts +++ b/libs/core/compass.ts @@ -1,174 +1,4 @@ -let compassImages = [ - images.createImage(` - . . # . . - . . . . . - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . # . . . - . . . . . - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - # . . . . - . . . . . - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . . . - # . . . . - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . . . - . . . . . - # . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - # . . . . - . . . . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - # . . . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . # . . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . . # . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . . . # . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . . . . # - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . # - . . . . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . # - . . . . . - . . . . . - `), - images.createImage(` - . . . . . - . . . . # - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . . # - . . . . . - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . # . - . . . . . - . . # . . - . . . . . - . . . . . - `)]; - -let compassImagesDownside = [ - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . . # . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . . . # . - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . . - . . . . # - `), - images.createImage(` - . . . . . - . . . . . - . . # . . - . . . . # - . . . . . - `), - images.createImage(` - . . . . . - . . . . . - . . # . # - . . . . . - . . . . . - `), - images.createImage(` - . . . . . - . . . . # - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . . # - . . . . . - . . # . . - . . . . . - . . . . . - `), - images.createImage(` - . . . # . - . . . . . - . . # . . - . . . . . - . . . . . - `), +const compassImagesLeft = [ images.createImage(` . . # . . . . . . . @@ -226,7 +56,66 @@ let compassImagesDownside = [ . # . . . `)]; +const compassImagesRight = [ + images.createImage(` + . . . . . + . . . . . + . . # . . + . . . . . + . . # . . + `), + images.createImage(` + . . . . . + . . . . . + . . # . . + . . . . . + . . . # . + `), + images.createImage(` + . . . . . + . . . . . + . . # . . + . . . . . + . . . . # + `), + images.createImage(` + . . . . . + . . . . . + . . # . . + . . . . # + . . . . . + `), + images.createImage(` + . . . . . + . . . . . + . . # . # + . . . . . + . . . . . + `), + images.createImage(` + . . . . . + . . . . # + . . # . . + . . . . . + . . . . . + `), + images.createImage(` + . . . . # + . . . . . + . . # . . + . . . . . + . . . . . + `), + images.createImage(` + . . . # . + . . . . . + . . # . . + . . . . . + . . . . . + `)]; +const compassImages = compassImagesLeft.concat(compassImagesRight); +const compassImagesDownside = compassImagesRight.concat(compassImagesLeft); namespace basic { @@ -242,6 +131,7 @@ namespace basic { //% interval.defl=600 //% parts="ledmatrix" //% advanced=true + //% group="LED matrix" export function showCompass(interval = 600) { let i = 0 let startTime = input.runningTime() @@ -251,22 +141,15 @@ namespace basic { while ((endTime) > (input.runningTime() + refreshRate)) { i = Math.round((input.compassHeading() - 11.25) / 22.5) - if (input.isGesture(Gesture.ScreenDown)) { - compassImagesDownside[i].showImage(0, refreshRate) - } else { - compassImages[i].showImage(0, refreshRate) - } + let images = (input.isGesture(Gesture.ScreenDown)) ? compassImagesDownside : compassImages; + images[i].showImage(0, refreshRate) } rest = (endTime - input.runningTime()) if(rest > 0) { i = Math.round((input.compassHeading() - 11.25) / 22.5) - if (input.isGesture(Gesture.ScreenDown)) { - compassImagesDownside[i].showImage(0, rest) - } else { - compassImages[i].showImage(0, rest) - } - + let images = (input.isGesture(Gesture.ScreenDown)) ? compassImagesDownside : compassImages; + images[i].showImage(0, rest) } } diff --git a/libs/core/console.ts b/libs/core/console.ts index a747dcfc..882e99e0 100644 --- a/libs/core/console.ts +++ b/libs/core/console.ts @@ -1,15 +1,51 @@ /// +enum ConsolePriority { + Debug = 0, + Log = 1, + Warning = 2, + Error = 3, + Silent = 4 +} + /** * Reading and writing data to the console output. */ //% weight=12 color=#002050 icon="\uf120" //% advanced=true namespace console { - type Listener = (text: string) => void; + type Listener = (priority: ConsolePriority, text: string) => void; - //% whenUsed - let listeners: Listener[] = undefined; + /** + * Minimum priority to send messages to listeners + */ + export let minPriority = ConsolePriority.Log; + + let listeners: Listener[] + + export function add(priority: ConsolePriority, message: any) { + if (priority < minPriority) return; + let text = inspect(message); + // add new line + text += "\n"; + control.__log(priority, text) + // send to listeners + if (listeners) + for (let i = 0; i < listeners.length; ++i) + listeners[i](priority, text); + } + + export function debug(text: any) { + add(ConsolePriority.Debug, text); + } + + export function warn(text: any) { + add(ConsolePriority.Warning, text); + } + + export function error(text: any) { + add(ConsolePriority.Error, text); + } /** * Write a line of text to the console output. @@ -17,15 +53,8 @@ namespace console { */ //% weight=90 //% help=console/log blockGap=8 - export function log(text: any): void { - let stringified = inspect(text); - // pad text on the 32byte boundar - stringified += "\r\n"; - control.__log(stringified); - // send to listeners - if (listeners) - for (let i = 0; i < listeners.length; ++i) - listeners[i](stringified); + export function log(value: any): void { + add(ConsolePriority.Log, value); } /** @@ -35,21 +64,8 @@ namespace console { */ //% weight=88 blockGap=8 //% help=console/log-value - export function logValue(name: any, value: number): void { - const nameText = inspect(name); - log(nameText ? `${nameText}: ${value}` : `${value}`) - } - - /** - * Adds a listener for the log messages - * @param listener - */ - //% - export function addListener(listener: (text: string) => void) { - if (!listener) return; - if (!listeners) - listeners = []; - listeners.push(listener); + export function logValue(name: any, value: any): void { + log(name ? `${inspect(name)}: ${inspect(value)}` : `${inspect(value)}`) } /** @@ -82,13 +98,35 @@ namespace console { keys = keys.slice(0, maxElements); } - return `{${ - keys.reduce( - (prev, currKey) => prev + `\n ${currKey}: ${obj[currKey]}`, - "" - ) + (snipped ? "\n ..." : "") - } + return `{${keys.reduce( + (prev, currKey) => prev + `\n ${currKey}: ${obj[currKey]}`, + "" + ) + (snipped ? "\n ..." : "") + } }`; } } + + /** + * Adds a listener for the log messages + * @param listener + */ + //% + export function addListener(listener: (priority: ConsolePriority, text: string) => void) { + if (!listeners) listeners = [] + if (!listener || listeners.indexOf(listener) > -1) return; + listeners.push(listener); + } + + /** + * Removes a listener + * @param listener + */ + //% + export function removeListener(listener: (priority: ConsolePriority, text: string) => void) { + if (!listener || !listeners) return; + const i = listeners.indexOf(listener); + if (i > -1) + listeners.splice(i, 1); + } } \ No newline at end of file diff --git a/libs/core/control.cpp b/libs/core/control.cpp index 91f04e92..38a6525f 100644 --- a/libs/core/control.cpp +++ b/libs/core/control.cpp @@ -1,5 +1,7 @@ #include "pxt.h" +extern uint32_t __StackTop; + /** * How to create the event. */ @@ -271,8 +273,9 @@ namespace control { * Blocks the current fiber for the given microseconds * @param micros number of micro-seconds to wait. eg: 4 */ - //% help=control/wait-micros weight=29 + //% help=control/wait-micros weight=29 async //% blockId="control_wait_us" block="wait (µs)%micros" + //% micros.min=0 micros.max=6000 void waitMicros(int micros) { sleep_us(micros); } @@ -341,6 +344,15 @@ namespace control { return microbit_serial_number(); } + /** + * Derive a unique, consistent 64-bit serial number of this device from internal data. + */ + //% help=control/device-long-serial-number + //% advanced=true + Buffer deviceLongSerialNumber() { + return mkBuffer((uint8_t*)&NRF_FICR->DEVICEID[0], sizeof(uint64_t)); + } + /** * Informs simulator/runtime of a MIDI message * Internal function to support the simulator. @@ -354,8 +366,44 @@ namespace control { * */ //% - void __log(String text) { + void __log(int priority, String text) { if (NULL == text) return; pxt::sendSerial(text->getUTF8Data(), text->getUTF8Size()); } + + + +/** +* Allocates the next user notification event +*/ +//% help=control/allocate-notify-event +int allocateNotifyEvent() { +#if MICROBIT_CODAL + return ::allocateNotifyEvent(); +#else + static int notifyEv = 1024; + return ++notifyEv; +#endif +} + +/** Write a message to DMESG debugging buffer. */ +//% +void dmesg(String s) { + // this is no-op on v1 + DMESG("# %s", s->getUTF8Data()); +} + +/** Write a message and value (pointer) to DMESG debugging buffer. */ +//% +void dmesgPtr(String str, Object_ ptr) { + // this is no-op on v1 + DMESG("# %s: %p", str->getUTF8Data(), ptr); +} + +//% +uint32_t _ramSize() +{ + return (uint32_t)&__StackTop & 0x1fffffff; +} + } diff --git a/libs/core/control.ts b/libs/core/control.ts index bfe80818..0dedf95e 100644 --- a/libs/core/control.ts +++ b/libs/core/control.ts @@ -12,6 +12,11 @@ namespace control { control.inBackground(a); } + //% hidden=1 deprecated=1 + export function runInBackground(a: () => void) { + control.inBackground(a); + } + /** * Returns the value of a C++ runtime constant */ @@ -31,6 +36,50 @@ namespace control { return id; } + export const enum PXT_PANIC { + CODAL_OOM = 20, + GC_OOM = 21, + GC_TOO_BIG_ALLOCATION = 22, + CODAL_HEAP_ERROR = 30, + CODAL_NULL_DEREFERENCE = 40, + CODAL_USB_ERROR = 50, + CODAL_HARDWARE_CONFIGURATION_ERROR = 90, + + INVALID_BINARY_HEADER = 901, + OUT_OF_BOUNDS = 902, + REF_DELETED = 903, + SIZE = 904, + INVALID_VTABLE = 905, + INTERNAL_ERROR = 906, + NO_SUCH_CONFIG = 907, + NO_SUCH_PIN = 908, + INVALID_ARGUMENT = 909, + MEMORY_LIMIT_EXCEEDED = 910, + SCREEN_ERROR = 911, + MISSING_PROPERTY = 912, + INVALID_IMAGE = 913, + CALLED_FROM_ISR = 914, + HEAP_DUMPED = 915, + STACK_OVERFLOW = 916, + BLOCKING_TO_STRING = 917, + VM_ERROR = 918, + SETTINGS_CLEARED = 920, + SETTINGS_OVERLOAD = 921, + SETTINGS_SECRET_MISSING = 922, + DELETE_ON_CLASS = 923, + + CAST_FIRST = 980, + CAST_FROM_UNDEFINED = 980, + CAST_FROM_BOOLEAN = 981, + CAST_FROM_NUMBER = 982, + CAST_FROM_STRING = 983, + CAST_FROM_OBJECT = 984, + CAST_FROM_FUNCTION = 985, + CAST_FROM_NULL = 989, + + UNHANDLED_EXCEPTION = 999, + } + /** * Display specified error code and stop the program. */ @@ -61,6 +110,28 @@ namespace control { */ //% shim=pxtrt::runtimeWarning export function runtimeWarning(message: string) { } + + //% shim=pxt::programHash + export declare function programHash(): number; + + //% shim=pxt::programName + export declare function programName(): string; + + /** Returns estimated size of memory in bytes. */ + //% shim=control::_ramSize + export function ramSize() { + return 32 * 1024 * 1024; + } + + /** Runs the function and returns run time in microseconds. */ + export function benchmark(f: () => void) { + const t0 = micros() + f() + let t = micros() - t0 + if (t < 0) + t += 0x3fffffff + return t + } } /** diff --git a/libs/core/enums.d.ts b/libs/core/enums.d.ts index 3d71529d..6abb2ecb 100644 --- a/libs/core/enums.d.ts +++ b/libs/core/enums.d.ts @@ -39,6 +39,22 @@ declare namespace basic { } + declare const enum ButtonEvent { + //% blockIdentity="input.buttonEventValueId" + //% block="pressed down" + Down = 1, // MICROBIT_BUTTON_EVT_DOWN + //% blockIdentity="input.buttonEventValueId" + //% block="released up" + Up = 2, // MICROBIT_BUTTON_EVT_UP + //% blockIdentity="input.buttonEventValueId" + //% block="clicked" + Click = 3, // MICROBIT_BUTTON_EVT_CLICK + //% blockIdentity="input.buttonEventValueId" + //% block="long clicked" + LongClick = 4, // MICROBIT_BUTTON_EVT_LONG_CLICK + } + + declare const enum Dimension { //% block=x X = 0, @@ -548,5 +564,7 @@ declare namespace motors { } declare namespace serial { } +declare namespace storage { +} // Auto-generated. Do not edit. Really. diff --git a/libs/core/icons.ts b/libs/core/icons.ts index a381a921..c7bf1190 100644 --- a/libs/core/icons.ts +++ b/libs/core/icons.ts @@ -65,87 +65,6 @@ enum IconNames { //% block="meh" //% jres=icons.meh Meh, - //% block="t-shirt" - //% jres=icons.tshirt - TShirt, - //% block="roller skate" - //% jres=icons.rollerskate - Rollerskate, - //% block="duck" - //% jres=icons.duck - Duck, - //% block="house" - //% jres=icons.house - House, - //% block="tortoise" - //% jres=icons.tortoise - Tortoise, - //% block="butterfly" - //% jres=icons.butterfly - Butterfly, - //% block="stick figure" - //% jres=icons.stickfigure - StickFigure, - //% block="ghost" - //% jres=icons.ghost - Ghost, - //% block="sword" - //% jres=icons.sword - Sword, - //% block="giraffe" - //% jres=icons.giraffe - Giraffe, - //% block="skull" - //% jres=icons.skull - Skull, - //% block="umbrella" - //% jres=icons.umbrella - Umbrella, - //% block="snake" - //% jres=icons.snake - Snake, - //% block="rabbit" - //% jres=icons.rabbit - Rabbit, - //% block="cow" - //% jres=icons.cow - Cow, - //% block="quarter note" - //% jres=icons.quarternote - QuarterNote, - //% block="eigth note" - //% jres=icons.eigthnote - EigthNote, - //% block="pitchfork" - //% jres=icons.pitchfork - Pitchfork, - //% block="target" - //% jres=icons.target - Target, - //% block="triangle" - //% jres=icons.triangle - Triangle, - //% block="left triangle" - //% jres=icons.lefttriangle - LeftTriangle, - //% block="chess board" - //% jres=icons.chessboard - Chessboard, - //% block="diamond" - //% jres=icons.diamond - Diamond, - //% block="small diamond" - //% jres=icons.smalldiamond - SmallDiamond, - //% block="square" - //% jres=icons.square - Square, - //% block="small square" - //% jres=icons.smallsquare - SmallSquare, - //% block="scissors" - //% jres=icons.scissors - Scissors, //% block="arrow north" //% jres=icons.arrownorth ArrowNorth, @@ -172,132 +91,36 @@ enum IconNames { ArrowNorthWest } -enum ArrowNames { - //% blockIdentity=images.arrowNumber block="North" - North = 0, - //% blockIdentity=images.arrowNumber block="North East" - NorthEast, - //% blockIdentity=images.arrowNumber block="East" - East, - //% blockIdentity=images.arrowNumber block="South East" - SouthEast, - //% blockIdentity=images.arrowNumber block="South" - South, - //% blockIdentity=images.arrowNumber block="South West" - SouthWest, - //% blockIdentity=images.arrowNumber block="West" - West, - //% blockIdentity=images.arrowNumber block="North West" - NorthWest -} namespace basic { /** * Draws the selected icon on the LED screen * @param icon the predefined icon id - * @param interval the amount of time (milliseconds) to show the icon. Default is 600. + * @param interval the amount of time (milliseconds) to block the LED Matrix for showing the icon. Default is 200. */ //% weight=90 blockGap=8 //% blockId=basic_show_icon - //% block="show icon %i" icon="\uf00a" + //% block="show icon %i || for %interval ms" icon="\uf00a" //% parts="ledmatrix" //% help=basic/show-icon //% icon.fieldEditor="imagedropdown" //% icon.fieldOptions.columns="5" //% icon.fieldOptions.width="380" //% icon.fieldOptions.maxRows=4 - export function showIcon(icon: IconNames, interval = 600) { + //% expandableArgumentMode="toggle" + //% interval.defl=200 + //% group="LED matrix" + export function showIcon(icon: IconNames, interval = 200) { let res = images.iconImage(icon) res.showImage(0, interval) } - /** - * Draws an arrow on the LED screen - * @param direction the direction of the arrow - * @param interval the amount of time (milliseconds) to show the icon. Default is 600. - */ - //% weight=50 blockGap=8 - //% blockId=basic_show_arrow - //% block="show arrow %i=device_arrow" - //% parts="ledmatrix" - //% advanced=true - //% help=basic/show-arrow - //% deprecated=true - export function showArrow(direction: number, interval = 600) { - let res = images.arrowImage(direction) - res.showImage(0, interval) - } } namespace images { - //% weight=50 blockGap=8 - //% help=images/arrow-image - //% blockId=builtin_arrow_image block="arrow image %i" - //% deprecated=true - export function arrowImage(i: ArrowNames): Image { - switch (i) { - // compass directions - case ArrowNames.North: return images.createImage(` - . . # . . - . # # # . - # . # . # - . . # . . - . . # . .`); - case ArrowNames.NorthEast: return images.createImage(` - . . # # # - . . . # # - . . # . # - . # . . . - # . . . .`); - case ArrowNames.East: return images.createImage(` - . . # . . - . . . # . - # # # # # - . . . # . - . . # . .`); - case ArrowNames.SouthEast: return images.createImage(` - # . . . . - . # . . . - . . # . # - . . . # # - . . # # #`); - case ArrowNames.South: return images.createImage(` - . . # . . - . . # . . - # . # . # - . # # # . - . . # . .`); - case ArrowNames.SouthWest: return images.createImage(` - . . . . # - . . . # . - # . # . . - # # . . . - # # # . .`); - case ArrowNames.West: return images.createImage(` - . . # . . - . # . . . - # # # # # - . # . . . - . . # . .`); - case ArrowNames.NorthWest: return images.createImage(` - # # # . . - # # . . . - # . # . . - . . . # . - . . . . #`); - default: return images.createImage(` - . . . . . - . . . . . - . . . . . - . . . . . - . . . . . - `); - } - } - //% weight=50 blockGap=8 //% help=images/icon-image //% blockId=builtin_image block="icon image %i" @@ -387,173 +210,6 @@ namespace images { . . # . . . # . # . # . . . #`); - case IconNames.Triangle: return images.createImage(` - . . . . . - . . # . . - . # . # . - # # # # # - . . . . .`); - case IconNames.LeftTriangle: return images.createImage(` - # . . . . - # # . . . - # . # . . - # . . # . - # # # # #`); - case IconNames.Chessboard: return images.createImage(` - . # . # . - # . # . # - . # . # . - # . # . # - . # . # .`); - case IconNames.Diamond: return images.createImage(` - . . # . . - . # . # . - # . . . # - . # . # . - . . # . .`); - case IconNames.SmallDiamond: return images.createImage(` - . . . . . - . . # . . - . # . # . - . . # . . - . . . . .`); - case IconNames.Square: return images.createImage(` - # # # # # - # . . . # - # . . . # - # . . . # - # # # # #`); - case IconNames.SmallSquare: return images.createImage(` - . . . . . - . # # # . - . # . # . - . # # # . - . . . . .`); - - case IconNames.Scissors: return images.createImage(` - # # . . # - # # . # . - . . # . . - # # . # . - # # . . #`); - // The following images were designed by Abbie Brooks. - case IconNames.TShirt: return images.createImage(` - # # . # # - # # # # # - . # # # . - . # # # . - . # # # .`); - case IconNames.Rollerskate: return images.createImage(` - . . . # # - . . . # # - # # # # # - # # # # # - . # . # .`); - case IconNames.Duck: return images.createImage(` - . # # . . - # # # . . - . # # # # - . # # # . - . . . . .`); - case IconNames.House: return images.createImage(` - . . # . . - . # # # . - # # # # # - . # # # . - . # . # .`); - case IconNames.Tortoise: return images.createImage(` - . . . . . - . # # # . - # # # # # - . # . # . - . . . . .`); - case IconNames.Butterfly: return images.createImage(` - # # . # # - # # # # # - . . # . . - # # # # # - # # . # #`); - case IconNames.StickFigure: return images.createImage(` - . . # . . - # # # # # - . . # . . - . # . # . - # . . . #`); - case IconNames.Ghost: return images.createImage(` - . # # # . - # . # . # - # # # # # - # # # # # - # . # . #`); - case IconNames.Sword: return images.createImage(` - . . # . . - . . # . . - . . # . . - . # # # . - . . # . .`); - case IconNames.Giraffe: return images.createImage(` - # # . . . - . # . . . - . # . . . - . # # # . - . # . # .`); - case IconNames.Skull: return images.createImage(` - . # # # . - # . # . # - # # # # # - . # # # . - . # # # .`); - case IconNames.Umbrella: return images.createImage(` - . # # # . - # # # # # - . . # . . - # . # . . - # # # . .`); - case IconNames.Snake: return images.createImage(` - # # . . . - # # . # # - . # . # . - . # # # . - . . . . .`); - // animals - case IconNames.Rabbit: return images.createImage(` - # . # . . - # . # . . - # # # # . - # # . # . - # # # # .`); - case IconNames.Cow: return images.createImage(` - # . . . # - # . . . # - # # # # # - . # # # . - . . # . .`); - // musical notes - case IconNames.QuarterNote: return images.createImage(` - . . # . . - . . # . . - . . # . . - # # # . . - # # # . .`); - case IconNames.EigthNote: return images.createImage(` - . . # . . - . . # # . - . . # . # - # # # . . - # # # . .`); - // other icons - case IconNames.Pitchfork: return images.createImage(` - # . # . # - # . # . # - # # # # # - . . # . . - . . # . .`); - case IconNames.Target: return images.createImage(` - . . # . . - . # # # . - # # . # # - . # # # . - . . # . .`); // arrows case IconNames.ArrowNorth: return images.createImage(` . . # . . @@ -613,12 +269,4 @@ namespace images { } } - //% weight=50 blockGap=8 - //% help=images/arrow-number - //% blockId=device_arrow block="%arrow" - //% shim=TD_ID - //% deprecated=true - export function arrowNumber(arrow: ArrowNames): number { - return arrow; - } } diff --git a/libs/core/images.cpp b/libs/core/images.cpp index a1ebc96f..5e714c77 100644 --- a/libs/core/images.cpp +++ b/libs/core/images.cpp @@ -83,9 +83,11 @@ void plotImage(Image i, int xOffset = 0) { /** * Shows an frame from the image at offset ``x offset``. * @param xOffset column index to start displaying the image + * @param interval time in milliseconds to pause after drawing */ //% help=images/show-image weight=80 blockNamespace=images -//% blockId=device_show_image_offset block="show image %sprite(myImage)|at offset %offset" +//% blockId=device_show_image_offset block="show image %sprite(myImage)|at offset %offset ||and interval (ms) %interval" +//% interval.defl=400 //% blockGap=8 parts="ledmatrix" async void showImage(Image sprite, int xOffset, int interval = 400) { uBit.display.print(MicroBitImage(sprite->img), -xOffset, 0, 0, interval); @@ -109,7 +111,7 @@ void plotFrame(Image i, int xOffset) { */ //% help=images/scroll-image weight=79 async blockNamespace=images //% blockId=device_scroll_image -//% block="scroll image %sprite(myImage)|with offset %frameoffset|and interval (ms) %delay" +//% block="scroll image %sprite(myImage)|with offset %frameoffset|and interval (ms) %interval" //% blockGap=8 parts="ledmatrix" void scrollImage(Image id, int frameOffset, int interval) { MicroBitImage i(id->img); diff --git a/libs/core/input.cpp b/libs/core/input.cpp index 80df05a5..5059d8ed 100644 --- a/libs/core/input.cpp +++ b/libs/core/input.cpp @@ -7,6 +7,21 @@ enum class Button { AB = MICROBIT_ID_BUTTON_AB, }; +enum class ButtonEvent { + //% blockIdentity="input.buttonEventValueId" + //% block="pressed down" + Down = MICROBIT_BUTTON_EVT_DOWN, + //% blockIdentity="input.buttonEventValueId" + //% block="released up" + Up = MICROBIT_BUTTON_EVT_UP, + //% blockIdentity="input.buttonEventValueId" + //% block="clicked" + Click = MICROBIT_BUTTON_EVT_CLICK, + //% blockIdentity="input.buttonEventValueId" + //% block="long clicked" + LongClick = MICROBIT_BUTTON_EVT_LONG_CLICK, +}; + enum class Dimension { //% block=x X = 0, @@ -161,6 +176,21 @@ enum class MesDpadButtonInfo { //% color=#B4009E weight=99 icon="\uf192" namespace input { + /** + * Do something when a button (A, B or both A+B) receives an event. + * @param button the button + * @param body code to run when event is raised + * @param eventType event Type + */ + //% help=input/on-button-event weight=100 blockGap=16 + //% blockId=device_button_selected_event block="on button %NAME| %eventType=control_button_event_value_id" + //% parts="buttonpair" + //% group="Events" + void onButtonEvent(Button button, int eventType, Action body) { + registerWithDal((int)button, eventType, body); + } + + /** * Do something when a button (A, B or both A+B) is pushed down and released again. * @param button the button that needs to be pressed @@ -169,6 +199,8 @@ namespace input { //% help=input/on-button-pressed weight=85 blockGap=16 //% blockId=device_button_event block="on button|%NAME|pressed" //% parts="buttonpair" + //% deprecated=true + //% group="Events" void onButtonPressed(Button button, Action body) { registerWithDal((int)button, MICROBIT_BUTTON_EVT_CLICK, body); } @@ -178,10 +210,11 @@ namespace input { * @param gesture the type of gesture to track, eg: Gesture.Shake * @param body code to run when gesture is raised */ - //% help=input/on-gesture weight=84 blockGap=16 + //% help=input/on-gesture weight=98 blockGap=16 //% blockId=device_gesture_event block="on |%NAME" //% parts="accelerometer" //% NAME.fieldEditor="gestures" NAME.fieldOptions.columns=4 + //% group="Events" void onGesture(Gesture gesture, Action body) { int gi = (int)gesture; if (gi == MICROBIT_ACCELEROMETER_EVT_3G && uBit.accelerometer.getRange() < 3) @@ -195,10 +228,11 @@ namespace input { * Tests if a gesture is currently detected. * @param gesture the type of gesture to detect, eg: Gesture.Shake */ - //% help=input/is-gesture weight=10 blockGap=8 + //% help=input/is-gesture weight=86 blockGap=8 //% blockId=deviceisgesture block="is %gesture gesture" //% parts="accelerometer" //% gesture.fieldEditor="gestures" gesture.fieldOptions.columns=4 + //% group="States" bool isGesture(Gesture gesture) { // turn on acceleration uBit.accelerometer.getX(); @@ -206,13 +240,33 @@ namespace input { return uBit.accelerometer.getGesture() == gi; } + + /** + * Do something when a pin receives an touch event (while also touching the GND pin). + * @param name the pin, eg: TouchPin.P0 + * @param body the code to run when event is fired on pin + */ + //% help=input/on-pin-touch weight=99 blockGap=16 + //% blockId=device_pin_custom_event block="on pin %name| %eventType=control_button_event_value_id" + //% group="Events" + void onPinTouchEvent(TouchPin name, int eventType, Action body) { + auto pin = getPin((int)name); + if (!pin) return; + + // Forces the PIN to switch to makey-makey style detection. + pin->isTouched(); + registerWithDal((int)name, eventType, body); + } + /** * Do something when a pin is touched and released again (while also touching the GND pin). * @param name the pin that needs to be pressed, eg: TouchPin.P0 * @param body the code to run when the pin is pressed */ - //% help=input/on-pin-pressed weight=83 blockGap=32 + //% help=input/on-pin-pressed weight=83 blockGap=16 //% blockId=device_pin_event block="on pin %name|pressed" + //% group="Events" + //% deprecated=true void onPinPressed(TouchPin name, Action body) { auto pin = getPin((int)name); if (!pin) return; @@ -230,6 +284,8 @@ namespace input { //% help=input/on-pin-released weight=6 blockGap=16 //% blockId=device_pin_released block="on pin %NAME|released" //% advanced=true + //% group="Events" + //% deprecated=true void onPinReleased(TouchPin name, Action body) { auto pin = getPin((int)name); if (!pin) return; @@ -243,11 +299,12 @@ namespace input { * Get the button state (pressed or not) for ``A`` and ``B``. * @param button the button to query the request, eg: Button.A */ - //% help=input/button-is-pressed weight=60 + //% help=input/button-is-pressed weight=89 //% block="button|%NAME|is pressed" //% blockId=device_get_button2 //% icon="\uf192" blockGap=8 //% parts="buttonpair" + //% group="States" bool buttonIsPressed(Button button) { if (button == Button::A) return uBit.buttonA.isPressed(); @@ -262,9 +319,10 @@ namespace input { * Get the pin state (pressed or not). Requires to hold the ground to close the circuit. * @param name pin used to detect the touch, eg: TouchPin.P0 */ - //% help=input/pin-is-pressed weight=58 + //% help=input/pin-is-pressed weight=87 //% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" //% blockGap=8 + //% group="States" bool pinIsPressed(TouchPin name) { auto pin = getPin((int)name); return pin && pin->isTouched(); @@ -284,6 +342,7 @@ namespace input { //% help=input/acceleration weight=58 //% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8 //% parts="accelerometer" + //% group="Sensors" int acceleration(Dimension dimension) { switch (dimension) { case Dimension::X: return uBit.accelerometer.getX(); @@ -297,13 +356,37 @@ namespace input { /** * Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright. */ - //% help=input/light-level weight=57 + //% help=input/light-level weight=59 //% blockId=device_get_light_level block="light level" blockGap=8 //% parts="ledmatrix" + //% group="Sensors" int lightLevel() { return uBit.display.readLightLevel(); } + + /** + * gets the level of loudness from 0 (silent) to 255 (loud) + */ + //% blockId="soundLevel" weight=58 + //% block="soundLevel" blockGap=8 + //% group="Sensors" + int soundLevel() { + int level = uBit.io.P21.getAnalogValue(); + int min = level; + int max = level; + for (int i = 0; i < 32; i++) { + level = uBit.io.P21.getAnalogValue(); + if (level > max) { + max = level; + } else if (level < min) { + min = level; + } + } + level = floor((max - min + 0.5) / 4); //max can be up to 1023; + 0,5 to prevent division by 0, floor to get rid of decimals, divide by 4 to get a value between 0 and 255 + return level; + } + /** * Get the current compass heading in degrees. */ @@ -311,6 +394,7 @@ namespace input { //% weight=56 //% blockId=device_heading block="compass heading (°)" blockGap=8 //% parts="compass" + //% group="Sensors" int compassHeading() { return uBit.compass.heading(); } @@ -319,10 +403,11 @@ namespace input { /** * Gets the temperature in Celsius degrees (°C). */ - //% weight=55 + //% weight=57 //% help=input/temperature //% blockId=device_temperature block="temperature (°C)" blockGap=8 //% parts="thermometer" + //% group="Sensors" int temperature() { return uBit.thermometer.getTemperature(); } @@ -334,6 +419,7 @@ namespace input { //% help=input/rotation weight=52 //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 //% parts="accelerometer" advanced=true + //% group="Sensors" int rotation(Rotation kind) { switch (kind) { case Rotation::Pitch: return uBit.accelerometer.getPitch(); @@ -346,10 +432,11 @@ namespace input { * Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator. * @param dimension the x, y, or z dimension, eg: Dimension.X */ - //% help=input/magnetic-force weight=51 + //% help=input/magnetic-force weight=49 //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 //% parts="compass" //% advanced=true + //% group="Sensors" TNumber magneticForce(Dimension dimension) { if (!uBit.compass.isCalibrated()) uBit.compass.calibrate(); @@ -368,20 +455,58 @@ namespace input { */ //% help=input/calibrate-compass advanced=true //% blockId="input_compass_calibrate" block="calibrate compass" - //% weight=45 + //% weight=20 gap=8 + //% group="Configuration" void calibrateCompass() { uBit.compass.calibrate(); } + /** + * Returns 'true' when the compass is calibrated. Otherwise returns 'false'. + */ + //% help=input/calibrate-compass advanced=true + //% blockId="input_compass_is_calibrated" block="is compass calibrated" + //% weight=19 + //% group="System" + bool isCalibratedCompass() { + return (uBit.compass.isCalibrated() == 1); + } + + /** + * Obsolete, compass calibration is automatic. + */ + //% help=input/calibrate-compass advanced=true + //% blockId="input_compass_clear_calibration" block="clear calibration compass" + //% weight=17 + //% group="Configuration" + //% blockHidden=true + void clearCalibrationCompass() { + uBit.compass.clearCalibration(); + } + + /** + * Obsolete, compass calibration is automatic. + */ + //% help=input/calibrate-compass advanced=true + //% blockId="input_compass_assume_calibration" block="assume calibration compass" + //% weight=16 + //% group="Configuration" + //% blockHidden=true + void assumeCalibrationCompass() { + uBit.compass.assumeCalibration(); + } + + /** * Sets the accelerometer sample range in gravities. * @param range a value describe the maximum strengh of acceleration measured */ //% help=input/set-accelerometer-range //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" - //% weight=5 + //% weight=22 gap=8 //% parts="accelerometer" //% advanced=true + //% group="Configuration" void setAccelerometerRange(AcceleratorRange range) { uBit.accelerometer.setRange((int)range); } diff --git a/libs/core/input.ts b/libs/core/input.ts index 8f4d5529..4a6186db 100644 --- a/libs/core/input.ts +++ b/libs/core/input.ts @@ -1,69 +1,26 @@ /** * Events and data from sensors */ -//% color=#C90072 weight=99 +//% color=#C90072 weight=99 icon="\uf192" +//% groups=['Events', 'States', 'Sensors', 'Configuration', 'System', 'others'] namespace input { /** - * Attaches code to run when the screen is facing up. - * @param body TODO + * Returns the value of a C++ runtime constant */ - //% help=input/on-screen-up - export function onScreenUp(body: () => void): void { - onGesture(Gesture.ScreenUp, body); + //% weight=1 weight=19 blockId="control_button_event_value_id" block="%id" + //% shim=TD_ID advanced=true + //% blockHidden=true + export function buttonEventValueId(id: ButtonEvent): number { + return id; } - /** - * Attaches code to run when the screen is facing down. - * @param body TODO - */ - //% help=input/on-screen-down - export function onScreenDown(body: () => void): void { - onGesture(Gesture.ScreenDown, body); - } - - /** - * Attaches code to run when the device is shaken. - * @param body TODO - */ - //% deprecated=true - //% help=input/on-shake - export function onShake(body: () => void): void { - onGesture(Gesture.Shake, body); - } - - /** - * Attaches code to run when the logo is oriented upwards and the board is vertical. - * @param body TODO - */ - //% help=input/on-logo-up - export function onLogoUp(body: () => void): void { - onGesture(Gesture.LogoUp, body); - } - - /** - * Attaches code to run when the logo is oriented downwards and the board is vertical. - * @param body TODO - */ - //% help=input/on-logo-down - export function onLogoDown(body: () => void): void { - onGesture(Gesture.LogoDown, body); - } - - /** - * Obsolete, use input.calibrateCompass instead. - */ - //% weight=0 help=input/calibrate-compass - export function calibrate() { - input.calibrateCompass(); - } - - /** * Gets the number of milliseconds elapsed since power on. */ //% help=input/running-time weight=50 blockGap=8 //% blockId=device_get_running_time block="running time (ms)" //% advanced=true + //% group="System" export function runningTime() { return control.millis(); } @@ -71,33 +28,12 @@ namespace input { /** * Gets the number of microseconds elapsed since power on. */ - //% help=input/running-time-micros weight=49 + //% help=input/running-time-micros weight=49 blockGap=8 //% blockId=device_get_running_time_micros block="running time (micros)" //% advanced=true + //% group="System" export function runningTimeMicros() { return control.micros(); } - - /** - * gets the level of loudness in 0-100% - */ - //% blockId="loudness" - //% block="Loudness" - - export function soundLevel(): number { - let value = 0 - let max = 0 - let min = 1023 - for (let index = 0; index < 32; index++) { - value = pins.analogReadPin(AnalogPin.MIC) - if (value > max) { - max = value - } else if (value < min) { - min = value - } - } - value = (max - min) * 977 / 10000 - return value - } - + } diff --git a/libs/core/light.cpp b/libs/core/light.cpp index d47fbe22..ce32da49 100644 --- a/libs/core/light.cpp +++ b/libs/core/light.cpp @@ -1,7 +1,41 @@ #include "pxt.h" #if MICROBIT_CODAL -#include "neopixel.h" + +// WS2812B timings, datasheet v1 +// 0 - 0.25-0.55us hi 0.70-1.00us low +// 1 - 0.65-0.95us hi 0.30-0.60us low +// datasheet v5 +// 0 - 0.22-0.38us hi 0.58-1.00us low +// 1 - 0.58-1.00us hi 0.58-1.00us low + +// nrf52 asm timings: +// 0 0.34 - 0.78 +// 1 0.80 - 0.59 + +extern "C" void __attribute__((long_call, section(".data"))) +neopixel_send_buffer_nrf52(void *port500, uint32_t pinbr, const uint8_t *ptr, int numBytes); + +__attribute__((noinline)) static void +neopixel_send_buffer_brightness(DevicePin &pin, const uint8_t *ptr, int numBytes, uint32_t br) { + if (br > 0x100) + br = 0x100; + + pin.setDigitalValue(0); + target_wait_us(300); // initial reset + + auto port = pin.name < 32 ? NRF_P0 : NRF_P1; + + __disable_irq(); + neopixel_send_buffer_nrf52((uint8_t *)(void *)port + 0x500, (pin.name & 31) | (br << 20), ptr, + numBytes); + __enable_irq(); +} + +static void neopixel_send_buffer(DevicePin &pin, const uint8_t *ptr, int numBytes) { + neopixel_send_buffer_brightness(pin, ptr, numBytes, 0x100); +} + #else extern "C" void neopixel_send_buffer_core(DevicePin *pin, const uint8_t *ptr, int numBytes); __attribute__((noinline)) static void neopixel_send_buffer(DevicePin &pin, const uint8_t *ptr, @@ -9,19 +43,32 @@ __attribute__((noinline)) static void neopixel_send_buffer(DevicePin &pin, const // setup pin as digital pin.setDigitalValue(0); + wait_us(300); // initial reset __disable_irq(); neopixel_send_buffer_core(&pin, ptr, numBytes); __enable_irq(); } + +extern "C" void neopixel_send_buffer_brightness_core(DevicePin *pin, const uint8_t *ptr, + int numBytes, int br); +__attribute__((noinline)) static void +neopixel_send_buffer_brightness(DevicePin &pin, const uint8_t *ptr, int numBytes, int br) { + + // setup pin as digital + pin.setDigitalValue(0); + wait_us(300); // initial reset + __disable_irq(); + neopixel_send_buffer_brightness_core(&pin, ptr, numBytes, br); + __enable_irq(); +} #endif namespace light { /** -* Sends a color buffer to a light strip -**/ + * Sends a color buffer to a light strip + **/ //% advanced=true -//% void sendWS2812Buffer(Buffer buf, int pin) { if (!buf || !buf->length) return; @@ -29,12 +76,21 @@ void sendWS2812Buffer(Buffer buf, int pin) { } /** -* Sets the light mode of a pin -**/ + * Sends a color buffer to a light strip + **/ //% advanced=true -//% -void setMode(int pin, int mode) { +void sendWS2812BufferWithBrightness(Buffer buf, int pin, int brightness) { + if (!buf || !buf->length) + return; + neopixel_send_buffer_brightness(*pxt::getPin(pin), buf->data, buf->length, brightness); } +/** + * Sets the light mode of a pin + **/ +//% advanced=true +//% +void setMode(int pin, int mode) {} + } // namespace light diff --git a/libs/core/loops.ts b/libs/core/loops.ts new file mode 100644 index 00000000..6e58a4e5 --- /dev/null +++ b/libs/core/loops.ts @@ -0,0 +1,38 @@ +namespace loops { + /** + * Repeats the code forever in the background. + * After each iteration, allows other codes to run for a set duration + * so that it runs on a timer + * @param interval time (in ms) to wait between each iteration of the action. + * @param body code to execute + */ + //% weight=45 blockAllowMultiple=1 + //% interval.shadow=longTimePicker + //% afterOnStart=true help=loops/every-interval + //% blockId=every_interval block="every $interval ms" + export function everyInterval(interval: number, a: () => void): void { + control.runInParallel(() => { + let start = 0; + let now = 0; + while (true) { + start = control.millis(); + a(); + now = control.millis(); + pause(Math.max(0, interval - (now - start))); + } + }); + } + + /** + * Get the time field editor + * @param ms time duration in milliseconds, eg: 500, 1000 + */ + //% blockId=longTimePicker block="%ms" + //% blockHidden=true shim=TD_ID + //% colorSecondary="#FFFFFF" + //% ms.fieldEditor="numberdropdown" ms.fieldOptions.decompileLiterals=true + //% ms.fieldOptions.data='[["100 ms", 100], ["200 ms", 200], ["500 ms", 500], ["1 second", 1000], ["1 minute", 60000], ["1 hour", 3600000]]' + export function __timePicker(ms: number): number { + return ms; + } +} \ No newline at end of file diff --git a/libs/core/microphone.ts b/libs/core/microphone.ts new file mode 100644 index 00000000..0305e535 --- /dev/null +++ b/libs/core/microphone.ts @@ -0,0 +1,27 @@ +/** + * Events and data from sensors + */ +//% color=#C90072 weight=99 +namespace input { + /** + * gets the level of loudness from 0 (silent) to 255 (loud) + */ + //% blockId="loudness" + //% block="Loudness" + //% deprecated=true + export function loudness(): number { + let value = 0 + let max = pins.analogReadPin(AnalogPin.MIC) + let min = max + for (let index = 0; index < 32; index++) { + value = pins.analogReadPin(AnalogPin.MIC) + if (value > max) { + max = value + } else if (value < min) { + min = value + } + } + value = Math.floor((max - min) / 4) + return value + } +} diff --git a/libs/core/motors.cpp b/libs/core/motors.cpp index 06811ab9..560f1d1e 100644 --- a/libs/core/motors.cpp +++ b/libs/core/motors.cpp @@ -27,7 +27,8 @@ namespace motors { */ //% blockId=motor_on block="motor on at %percent \\%" //% parts=dcmotor weight=90 blockGap=8 - //% percent.shadow="speedPicker" + //% percent.shadow="speedPicker" + //% power.defl=100 void motorPower(int power) { uBit.soundmotor.motorOn(power); } @@ -51,20 +52,26 @@ namespace motors { //% blockId=block_dual_motor block="motor %motor|at %percent \\%" //% percent.shadow="speedPicker" //% weight=80 + //% duty_percent.defl=100 void dualMotorPower(Motor motor, int duty_percent) { switch(motor) { - case Motor::A: if (duty_percent <= 0) uBit.soundmotor.motorAOff(); - else uBit.soundmotor.motorAOn(duty_percent); break; - case Motor::B: if (duty_percent <= 0) uBit.soundmotor.motorBOff(); - else uBit.soundmotor.motorBOn(duty_percent); break; - case Motor::AB: if (duty_percent <= 0) { - uBit.soundmotor.motorAOff(); - uBit.soundmotor.motorBOff(); - } else { - uBit.soundmotor.motorAOn(duty_percent); - uBit.soundmotor.motorBOn(duty_percent); - } - break; + case Motor::A: + if (duty_percent <= 0) uBit.soundmotor.motorAOff(); + else uBit.soundmotor.motorAOn(duty_percent); + break; + case Motor::B: + if (duty_percent <= 0) uBit.soundmotor.motorBOff(); + else uBit.soundmotor.motorBOn(duty_percent); + break; + case Motor::AB: + if (duty_percent <= 0) { + uBit.soundmotor.motorAOff(); + uBit.soundmotor.motorBOff(); + } else { + uBit.soundmotor.motorAOn(duty_percent); + uBit.soundmotor.motorBOn(duty_percent); + } + break; } } } \ No newline at end of file diff --git a/libs/core/music.cpp b/libs/core/music.cpp index b63e8cd8..47df9957 100644 --- a/libs/core/music.cpp +++ b/libs/core/music.cpp @@ -1,5 +1,10 @@ #include "pxt.h" +namespace pins { + void analogSetPitchVolume(int volume); + int analogPitchVolume(); +} + namespace music { /** * Plays a tone through ``speaker`` for the given duration. @@ -18,4 +23,41 @@ namespace music { } + + /** + * Set the default output volume of the sound synthesizer. + * @param volume the volume 0...255 + */ + //% blockId=synth_set_volume block="set volume %volume" + //% volume.min=0 volume.max=255 + //% volume.defl=127 + //% help=music/set-volume + //% weight=70 + //% group="Volume" + //% blockGap=8 + //% blockHidden=true + void setVolume(int volume) { + #if MICROBIT_CODAL + uBit.audio.setVolume(max(0, min(255, volume))); + #else + pins::analogSetPitchVolume(volume); + #endif + } + + /** + * Returns the current output volume of the sound synthesizer. + */ + //% blockId=synth_get_volume block="volume" + //% help=music/volume + //% weight=69 + //% group="Volume" + //% blockGap=8 + //% blockHidden=true + int volume() { + #if MICROBIT_CODAL + return uBit.audio.getVolume(); + #else + return pins::analogPitchVolume(); + #endif + } } \ No newline at end of file diff --git a/libs/core/music.ts b/libs/core/music.ts index fb4adffa..9a7defce 100644 --- a/libs/core/music.ts +++ b/libs/core/music.ts @@ -223,7 +223,7 @@ namespace music { //% help=music/rest weight=79 //% blockId=device_rest block="rest(ms)|%duration=device_beat" //% parts="speaker" - //% group="Tone" + //% group="Silence" export function rest(ms: number): void { playTone(0, ms); } @@ -233,7 +233,7 @@ namespace music { * Gets the frequency of a note. * @param name the note name */ - //% weight=50 help=music/note-frequency + //% weight=50 //% blockId=device_note block="%name" //% shim=TD_ID color="#FFFFFF" colorSecondary="#FFFFFF" //% name.fieldEditor="note" name.defl="262" @@ -241,6 +241,7 @@ namespace music { //% useEnumVal=1 //% group="Tone" //% blockGap=8 + //% blockHidden=true export function noteFrequency(name: Note): number { return name; } @@ -289,6 +290,7 @@ namespace music { //% help=music/change-tempo-by weight=39 //% blockId=device_change_tempo block="change tempo by (bpm)|%value" blockGap=8 //% group="Tempo" + //% weight=100 export function changeTempoBy(bpm: number): void { init(); setTempo(beatsPerMinute + bpm); @@ -302,6 +304,7 @@ namespace music { //% blockId=device_set_tempo block="set tempo to (bpm)|%value" //% bpm.min=4 bpm.max=400 //% group="Tempo" + //% weight=99 export function setTempo(bpm: number): void { init(); if (bpm > 0) { @@ -330,6 +333,7 @@ namespace music { //% blockId=melody_on_event block="music on %value" //% help=music/on-event weight=59 blockGap=32 //% group="Melody Advanced" + //% blockHidden=true export function onEvent(value: MusicEvent, handler: () => void) { control.onEvent(MICROBIT_MELODY_ID, value, handler); } @@ -354,6 +358,7 @@ namespace music { //% blockId=device_start_melody block="start melody %melody=device_builtin_melody| repeating %options" //% parts="speaker" //% group="Melody Advanced" + //% blockHidden=true export function startMelody(melodyArray: string[], options: MelodyOptions = 1) { init(); if (currentMelody != undefined) { @@ -453,7 +458,7 @@ namespace music { //% help=music/stop-melody weight=59 blockGap=16 //% blockId=device_stop_melody block="stop melody $options" //% parts="speaker" - //% group="Melody Advanced" + //% group="Silence" export function stopMelody(options: MelodyStopOptions) { if (options & MelodyStopOptions.Background) startMelody([], MelodyOptions.OnceInBackground); @@ -461,6 +466,19 @@ namespace music { startMelody([], MelodyOptions.Once); } + /** + * Stop all sounds and melodies currently playing. + */ + //% help=music/stop-all-sounds + //% blockId=music_stop_all_sounds block="stop all sounds" + //% weight=10 + //% group="Silence" + export function stopAllSounds() { + rest(0); + stopMelody(MelodyStopOptions.All); + } + + /** * Sets a custom playTone function for playing melodies */ @@ -471,35 +489,6 @@ namespace music { _playTone = f; } - /** - * Set the default output volume of the sound synthesizer. - * @param volume the volume 0...255 - */ - //% blockId=synth_set_volume block="set volume %volume" - //% parts="speaker" - //% volume.min=0 volume.max=255 - //% volume.defl=127 - //% help=music/set-volume - //% weight=70 - //% group="Volume" - //% deprecated=true - export function setVolume(volume: number): void { - pins.analogSetPitchVolume(volume); - } - - /** - * Returns the current output volume of the sound synthesizer. - */ - //% blockId=synth_get_volume block="volume" - //% parts="speaker" - //% help=music/volume - //% weight=69 - //% group="Volume" - //% deprecated=true - export function volume(): number { - return pins.analogPitchVolume(); - } - function playNextNote(melody: Melody): void { // cache elements let currNote = melody.nextNote(); diff --git a/libs/core/pins.cpp b/libs/core/pins.cpp index fb773036..c092521d 100644 --- a/libs/core/pins.cpp +++ b/libs/core/pins.cpp @@ -1,5 +1,12 @@ #include "pxt.h" +#if MICROBIT_CODAL +#include "Pin.h" +#define PinCompat codal::Pin +#else +#define PinCompat MicroBitPin +#endif + enum class DigitalPin { P0 = MICROBIT_ID_IO_P12, // edge connector 0 P1 = MICROBIT_ID_IO_P0, // edge connector 1 @@ -217,6 +224,17 @@ namespace pins { MicroBitPin* pin = getPin((int)name); if (!pin) return 0; +#if MICROBIT_CODAL + // set polarity + pin->setPolarity(PulseValue::High == value ? 1 : 0); + // record pulse + int period = pin->getPulseUs(maxDuration); + // timeout + if (DEVICE_CANCELLED == period) + return 0; + // success! + return period; +#else int pulse = value == PulseValue::High ? 1 : 0; uint64_t tick = system_timer_current_time_us(); uint64_t maxd = (uint64_t)maxDuration; @@ -232,6 +250,7 @@ namespace pins { } uint64_t end = system_timer_current_time_us(); return end - start; +#endif } // TODO FIX THIS IN THE DAL! @@ -257,7 +276,6 @@ namespace pins { //% name.fieldEditor="gridpicker" name.fieldOptions.columns=4 //% name.fieldOptions.tooltips="false" name.fieldOptions.width="250" void servoWritePin(AnalogPin name, int value) { - fixMotorIssue(name); PINOP(setServoValue(value)); } @@ -284,9 +302,10 @@ namespace pins { } - MicroBitPin* pitchPin = NULL; - MicroBitPin* pitchPin2 = NULL; + PinCompat* pitchPin = NULL; + PinCompat* pitchPin2 = NULL; uint8_t pitchVolume = 0xff; + bool analogTonePlaying = false; /** * Set the pin used when using analog pitch or music. @@ -296,12 +315,13 @@ namespace pins { //% help=pins/analog-set-pitch-pin weight=3 advanced=true //% name.fieldEditor="gridpicker" name.fieldOptions.columns=4 //% name.fieldOptions.tooltips="false" name.fieldOptions.width="250" + //% blockHidden=true void analogSetPitchPin(AnalogPin name) { pitchPin = getPin((int)name); pitchPin2 = NULL; } - void pinAnalogSetPitch(MicroBitPin* pin, int frequency, int ms) { + void pinAnalogSetPitch(PinCompat* pin, int frequency, int ms) { if (frequency <= 0 || pitchVolume == 0) { pin->setAnalogValue(0); } else { @@ -318,8 +338,15 @@ namespace pins { //% blockId=device_analog_set_pitch_volume block="analog set pitch volume $volume" //% help=pins/analog-set-pitch-volume weight=3 advanced=true //% volume.min=0 volume.max=255 + //% blockHidden=true void analogSetPitchVolume(int volume) { pitchVolume = max(0, min(0xff, volume)); + + if (analogTonePlaying) { + int v = pitchVolume == 0 ? 0 : 1 << (pitchVolume >> 5); + if (NULL != pitchPin) + pitchPin->setAnalogValue(v); + } } /** @@ -327,6 +354,7 @@ namespace pins { */ //% blockId=device_analog_pitch_volume block="analog pitch volume" //% help=pins/analog-pitch-volume weight=3 advanced=true + //% blockHidden=true int analogPitchVolume() { return pitchVolume; } @@ -338,6 +366,7 @@ namespace pins { */ //% blockId=device_analog_pitch block="analog pitch %frequency|for (ms) %ms" //% help=pins/analog-pitch weight=4 async advanced=true blockGap=8 + //% blockHidden=true void analogPitch(int frequency, int ms) { // init pins if needed if (NULL == pitchPin) { @@ -347,6 +376,7 @@ namespace pins { #endif } // set pitch + analogTonePlaying = true; if (NULL != pitchPin) pinAnalogSetPitch(pitchPin, frequency, ms); if (NULL != pitchPin2) @@ -356,9 +386,9 @@ namespace pins { fiber_sleep(ms); if (NULL != pitchPin) pitchPin->setAnalogValue(0); - if (NULL != pitchPin2) - pitchPin2->setAnalogValue(0); - fiber_sleep(5); + analogTonePlaying = false; + // causes issues with v2 DMA. + // fiber_sleep(5); } } @@ -373,7 +403,7 @@ namespace pins { //% pin.fieldEditor="gridpicker" pin.fieldOptions.columns=4 //% pin.fieldOptions.tooltips="false" pin.fieldOptions.width="250" void setPull(DigitalPin name, PinPullMode pull) { -#if MICROBIT_CODAL +#if MICROBIT_CODAL codal::PullMode m = pull == PinPullMode::PullDown ? codal::PullMode::Down : pull == PinPullMode::PullUp ? codal::PullMode::Up @@ -412,6 +442,21 @@ namespace pins { return mkBuffer(NULL, size); } + + /** + * Set the matrix width for Neopixel strip (already assigned to a pin). + * Should be used in conjunction with `set matrix width` from Neopixel package. + * @param name pin of Neopixel strip, eg: DigitalPin.P1 + * @param value width of matrix (at least ``2``) + */ + //% help=pins/neopixel-matrix-width weight=3 advanced=true + //% blockId=pin_neopixel_matrix_width block="neopixel matrix width|pin %pin %width" blockGap=8 + //% pin.fieldEditor="gridpicker" pin.fieldOptions.columns=4 + //% pin.fieldOptions.tooltips="false" pin.fieldOptions.width="250" + //% width.defl=5 width.min=2 + //% blockHidden=true + void setMatrixWidth(DigitalPin pin, int width) {} + #if MICROBIT_CODAL #define BUFFER_TYPE uint8_t* #else @@ -500,7 +545,7 @@ namespace pins { //% blockId=spi_format block="spi format|bits %bits|mode %mode" void spiFormat(int bits, int mode) { auto p = allocSPI(); - p->format(bits, mode); + p->format(bits, mode); } #if MICROBIT_CODAL @@ -534,10 +579,26 @@ namespace pins { */ //% help=pins/push-button advanced=true void pushButton(DigitalPin pin) { + new MicroBitButton((PinName)getPin((int)(pin))->name, (int)pin, MICROBIT_BUTTON_ALL_EVENTS, PinMode::PullUp); + } + + /** + * Set the pin used when producing sounds and melodies. Default is P0. + * @param name pin to modulate pitch from + */ + //% blockId=pin_set_audio_pin block="set audio pin $name" + //% help=pins/set-audio-pin weight=3 + //% name.fieldEditor="gridpicker" name.fieldOptions.columns=4 + //% name.fieldOptions.tooltips="false" name.fieldOptions.width="250" + //% weight=1 + //% blockHidden=true + void setAudioPin(AnalogPin name) { #if MICROBIT_CODAL - new MicroBitButton(PIN_ARG(pin), (int)pin, DEVICE_BUTTON_ALL_EVENTS, ACTIVE_LOW, codal::PullMode::Up); + uBit.audio.setPin(*getPin((int)name)); + uBit.audio.setPinEnabled(true); #else - new MicroBitButton(PIN_ARG(pin), PinMode::PullUp); + // v1 behavior + pins::analogSetPitchPin(name); #endif } -} +} \ No newline at end of file diff --git a/libs/core/pxt.h b/libs/core/pxt.h index c2627984..5021579d 100644 --- a/libs/core/pxt.h +++ b/libs/core/pxt.h @@ -45,6 +45,7 @@ typedef RefMImage *Image; extern MicroBit uBit; extern MicroBitEvent lastEvent; +extern bool serialLoggingDisabled; MicroBitPin *getPin(int id); diff --git a/libs/core/pxt.json b/libs/core/pxt.json index 1ccbcbc7..dfb6eb21 100644 --- a/libs/core/pxt.json +++ b/libs/core/pxt.json @@ -33,12 +33,16 @@ "gestures.jres", "control.ts", "control.cpp", + "controlgc.cpp", + "perfcounters.ts", "interval.ts", "gcstats.ts", "console.ts", "game.ts", "led.cpp", "led.ts", + "loops.ts", + "microphone.ts", "motors.cpp", "music.cpp", "music.ts", @@ -49,12 +53,19 @@ "serial.ts", "buffer.cpp", "buffer.ts", + "json.ts", + "poll.ts", + "controlmessage.ts", "pxtparts.json", "advmath.cpp", "trig.cpp", "fixed.ts", "templates.ts", "sendbuffer.s", + "sendbuffernrf52.s", + "sendbufferbrightness.s", + "storage.cpp", + "storage.ts", "light.cpp", "compass.ts", "parts/speaker.svg", @@ -94,65 +105,65 @@ "yotta": { "config": { "microbit-dal": { - "fiber_user_data": 1 + "fiber_user_data": 1, + "pxt": 1 } }, "optionalConfig": { "microbit-dal": { "bluetooth": { + "enabled": 1, + "pairing_mode": 1, "private_addressing": 0, + "open": 1, + "security_level": null, + "whitelist": 1, "advertising_timeout": 0, "tx_power": 6, "dfu_service": 1, - "event_service": 1, - "device_info_service": 1, - "eddystone_url": 1, - "eddystone_uid": 1, - "open": 0, - "pairing_mode": 1, - "whitelist": 1, - "security_level": "SECURITY_MODE_ENCRYPTION_NO_MITM", - "partial_flashing": 1 - } - } + "event_service": 0, + "device_info_service": 0 + }, + "stack_size": 2048, + "gatt_table_size": "0x600", + "panic_on_heap_full": 0, + "debug": 0, + "heap_debug": 0, + "sram_end": "0x20008000" + }, + "RAM_SIZE": "\"32K\"" }, "userConfigs": [ { - "description": "No Pairing Required: Anyone can connect via Bluetooth.", + "description": "Limit bluetooth access to BLE mode (A + B + Reset)", "config": { "microbit-dal": { "bluetooth": { - "open": 1, - "whitelist": 0, - "security_level": null + "enabled": 0 } } } }, { - "description": "JustWorks pairing (default): Pairing is automatic once the pairing is initiated.", + "description": "32K RAM (mini v2 and some v1.3)", "config": { "microbit-dal": { - "bluetooth": { - "open": 0, - "whitelist": 1, - "security_level": "SECURITY_MODE_ENCRYPTION_NO_MITM" - } - } + "stack_size": 2048, + "sram_end": "0x20008000" + }, + "RAM_SIZE": "\"32K\"" } }, { - "description": "Passkey pairing: Pairing requires 6 digit key to pair.", + "description": "16K RAM (mini v1.3 and below)", "config": { "microbit-dal": { - "bluetooth": { - "open": 0, - "whitelist": 1, - "security_level": "SECURITY_MODE_ENCRYPTION_WITH_MITM" - } - } + "stack_size": 1280, + "sram_end": "0x20004000" + }, + "RAM_SIZE": "\"16K\"" } } ] } -} +} \ No newline at end of file diff --git a/libs/core/pxtcore.h b/libs/core/pxtcore.h index 3f7047f4..14af8637 100644 --- a/libs/core/pxtcore.h +++ b/libs/core/pxtcore.h @@ -16,14 +16,13 @@ void debuglog(const char *format, ...); #define GC_MAX_ALLOC_SIZE 9000 -#define GC_BLOCK_SIZE 256 #define NON_GC_HEAP_RESERVATION 1024 - #ifdef CODAL_CONFIG_H #define MICROBIT_CODAL 1 #else #define MICROBIT_CODAL 0 +#define GC_BLOCK_SIZE 256 #endif #if !MICROBIT_CODAL diff --git a/libs/core/sendbufferbrightness.s b/libs/core/sendbufferbrightness.s new file mode 100644 index 00000000..07300194 --- /dev/null +++ b/libs/core/sendbufferbrightness.s @@ -0,0 +1,53 @@ +.syntax unified +.section .text.neopixel_send_buffer_brightness_core +.global neopixel_send_buffer_brightness_core + +neopixel_send_buffer_brightness_core: + + push {r4,r5,r6,r7,lr} + + mov r4, r1 // ptr + mov r5, r2 // len + mov r7, r3 // get the brightness figure + + ldr r0, [r0, #8] // get mbed DigitalOut from MicroBitPin + ldr r1, [r0, #4] // r1-mask for this pin + ldr r2, [r0, #16] // r2-clraddr + ldr r3, [r0, #12] // r3-setaddr + + b .start + +.nextbit: // C0 + str r1, [r3, #0] // pin := hi C2 + tst r6, r0 // C3 + bne .islate // C4 + str r1, [r2, #0] // pin := lo C6 +.islate: + lsrs r6, r6, #1 // r6 >>= 1 C7 + bne .justbit // C8 + + // not just a bit - need new byte + adds r4, #1 // r4++ C9 + subs r5, #1 // r5-- C10 + bcc .stop // if (r5<0) goto .stop C11 +.start: + movs r6, #0x80 // reset mask C12 + ldrb r0, [r4, #0] // r0 := *r4 + muls r0, r7 // hope we have single cycle multiplier... + lsrs r0, r0, #8 // r0 >>= 8 following multiplication + +.common: // C13 + str r1, [r2, #0] // pin := lo C15 + nop // twiddle + nop // twaddle + + b .nextbit // C20 + +.justbit: // C10 + // no nops, branch taken is already 3 cycles + b .common // C13 + +.stop: + str r1, [r2, #0] // pin := lo + + pop {r4,r5,r6,r7,pc} \ No newline at end of file diff --git a/libs/core/sendbuffernrf52.s b/libs/core/sendbuffernrf52.s new file mode 100644 index 00000000..dc4e3906 --- /dev/null +++ b/libs/core/sendbuffernrf52.s @@ -0,0 +1,82 @@ +.syntax unified + +#ifndef NRF51 + +// put it in RAM +.section .data.neopixel_send_buffer_nrf52 +.global neopixel_send_buffer_nrf52 +.thumb +.type neopixel_send_buffer_nrf52, %function + + + + +neopixel_send_buffer_nrf52: + push {r4,r5,r6,r7,lr} + + lsrs r7, r1, #20 // r7 - brightness + ands r1, #0xff + movs r4, #1 + lsls r1, r4, r1 // r1 - mask + + mov r4, r2 // ptr + mov r5, r3 // len + mov r3, r0 // port+0x500 + + b .start +.nextbit: + str r1, [r3, #0x8] // pin := hi + + movs r2, #8 + tst r6, r0 + it eq + movseq r2, #3 + +.d1: + subs r2, #1 + bne .d1 + + str r1, [r3, #0xC] // pin := lo + + movs r2, #4 + tst r6, r0 + it eq + movseq r2, #6 + + lsrs r6, r6, #1 // r6 >>= 1 + beq .reload + + nop + nop + nop + +.d0: + subs r2, #1 + bne .d0 + + b .nextbit + +.reload: + subs r2, #2 // offset following operations +.d2: + subs r2, #1 + bne .d2 + + // not just a bit - need new byte + adds r4, #1 // r4++ + subs r5, #1 // r5-- + ble .stop // if (r5<=0) goto .stop +.start: + movs r6, #0x80 // reset mask + ldrb r0, [r4, #0] // r0 := *r4 + muls r0, r7 + lsrs r0, r0, #8 // r0 >>= 8 + str r1, [r3, #0xC] // pin := lo + b .nextbit // + +.stop: + str r1, [r3, #0xC] // pin := lo + + pop {r4,r5,r6,r7,pc} + +#endif diff --git a/libs/core/serial.cpp b/libs/core/serial.cpp index 150c149e..574dfc95 100644 --- a/libs/core/serial.cpp +++ b/libs/core/serial.cpp @@ -106,24 +106,29 @@ namespace serial { } /** - * Read multiple characters from the receive buffer. Pause until enough characters are present. - * @param length default buffer length, eg: 64 + * Read multiple characters from the receive buffer. + * If length is positive, pauses until enough characters are present. + * @param length default buffer length */ //% blockId=serial_readbuffer block="serial|read buffer %length" //% help=serial/read-buffer advanced=true weight=5 Buffer readBuffer(int length) { - if (length <= 0) - length = MICROBIT_SERIAL_READ_BUFFER_LENGTH; - - auto buf = mkBuffer(NULL, length); - int read = uBit.serial.read(buf->data, buf->length); - if (read != length) { - auto prev = buf; - buf = mkBuffer(buf->data, read); - decrRC(prev); + auto mode = SYNC_SLEEP; + if (length <= 0) { + length = uBit.serial.getRxBufferSize(); + mode = ASYNC; } - return buf; + auto buf = mkBuffer(NULL, length); + auto res = buf; + registerGCObj(buf); // make sure buffer is pinned, while we wait for data + int read = uBit.serial.read(buf->data, buf->length, mode); + if (read != length) { + res = mkBuffer(buf->data, read); + } + unregisterGCObj(buf); + + return res; } bool tryResolvePin(SerialPin p, PinName& name) { diff --git a/libs/core/shims.d.ts b/libs/core/shims.d.ts index afd83068..431e94c9 100644 --- a/libs/core/shims.d.ts +++ b/libs/core/shims.d.ts @@ -37,9 +37,11 @@ declare interface Image { /** * Shows an frame from the image at offset ``x offset``. * @param xOffset column index to start displaying the image + * @param interval time in milliseconds to pause after drawing */ //% help=images/show-image weight=80 blockNamespace=images - //% blockId=device_show_image_offset block="show image %sprite(myImage)|at offset %offset" + //% blockId=device_show_image_offset block="show image %sprite(myImage)|at offset %offset ||and interval (ms) %interval" + //% //% blockGap=8 parts="ledmatrix" async interval.defl=400 shim=ImageMethods::showImage showImage(xOffset: int32, interval?: int32): void; @@ -58,7 +60,7 @@ declare interface Image { */ //% help=images/scroll-image weight=79 async blockNamespace=images //% blockId=device_scroll_image - //% block="scroll image %sprite(myImage)|with offset %frameoffset|and interval (ms) %delay" + //% block="scroll image %sprite(myImage)|with offset %frameoffset|and interval (ms) %interval" //% blockGap=8 parts="ledmatrix" shim=ImageMethods::scrollImage scrollImage(frameOffset: int32, interval: int32): void; @@ -127,67 +129,48 @@ declare interface Image { /** * Provides access to basic micro:bit functionality. */ - //% color=#1E90FF weight=116 icon="\uf00a" + declare namespace basic { - /** - * Sets the color on the build-in LED. Set to 0 to turn off. - */ - //% blockId=device_set_led_color - //% block="set led to %color=colorNumberPicker" - //% weight=50 shim=basic::setLedColor - function setLedColor(color: int32): void; - - /** - * Sets the color on the build-in LED. Set to 0 to turn off. - */ - //% blockId=device_turn_rgb_led_off block="turn build-in LED off" - //% weight=50 shim=basic::turnRgbLedOff - function turnRgbLedOff(): void; - /** * Draws an image on the LED screen. * @param leds the pattern of LED to turn on/off * @param interval time in milliseconds to pause after drawing */ //% help=basic/show-leds - //% weight=95 blockGap=8 + //% weight=85 blockGap=8 //% imageLiteral=1 async //% blockId=device_show_leds //% block="show leds" icon="\uf00a" - //% parts="ledmatrix" interval.defl=400 shim=basic::showLeds + //% parts="ledmatrix" + //% group="LED matrix" interval.defl=400 shim=basic::showLeds function showLeds(leds: string, interval?: int32): void; /** * Display text on the display, one character at a time. If the string fits on the screen (i.e. is one letter), does not scroll. * @param text the text to scroll on the screen, eg: "hi!" - * @param interval how fast to shift characters; eg: 150, 100, 200, -100 + * @param interval how fast to shift characters; eg: 50, 100, 150, 200 */ //% help=basic/show-string - //% weight=87 blockGap=16 - //% block="show|string %text" + //% weight=100 blockGap=16 + //% block="show|string %text || in an interval of %interval ms" //% async //% blockId=device_print_message //% parts="ledmatrix" - //% text.shadowOptions.toString=true interval.defl=150 shim=basic::showString + //% text.shadowOptions.toString=true + //% expandableArgumentMode="toggle" + //% + //% group="LED matrix" interval.defl=80 shim=basic::showString function showString(text: string, interval?: int32): void; - /** - * Turn off all LEDs - */ - //% help=basic/clear-screen weight=79 - //% blockId=device_clear_display block="clear screen" - //% parts="ledmatrix" - //% advanced=true shim=basic::clearScreen - function clearScreen(): void; - /** * Shows a sequence of LED screens as an animation. * @param leds pattern of LEDs to turn on/off * @param interval time in milliseconds between each redraw */ - //% help=basic/show-animation imageLiteral=1 async - //% parts="ledmatrix" interval.defl=400 shim=basic::showAnimation + //% help=basic/show-animation weight=83 imageLiteral=1 async + //% parts="ledmatrix" + //% group="LED matrix" interval.defl=400 shim=basic::showAnimation function showAnimation(leds: string, interval?: int32): void; /** @@ -195,26 +178,57 @@ declare namespace basic { * @param leds pattern of LEDs to turn on/off */ //% help=basic/plot-leds weight=80 - //% parts="ledmatrix" imageLiteral=1 shim=basic::plotLeds + //% parts="ledmatrix" + //% group="LED matrix" imageLiteral=1 shim=basic::plotLeds function plotLeds(leds: string): void; + /** + * Turn off all LEDs + */ + //% help=basic/clear-screen weight=75 + //% blockId=device_clear_display block="clear screen" + //% parts="ledmatrix" + //% group="LED matrix" + //% advanced=true shim=basic::clearScreen + function clearScreen(): void; + /** * Repeats the code forever in the background. On each iteration, allows other codes to run. * @param body code to execute */ //% help=basic/forever weight=55 blockGap=16 blockAllowMultiple=1 afterOnStart=true - //% blockId=device_forever block="forever" icon="\uf01e" shim=basic::forever + //% blockId=device_forever block="forever" icon="\uf01e" + //% group="Control" shim=basic::forever function forever(a: () => void): void; /** * Pause for the specified time in milliseconds * @param ms how long to pause for, eg: 100, 200, 500, 1000, 2000 */ - //% help=basic/pause weight=54 + //% help=basic/pause weight=50 //% async block="pause (ms) %pause" blockGap=16 //% blockId=device_pause icon="\uf110" - //% pause.shadow=timePicker shim=basic::pause + //% pause.shadow=timePicker + //% group="Control" shim=basic::pause function pause(ms: int32): void; + + /** + * Sets the color on the build-in LED. Set to 0 to turn off. + */ + //% blockId=device_set_led_color + //% block="set led to %color=colorNumberPicker" + //% weight=10 + //% group="RGB LED" shim=basic::setLedColor + function setLedColor(color: int32): void; + + /** + * Sets the color on the build-in LED. Set to 0 to turn off. + */ + //% blockId=device_turn_rgb_led_off block="turn build-in LED off" + //% weight=10 + //% group="RGB LED" + //% advanced=true shim=basic::turnRgbLedOff + function turnRgbLedOff(): void; } @@ -222,6 +236,18 @@ declare namespace basic { //% color=#B4009E weight=99 icon="\uf192" declare namespace input { + /** + * Do something when a button (A, B or both A+B) receives an event. + * @param button the button + * @param body code to run when event is raised + * @param eventType event Type + */ + //% help=input/on-button-event weight=100 blockGap=16 + //% blockId=device_button_selected_event block="on button %NAME| %eventType=control_button_event_value_id" + //% parts="buttonpair" + //% group="Events" shim=input::onButtonEvent + function onButtonEvent(button: Button, eventType: int32, body: () => void): void; + /** * Do something when a button (A, B or both A+B) is pushed down and released again. * @param button the button that needs to be pressed @@ -229,7 +255,9 @@ declare namespace input { */ //% help=input/on-button-pressed weight=85 blockGap=16 //% blockId=device_button_event block="on button|%NAME|pressed" - //% parts="buttonpair" shim=input::onButtonPressed + //% parts="buttonpair" + //% deprecated=true + //% group="Events" shim=input::onButtonPressed function onButtonPressed(button: Button, body: () => void): void; /** @@ -237,29 +265,43 @@ declare namespace input { * @param gesture the type of gesture to track, eg: Gesture.Shake * @param body code to run when gesture is raised */ - //% help=input/on-gesture weight=84 blockGap=16 + //% help=input/on-gesture weight=98 blockGap=16 //% blockId=device_gesture_event block="on |%NAME" //% parts="accelerometer" - //% NAME.fieldEditor="gestures" NAME.fieldOptions.columns=4 shim=input::onGesture + //% NAME.fieldEditor="gestures" NAME.fieldOptions.columns=4 + //% group="Events" shim=input::onGesture function onGesture(gesture: Gesture, body: () => void): void; /** * Tests if a gesture is currently detected. * @param gesture the type of gesture to detect, eg: Gesture.Shake */ - //% help=input/is-gesture weight=10 blockGap=8 + //% help=input/is-gesture weight=86 blockGap=8 //% blockId=deviceisgesture block="is %gesture gesture" //% parts="accelerometer" - //% gesture.fieldEditor="gestures" gesture.fieldOptions.columns=4 shim=input::isGesture + //% gesture.fieldEditor="gestures" gesture.fieldOptions.columns=4 + //% group="States" shim=input::isGesture function isGesture(gesture: Gesture): boolean; + /** + * Do something when a pin receives an touch event (while also touching the GND pin). + * @param name the pin, eg: TouchPin.P0 + * @param body the code to run when event is fired on pin + */ + //% help=input/on-pin-touch weight=99 blockGap=16 + //% blockId=device_pin_custom_event block="on pin %name| %eventType=control_button_event_value_id" + //% group="Events" shim=input::onPinTouchEvent + function onPinTouchEvent(name: TouchPin, eventType: int32, body: () => void): void; + /** * Do something when a pin is touched and released again (while also touching the GND pin). * @param name the pin that needs to be pressed, eg: TouchPin.P0 * @param body the code to run when the pin is pressed */ - //% help=input/on-pin-pressed weight=83 blockGap=32 - //% blockId=device_pin_event block="on pin %name|pressed" shim=input::onPinPressed + //% help=input/on-pin-pressed weight=83 blockGap=16 + //% blockId=device_pin_event block="on pin %name|pressed" + //% group="Events" + //% deprecated=true shim=input::onPinPressed function onPinPressed(name: TouchPin, body: () => void): void; /** @@ -269,27 +311,31 @@ declare namespace input { */ //% help=input/on-pin-released weight=6 blockGap=16 //% blockId=device_pin_released block="on pin %NAME|released" - //% advanced=true shim=input::onPinReleased + //% advanced=true + //% group="Events" + //% deprecated=true shim=input::onPinReleased function onPinReleased(name: TouchPin, body: () => void): void; /** * Get the button state (pressed or not) for ``A`` and ``B``. * @param button the button to query the request, eg: Button.A */ - //% help=input/button-is-pressed weight=60 + //% help=input/button-is-pressed weight=89 //% block="button|%NAME|is pressed" //% blockId=device_get_button2 //% icon="\uf192" blockGap=8 - //% parts="buttonpair" shim=input::buttonIsPressed + //% parts="buttonpair" + //% group="States" shim=input::buttonIsPressed function buttonIsPressed(button: Button): boolean; /** * Get the pin state (pressed or not). Requires to hold the ground to close the circuit. * @param name pin used to detect the touch, eg: TouchPin.P0 */ - //% help=input/pin-is-pressed weight=58 + //% help=input/pin-is-pressed weight=87 //% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" - //% blockGap=8 shim=input::pinIsPressed + //% blockGap=8 + //% group="States" shim=input::pinIsPressed function pinIsPressed(name: TouchPin): boolean; /** @@ -298,33 +344,45 @@ declare namespace input { */ //% help=input/acceleration weight=58 //% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8 - //% parts="accelerometer" shim=input::acceleration + //% parts="accelerometer" + //% group="Sensors" shim=input::acceleration function acceleration(dimension: Dimension): int32; /** * Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright. */ - //% help=input/light-level weight=57 + //% help=input/light-level weight=59 //% blockId=device_get_light_level block="light level" blockGap=8 - //% parts="ledmatrix" shim=input::lightLevel + //% parts="ledmatrix" + //% group="Sensors" shim=input::lightLevel function lightLevel(): int32; + /** + * gets the level of loudness from 0 (silent) to 255 (loud) + */ + //% blockId="soundLevel" weight=58 + //% block="soundLevel" blockGap=8 + //% group="Sensors" shim=input::soundLevel + function soundLevel(): int32; + /** * Get the current compass heading in degrees. */ //% help=input/compass-heading //% weight=56 //% blockId=device_heading block="compass heading (°)" blockGap=8 - //% parts="compass" shim=input::compassHeading + //% parts="compass" + //% group="Sensors" shim=input::compassHeading function compassHeading(): int32; /** * Gets the temperature in Celsius degrees (°C). */ - //% weight=55 + //% weight=57 //% help=input/temperature //% blockId=device_temperature block="temperature (°C)" blockGap=8 - //% parts="thermometer" shim=input::temperature + //% parts="thermometer" + //% group="Sensors" shim=input::temperature function temperature(): int32; /** @@ -333,17 +391,19 @@ declare namespace input { */ //% help=input/rotation weight=52 //% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 - //% parts="accelerometer" advanced=true shim=input::rotation + //% parts="accelerometer" advanced=true + //% group="Sensors" shim=input::rotation function rotation(kind: Rotation): int32; /** * Get the magnetic force value in ``micro-Teslas`` (``µT``). This function is not supported in the simulator. * @param dimension the x, y, or z dimension, eg: Dimension.X */ - //% help=input/magnetic-force weight=51 + //% help=input/magnetic-force weight=49 //% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 //% parts="compass" - //% advanced=true shim=input::magneticForce + //% advanced=true + //% group="Sensors" shim=input::magneticForce function magneticForce(dimension: Dimension): number; /** @@ -351,18 +411,49 @@ declare namespace input { */ //% help=input/calibrate-compass advanced=true //% blockId="input_compass_calibrate" block="calibrate compass" - //% weight=45 shim=input::calibrateCompass + //% weight=20 gap=8 + //% group="Configuration" shim=input::calibrateCompass function calibrateCompass(): void; + /** + * Returns 'true' when the compass is calibrated. Otherwise returns 'false'. + */ + //% help=input/calibrate-compass advanced=true + //% blockId="input_compass_is_calibrated" block="is compass calibrated" + //% weight=19 + //% group="System" shim=input::isCalibratedCompass + function isCalibratedCompass(): boolean; + + /** + * Obsolete, compass calibration is automatic. + */ + //% help=input/calibrate-compass advanced=true + //% blockId="input_compass_clear_calibration" block="clear calibration compass" + //% weight=17 + //% group="Configuration" + //% blockHidden=true shim=input::clearCalibrationCompass + function clearCalibrationCompass(): void; + + /** + * Obsolete, compass calibration is automatic. + */ + //% help=input/calibrate-compass advanced=true + //% blockId="input_compass_assume_calibration" block="assume calibration compass" + //% weight=16 + //% group="Configuration" + //% blockHidden=true shim=input::assumeCalibrationCompass + function assumeCalibrationCompass(): void; + /** * Sets the accelerometer sample range in gravities. * @param range a value describe the maximum strengh of acceleration measured */ //% help=input/set-accelerometer-range //% blockId=device_set_accelerometer_range block="set accelerometer|range %range" - //% weight=5 + //% weight=22 gap=8 //% parts="accelerometer" - //% advanced=true shim=input::setAccelerometerRange + //% advanced=true + //% group="Configuration" shim=input::setAccelerometerRange function setAccelerometerRange(range: AcceleratorRange): void; } @@ -410,8 +501,9 @@ declare namespace control { * Blocks the current fiber for the given microseconds * @param micros number of micro-seconds to wait. eg: 4 */ - //% help=control/wait-micros weight=29 - //% blockId="control_wait_us" block="wait (µs)%micros" shim=control::waitMicros + //% help=control/wait-micros weight=29 async + //% blockId="control_wait_us" block="wait (µs)%micros" + //% micros.min=0 micros.max=6000 shim=control::waitMicros function waitMicros(micros: int32): void; /** @@ -465,6 +557,13 @@ declare namespace control { //% advanced=true shim=control::deviceSerialNumber function deviceSerialNumber(): int32; + /** + * Derive a unique, consistent 64-bit serial number of this device from internal data. + */ + //% help=control/device-long-serial-number + //% advanced=true shim=control::deviceLongSerialNumber + function deviceLongSerialNumber(): Buffer; + /** * Informs simulator/runtime of a MIDI message * Internal function to support the simulator. @@ -476,7 +575,53 @@ declare namespace control { * */ //% shim=control::__log - function __log(text: string): void; + function __log(priority: int32, text: string): void; + + /** + * Allocates the next user notification event + */ + //% help=control/allocate-notify-event shim=control::allocateNotifyEvent + function allocateNotifyEvent(): int32; + + /** Write a message to DMESG debugging buffer. */ + //% shim=control::dmesg + function dmesg(s: string): void; + + /** Write a message and value (pointer) to DMESG debugging buffer. */ + //% shim=control::dmesgPtr + function dmesgPtr(str: string, ptr: Object): void; +} +declare namespace control { + + /** + * Force GC and dump basic information about heap. + */ + //% shim=control::gc + function gc(): void; + + /** + * Force GC and halt waiting for debugger to do a full heap dump. + */ + //% shim=control::heapDump + function heapDump(): void; + + /** + * Set flags used when connecting an external debugger. + */ + //% shim=control::setDebugFlags + function setDebugFlags(flags: int32): void; + + /** + * Record a heap snapshot to debug memory leaks. + */ + //% shim=control::heapSnapshot + function heapSnapshot(): void; + + /** + * Return true if profiling is enabled in the current build. + */ + //% shim=control::profilingEnabled + function profilingEnabled(): boolean; } @@ -607,8 +752,9 @@ declare namespace motors { */ //% blockId=motor_on block="motor on at %percent \\%" //% parts=dcmotor weight=90 blockGap=8 - //% percent.shadow="speedPicker" shim=motors::motorPower - function motorPower(power: int32): void; + //% percent.shadow="speedPicker" + //% power.defl=100 shim=motors::motorPower + function motorPower(power?: int32): void; /** * Send break, coast or sleep commands to the motor. Has no effect in dual-motor mode. @@ -622,8 +768,9 @@ declare namespace motors { */ //% blockId=block_dual_motor block="motor %motor|at %percent \\%" //% percent.shadow="speedPicker" - //% weight=80 shim=motors::dualMotorPower - function dualMotorPower(motor: Motor, duty_percent: int32): void; + //% weight=80 + //% duty_percent.defl=100 shim=motors::dualMotorPower + function dualMotorPower(motor: Motor, duty_percent?: int32): void; } declare namespace music { @@ -635,6 +782,31 @@ declare namespace music { //% //% parts="speaker" async useEnumVal=1 shim=music::speakerPlayTone function speakerPlayTone(frequency: int32, ms: int32): void; + + /** + * Set the default output volume of the sound synthesizer. + * @param volume the volume 0...255 + */ + //% blockId=synth_set_volume block="set volume %volume" + //% volume.min=0 volume.max=255 + //% + //% help=music/set-volume + //% weight=70 + //% group="Volume" + //% blockGap=8 + //% blockHidden=true volume.defl=127 shim=music::setVolume + function setVolume(volume?: int32): void; + + /** + * Returns the current output volume of the sound synthesizer. + */ + //% blockId=synth_get_volume block="volume" + //% help=music/volume + //% weight=69 + //% group="Volume" + //% blockGap=8 + //% blockHidden=true shim=music::volume + function volume(): int32; } declare namespace pins { @@ -763,7 +935,8 @@ declare namespace pins { //% blockId=device_analog_set_pitch_pin block="analog set pitch pin %name" //% help=pins/analog-set-pitch-pin weight=3 advanced=true //% name.fieldEditor="gridpicker" name.fieldOptions.columns=4 - //% name.fieldOptions.tooltips="false" name.fieldOptions.width="250" shim=pins::analogSetPitchPin + //% name.fieldOptions.tooltips="false" name.fieldOptions.width="250" + //% blockHidden=true shim=pins::analogSetPitchPin function analogSetPitchPin(name: AnalogPin): void; /** @@ -772,14 +945,16 @@ declare namespace pins { */ //% blockId=device_analog_set_pitch_volume block="analog set pitch volume $volume" //% help=pins/analog-set-pitch-volume weight=3 advanced=true - //% volume.min=0 volume.max=255 shim=pins::analogSetPitchVolume + //% volume.min=0 volume.max=255 + //% blockHidden=true shim=pins::analogSetPitchVolume function analogSetPitchVolume(volume: int32): void; /** * Gets the volume the pitch pin from 0..255 */ //% blockId=device_analog_pitch_volume block="analog pitch volume" - //% help=pins/analog-pitch-volume weight=3 advanced=true shim=pins::analogPitchVolume + //% help=pins/analog-pitch-volume weight=3 advanced=true + //% blockHidden=true shim=pins::analogPitchVolume function analogPitchVolume(): int32; /** @@ -788,7 +963,8 @@ declare namespace pins { * @param ms duration of the pitch in milli seconds. */ //% blockId=device_analog_pitch block="analog pitch %frequency|for (ms) %ms" - //% help=pins/analog-pitch weight=4 async advanced=true blockGap=8 shim=pins::analogPitch + //% help=pins/analog-pitch weight=4 async advanced=true blockGap=8 + //% blockHidden=true shim=pins::analogPitch function analogPitch(frequency: int32, ms: int32): void; /** @@ -821,6 +997,20 @@ declare namespace pins { //% shim=pins::createBuffer function createBuffer(size: int32): Buffer; + /** + * Set the matrix width for Neopixel strip (already assigned to a pin). + * Should be used in conjunction with `set matrix width` from Neopixel package. + * @param name pin of Neopixel strip, eg: DigitalPin.P1 + * @param value width of matrix (at least ``2``) + */ + //% help=pins/neopixel-matrix-width weight=3 advanced=true + //% blockId=pin_neopixel_matrix_width block="neopixel matrix width|pin %pin %width" blockGap=8 + //% pin.fieldEditor="gridpicker" pin.fieldOptions.columns=4 + //% pin.fieldOptions.tooltips="false" pin.fieldOptions.width="250" + //% width.min=2 + //% blockHidden=true width.defl=5 shim=pins::setMatrixWidth + function setMatrixWidth(pin: DigitalPin, width?: int32): void; + /** * Read `size` bytes from a 7-bit I2C `address`. */ @@ -885,6 +1075,18 @@ declare namespace pins { */ //% help=pins/push-button advanced=true shim=pins::pushButton function pushButton(pin: DigitalPin): void; + + /** + * Set the pin used when producing sounds and melodies. Default is P0. + * @param name pin to modulate pitch from + */ + //% blockId=pin_set_audio_pin block="set audio pin $name" + //% help=pins/set-audio-pin weight=3 + //% name.fieldEditor="gridpicker" name.fieldOptions.columns=4 + //% name.fieldOptions.tooltips="false" name.fieldOptions.width="250" + //% weight=1 + //% blockHidden=true shim=pins::setAudioPin + function setAudioPin(name: AnalogPin): void; } @@ -935,8 +1137,9 @@ declare namespace serial { function writeBuffer(buffer: Buffer): void; /** - * Read multiple characters from the receive buffer. Pause until enough characters are present. - * @param length default buffer length, eg: 64 + * Read multiple characters from the receive buffer. + * If length is positive, pauses until enough characters are present. + * @param length default buffer length */ //% blockId=serial_readbuffer block="serial|read buffer %length" //% help=serial/read-buffer advanced=true weight=5 shim=serial::readBuffer @@ -1105,15 +1308,63 @@ declare namespace control { //% deprecated=1 shim=control::createBufferFromUTF8 function createBufferFromUTF8(str: string): Buffer; } + + + /** + * Provides access to persistent storage functionality. + */ + +declare namespace storage { + + /** + * Saves a key value pair in the non volatile storage + * @param key the key for accesing the value + * @param value value to store + */ + //% weight=100 blockGap=16 + //% block="Put into %key a value of %value as Int" + //% blockId=storage_put_value_int + //% + //% group="Put" + //% blockHidden=true value.defl=0 shim=storage::putValueInt + function putValueInt(key: string, value?: int32): void; + + /** + * Reads a key value pair from the non volatile storage + * @param key the key for accesing the value + */ + //% weight=100 blockGap=16 + //% block="get number from %key" + //% blockId=storage_get_value_int + //% group="Get" + //% blockHidden=true shim=storage::getValueInt + function getValueInt(key: string): int32; + + /** + * Removes a key value pair from the non volatile storage + * @param key the key for accesing the value + */ + //% weight=100 blockGap=16 + //% block="remove %key" + //% blockId=storage_remove + //% group="Remove" + //% blockHidden=true shim=storage::remove + function remove(key: string): void; +} declare namespace light { /** * Sends a color buffer to a light strip **/ - //% advanced=true - //% shim=light::sendWS2812Buffer + //% advanced=true shim=light::sendWS2812Buffer function sendWS2812Buffer(buf: Buffer, pin: int32): void; + /** + * Sends a color buffer to a light strip + **/ + //% advanced=true shim=light::sendWS2812BufferWithBrightness + function sendWS2812BufferWithBrightness(buf: Buffer, pin: int32, brightness: int32): void; + /** * Sets the light mode of a pin **/ diff --git a/libs/core/soundexpressions.cpp b/libs/core/soundexpressions.cpp new file mode 100644 index 00000000..bd4a34d4 --- /dev/null +++ b/libs/core/soundexpressions.cpp @@ -0,0 +1,28 @@ +#include "pxt.h" + +namespace music { + /** + * Internal use only + **/ + //% async + void __playSoundExpression(String nodes, bool waitTillDone) { +#if MICROBIT_CODAL + if (waitTillDone) + uBit.audio.soundExpressions.play(MSTR(nodes)); + else + uBit.audio.soundExpressions.playAsync(MSTR(nodes)); +#else + target_panic(PANIC_VARIANT_NOT_SUPPORTED); +#endif + } + + /** + * Internal use only + */ + //% + void __stopSoundExpressions() { +#if MICROBIT_CODAL + uBit.audio.soundExpressions.stop(); +#endif + } +} \ No newline at end of file diff --git a/libs/core/soundexpressions.ts b/libs/core/soundexpressions.ts new file mode 100644 index 00000000..5f25bb1d --- /dev/null +++ b/libs/core/soundexpressions.ts @@ -0,0 +1,59 @@ +/** + * A sound expression. + */ +//% fixedInstances +//% blockNamespace=music +//% group="micro:bit (V2)" +class SoundExpression { + constructor(private notes: string) { + } + + /** + * Starts to play a sound expression. + */ + //% block="play sound $this" + //% weight=80 + //% blockGap=8 + //% help=music/play + //% group="micro:bit (V2)" + //% parts=builtinspeaker + play() { + music.__playSoundExpression(this.notes, false) + } + + /** + * Plays a sound expression until finished + */ + //% block="play sound $this until done" + //% weight=81 + //% blockGap=8 + //% help=music/play-until-done + //% group="micro:bit (V2)" + //% parts=builtinspeaker + playUntilDone() { + music.__playSoundExpression(this.notes, true) + } +} + +namespace soundExpression { + //% fixedInstance whenUsed block="{id:soundexpression}giggle" + export const giggle = new SoundExpression("giggle"); + //% fixedInstance whenUsed block="{id:soundexpression}happy" + export const happy = new SoundExpression("happy"); + //% fixedInstance whenUsed block="{id:soundexpression}hello" + export const hello = new SoundExpression("hello"); + //% fixedInstance whenUsed block="{id:soundexpression}mysterious" + export const mysterious = new SoundExpression("mysterious"); + //% fixedInstance whenUsed block="{id:soundexpression}sad" + export const sad = new SoundExpression("sad"); + //% fixedInstance whenUsed block="{id:soundexpression}slide" + export const slide = new SoundExpression("slide"); + //% fixedInstance whenUsed block="{id:soundexpression}soaring" + export const soaring = new SoundExpression("soaring"); + //% fixedInstance whenUsed block="{id:soundexpression}spring" + export const spring = new SoundExpression("spring"); + //% fixedInstance whenUsed block="{id:soundexpression}twinkle" + export const twinkle = new SoundExpression("twinkle"); + //% fixedInstance whenUsed block="{id:soundexpression}yawn" + export const yawn = new SoundExpression("yawn"); +} \ No newline at end of file diff --git a/libs/core/storage.cpp b/libs/core/storage.cpp new file mode 100644 index 00000000..e160f12a --- /dev/null +++ b/libs/core/storage.cpp @@ -0,0 +1,57 @@ +#include "pxt.h" + +/** + * Provides access to persistent storage functionality. + */ +namespace storage { + /** + * Saves a key value pair in the non volatile storage + * @param key the key for accesing the value + * @param value value to store + */ + //% weight=100 blockGap=16 + //% block="Put into %key a value of %value as Int" + //% blockId=storage_put_value_int + //% value.defl=0 + //% group="Put" + //% blockHidden=true + void putValueInt(String key, int value) { + ManagedString managedKey = MSTR(key); + uBit.storage.put(managedKey, (uint8_t *)&value, sizeof(int)); + } + + /** + * Reads a key value pair from the non volatile storage + * @param key the key for accesing the value + */ + //% weight=100 blockGap=16 + //% block="get number from %key" + //% blockId=storage_get_value_int + //% group="Get" + //% blockHidden=true + int getValueInt(String key) { + KeyValuePair* data = uBit.storage.get(MSTR(key)); + int stored; + if(data == NULL) { + return 0; + } else { + memcpy(&stored, data->value, sizeof(int)); + delete data; + return stored; + } + } + + /** + * Removes a key value pair from the non volatile storage + * @param key the key for accesing the value + */ + //% weight=100 blockGap=16 + //% block="remove %key" + //% blockId=storage_remove + //% group="Remove" + //% blockHidden=true + void remove(String key) { + uBit.storage.remove(MSTR(key)); + } + +} \ No newline at end of file diff --git a/libs/core/storage.ts b/libs/core/storage.ts new file mode 100644 index 00000000..865ceb64 --- /dev/null +++ b/libs/core/storage.ts @@ -0,0 +1,68 @@ +enum StorageSlots { + //% block="Slot 1" + s1 = 0, + //% block="Slot 2" + s2 = 1, + //% block="Slot 3" + s3 = 2, + //% block="Slot 4" + s4 = 3, + //% block="Slot 5" + s5 = 4, + //% block="Slot 6" + s6 = 5, + //% block="Slot 7" + s7 = 6, +} + +// let storagesStr = ['s1', 's2', 's3', 's4', 's5', 's6', 's7']; +let storagesInt = ['i1', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7']; + +/** + * Provides access to persistent storage functionality. + */ +//% color=#FFBB00 weight=10 icon="\uf187" +//% advanced=true +namespace storage { + + /** + * Saves a key value pair in the non volatile storage + * @param key the key for accesing the value + * @param value value to store + */ + //% weight=90 blockGap=16 + //% block="Save into number %key a value of %value" + //% blockId=storage_put_number + //% group="Put" + export function putNumber(key: StorageSlots, value: number) : void { + let managedValue = Math.floor(value * 100); + putValueInt(storagesInt[key], managedValue); + } + + /** + * Reads a key value pair from the non volatile storage as a number + * @param key the key for accesing the value + */ + //% weight=70 blockGap=16 + //% block="read from number %key" + //% blockId=storage_get_number + //% group="Get" + export function getNumber(key: StorageSlots) : number { + let value = getValueInt(storagesInt[key]); + return value / 100; + } + + /** + * Deletes the key from the non volatile storage + * @param key the key for accesing the value + */ + //% weight=50 blockGap=16 + //% block="Clear number %key" + //% blockId=storage_remove_key_int + //% group="Remove" + export function removeKeyInt(key: StorageSlots) : void { + remove(storagesInt[key]); + } + + +} \ No newline at end of file diff --git a/libs/core/touchmode.cpp b/libs/core/touchmode.cpp new file mode 100644 index 00000000..6267515b --- /dev/null +++ b/libs/core/touchmode.cpp @@ -0,0 +1,53 @@ +#include "pxt.h" + +#if MICROBIT_CODAL +#else +#define MICROBIT_ID_LOGO 121 +#endif + +enum class TouchTargetMode { + //% block="capacitive" + Capacitive = 1, + //% block="resistive" + Resistive = 0 +}; + +enum class TouchTarget { + //% block="P0" + P0 = MICROBIT_ID_IO_P0, + //% block="P1" + P1 = MICROBIT_ID_IO_P1, + //% block="P2" + P2 = MICROBIT_ID_IO_P2, + //% block="logo" + LOGO = MICROBIT_ID_LOGO +}; + +namespace pins { + + /** + * Configure the touch detection for the pins and logo. + * P0, P1, P2 use resistive touch by default. + * The logo uses capacitative touch by default. + * @param name target to change the touch mode for + * @param mode the touch mode to use + */ + //% weight=60 + //% blockId=device_touch_set_type block="set %name to touch mode %mode" + //% advanced=true + //% group="micro:bit (V2)" + //% help=pins/touch-set-mode + void touchSetMode(TouchTarget name, TouchTargetMode mode) { + #if MICROBIT_CODAL + const auto pin = name == TouchTarget::LOGO + ? &uBit.io.logo : getPin((int)name); + if (pin) { + pin->isTouched(mode == TouchTargetMode::Capacitive + ? codal::TouchMode::Capacitative : codal::TouchMode::Resistive); + } + #else + target_panic(PANIC_VARIANT_NOT_SUPPORTED); + #endif + } + +} \ No newline at end of file diff --git a/libs/devices/pxt.json b/libs/devices/pxt.json index 3624e880..5ce0fd32 100644 --- a/libs/devices/pxt.json +++ b/libs/devices/pxt.json @@ -9,6 +9,7 @@ "devices.ts" ], "icon": "./static/packages/devices/icon.png", + "hidden": true, "public": true, "dependencies": { "core": "file:../core", diff --git a/libs/microphone/_locales/microphone-jsdoc-strings.json b/libs/microphone/_locales/microphone-jsdoc-strings.json index e8c66916..4d80ad13 100644 --- a/libs/microphone/_locales/microphone-jsdoc-strings.json +++ b/libs/microphone/_locales/microphone-jsdoc-strings.json @@ -2,5 +2,5 @@ "input": "Events and data from sensors", "input.onLoudSound": "Registers an event that runs when a loud sound is detected", "input.setLoudSoundThreshold": "Sets the minimum threshold for a loud sound", - "input.soundLevel": "gets the level of loudness in 0-100%\n\nReads the loudness through the microphone from 0 (silent) to 255 (loud)" + "input.soundLevel": "gets the level of loudness from 0 (silent) to 255 (loud)\n\nReads the loudness through the microphone from 0 (silent) to 255 (loud)" } \ No newline at end of file diff --git a/libs/microphone/_locales/microphone-strings.json b/libs/microphone/_locales/microphone-strings.json index d472f108..b4a1586c 100644 --- a/libs/microphone/_locales/microphone-strings.json +++ b/libs/microphone/_locales/microphone-strings.json @@ -6,5 +6,6 @@ "input.soundLevel|block": "sound level", "input|block": "input", "{id:category}Input": "Input", - "{id:group}More": "More" + "{id:group}More": "More", + "{id:group}Sensors": "Sensors" } \ No newline at end of file diff --git a/libs/servo/pxt.json b/libs/servo/pxt.json index c4632acd..e34cc07d 100644 --- a/libs/servo/pxt.json +++ b/libs/servo/pxt.json @@ -11,4 +11,4 @@ "dependencies": { "core": "file:../core" } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 47758adc..5c89cc63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5558 +1,12129 @@ { - "name": "pxt-calliopemini", - "version": "3.0.36", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@jacdac/jacdac-ts": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@jacdac/jacdac-ts/-/jacdac-ts-0.0.9.tgz", - "integrity": "sha512-eMps8XvVwHXTQFkQu8SZAKaBczufk4ubp3uoU4+q5fipDgPXRfO3ykHxTgj5gtk5ZjVq/zNMfSlB3is7ohQtIw==", - "requires": { - "@types/w3c-web-usb": "^1.0.3", - "webusb": "^1.1.1" - } - }, - "@types/bluebird": { - "version": "2.0.33", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-2.0.33.tgz", - "integrity": "sha512-iq7ss0qO31YCYeLEPrBoVMDLw1dBotOS7394a+Dj2CSvQNjQfJvryVo9es5ghvQZmIqO7Q0tlCe9YpwTZKOoXg==", - "dev": true - }, - "@types/marked": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", - "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", - "dev": true - }, - "@types/mime-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", - "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=" - }, - "@types/node": { - "version": "8.0.53", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.53.tgz", - "integrity": "sha512-54Dm6NwYeiSQmRB1BLXKr5GELi0wFapR1npi8bnZhEcu84d/yQKqnwwXQ56hZ0RUbTG6L5nqDZaN3dgByQXQRQ==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "@types/react": { - "version": "16.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.25.tgz", - "integrity": "sha512-K79zMwWRzQ2db+nPoKpi3gA/KmLo6ZQgT4iO2QPEUdBO7as0PcgrmU9KHYzIO3V6lbD7gRjOM0/nUch6xBfOvQ==", - "dev": true - }, - "@types/react-dom": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.3.tgz", - "integrity": "sha512-xAvZiGhQlEhjStoKktoai8CelXVFBaSN6JX4vy1UQioRba3c2vum1TGzR0thHoEauZtIwzWg8mos0AHu2ne4jw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/react": "*" - } - }, - "@types/usb": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/usb/-/usb-1.5.1.tgz", - "integrity": "sha512-1qhcYMLJ0I2HcRG3G/nBcRZ0KrrTdGdUNcCkEVgcga4KMlDXWh6LZJjVA6MiWEDa+BOaQTEfGJfuNaQ71IQOpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/w3c-web-usb": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.4.tgz", - "integrity": "sha512-aaOB3EL5WCWBBOYX7W1MKuzspOM9ZJI9s3iziRVypr1N+QyvIgXzCM4lm1iiOQ1VFzZioUPX9bsa23myCbKK4A==" - }, - "@types/web-bluetooth": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.4.tgz", - "integrity": "sha512-C+BgVBBGY9c6ixcc5PsKAmGaCy3bswZ5zx/AWIAik9dgFuBkFsXBA3ze69jJi05xdZQ99QkfBSVIX6zl+6Tmww==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" - }, - "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "applicationinsights-js": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/applicationinsights-js/-/applicationinsights-js-1.0.21.tgz", - "integrity": "sha512-AUkkm8OWfCgbBuMe7kSAwUFpc1e2y+WisieQx/VgCS+BT/0AubmnGZ1yQ+zkENVriM9qArKNjLqTQp38x995wg==" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "optional": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "name": "pxt-calliopemini", + "version": "3.0.67", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "pxt-calliopemini", + "version": "3.0.67", + "license": "MIT", + "dependencies": { + "pxt-common-packages": "9.0.1", + "pxt-core": "7.0.12" + }, + "devDependencies": { + "@types/marked": "0.3.0", + "@types/node": "8.10.66", + "@types/react": "16.4.7", + "@types/react-dom": "16.0.3", + "@types/web-bluetooth": "0.0.4", + "less": "2.7.3", + "react": "16.8.3", + "react-dom": "16.11.0", + "semantic-ui-less": "2.2.14", + "typescript": "4.2.3" + } }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "optional": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "optional": true - }, - "aws4": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", - "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "requires": { - "callsite": "1.0.0" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.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" - } - } - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "requires": { - "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": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserify": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.0.tgz", - "integrity": "sha512-yotdAkp/ZbgDesHQBYU37zjc29JDH4iXT8hjzM1fdUVWogjARX0S1cKeX24Ci6zZ+jG+ADmCTRt6xvtmJnI+BQ==", - "requires": { - "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.6.0", - "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.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.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", - "mkdirp": "^0.5.0", - "module-deps": "^6.0.0", - "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.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "node_modules/@microsoft/immersive-reader-sdk": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@microsoft/immersive-reader-sdk/-/immersive-reader-sdk-1.1.0.tgz", + "integrity": "sha512-ULNUKUzb2WzcXv3Ot8yK8LX28C23uCifOYIlAQHE7QKCIPzIMq3ncaO8ymuO59njd7imFjU0DluizLuDzh2B0g==" }, - "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==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", - "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "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==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - }, - "dependencies": { - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - } - } - }, - "caniuse-lite": { - "version": "1.0.30001116", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", - "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "requires": { - "assertion-error": "^1.0.1", - "deep-eql": "^0.1.3", - "type-detect": "^1.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "optional": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "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==" - }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "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=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "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": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "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": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "optional": true, - "requires": { - "boom": "2.x.x" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "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" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "node_modules/@types/marked": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", + "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", + "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "node_modules/@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } + "node_modules/@types/react": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.7.tgz", + "integrity": "sha512-tHpSs7HMyjnpyfzka1G0pYh7rBNdpwGgcIDT4vfV6jUaR69yOHo/vNH2H+d9iYHo9xnX4qDe7UalPe9HiGRkLw==", + "dev": true, + "dependencies": { + "csstype": "^2.2.0" + } }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + "node_modules/@types/react-dom": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.3.tgz", + "integrity": "sha512-xAvZiGhQlEhjStoKktoai8CelXVFBaSN6JX4vy1UQioRba3c2vum1TGzR0thHoEauZtIwzWg8mos0AHu2ne4jw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/react": "*" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "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==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deps-sort": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", - "requires": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - } - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz", - "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==", - "requires": { - "domelementtype": "^2.0.1" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - } - } - }, - "dompurify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.8.tgz", - "integrity": "sha512-vIOSyOXkMx81ghEalh4MLBtDHMx1bhKlaqHDMqM2yeitJ996SLOk5mGdDpI9ifJAgokred8Rmu219fX4OltqXw==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.537", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.537.tgz", - "integrity": "sha512-v1jGX46P9vq1XvCBFJ7T7rHd2kMuSrCHnYvO0TqNoURYt7VoxCnqo5+W84s0jlnq0iQUPk5H2D01RfL4ENe2CA==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "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" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", - "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "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==" - }, - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", - "requires": { - "colors": "~0.6.0-1", - "commander": "~2.1.0" - }, - "dependencies": { - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + "node_modules/@types/web-bluetooth": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.4.tgz", + "integrity": "sha512-C+BgVBBGY9c6ixcc5PsKAmGaCy3bswZ5zx/AWIAik9dgFuBkFsXBA3ze69jJi05xdZQ99QkfBSVIX6zl+6Tmww==", + "dev": true }, - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "optional": true, + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/ajv/node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "optional": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/applicationinsights-js": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/applicationinsights-js/-/applicationinsights-js-1.0.21.tgz", + "integrity": "sha512-AUkkm8OWfCgbBuMe7kSAwUFpc1e2y+WisieQx/VgCS+BT/0AubmnGZ1yQ+zkENVriM9qArKNjLqTQp38x995wg==", + "deprecated": "This package has been moved to @microsoft/applicationinsights-web. Please install that package instead for the latest updates & features" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dependencies": { + "callsite": "1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "node_modules/browserify": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.0.tgz", + "integrity": "sha512-yotdAkp/ZbgDesHQBYU37zjc29JDH4iXT8hjzM1fdUVWogjARX0S1cKeX24Ci6zZ+jG+ADmCTRt6xvtmJnI+BQ==", + "dependencies": { + "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.6.0", + "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.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.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", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "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.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "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" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dependencies": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "engines": { + "node": ">=4" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-api/node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001280", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", + "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dependencies": { + "assertion-error": "^1.0.1", + "deep-eql": "^0.1.3", + "type-detect": "^1.0.0" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "optional": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "node_modules/component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "node_modules/component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "node_modules/component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + }, + "node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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=" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "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" + } + }, + "node_modules/cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "dependencies": { + "boom": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-declaration-sorter/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/css-declaration-sorter/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano-preset-default/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano-util-raw-cache/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssnano/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csstype": { + "version": "2.6.17", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", + "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dashdash/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dependencies": { + "type-detect": "0.1.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/deep-eql/node_modules/type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "engines": { + "node": "*" + } + }, + "node_modules/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==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=" + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domhandler/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dompurify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.8.tgz", + "integrity": "sha512-vIOSyOXkMx81ghEalh4MLBtDHMx1bhKlaqHDMqM2yeitJ996SLOk5mGdDpI9ifJAgokred8Rmu219fX4OltqXw==" + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/electron-to-chromium": { + "version": "1.3.899", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.899.tgz", + "integrity": "sha512-w16Dtd2zl7VZ4N4Db+FIa7n36sgPGCKjrKvUUmp5ialsikvcQLjcJR9RWnlYNxIyEHLdHaoIZEqKsPxU9MdyBg==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + } + }, + "node_modules/engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dependencies": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dependencies": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "dependencies": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "bin": { + "findup": "bin/findup.js" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/findup/node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/findup/node_modules/commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "node_modules/follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/getpass/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "engines": { + "node": ">=4.x" + } + }, + "node_modules/har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "deprecated": "this library is no longer supported", + "optional": true, + "dependencies": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dependencies": { + "isarray": "2.0.1" + } + }, + "node_modules/has-binary2/node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "optional": true, + "dependencies": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "optional": true, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/htmlparser2/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/htmlparser2/node_modules/domutils/node_modules/domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "optional": true, + "dependencies": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dependencies": { + "buffer-alloc": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "engines": { + "node": "*" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jsprim/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/karma": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", + "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", + "dependencies": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^3.0.2", + "chokidar": "^3.0.0", + "colors": "^1.1.0", + "connect": "^3.6.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.14", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", + "peerDependencies": { + "chai": "*", + "karma": ">=0.10.9" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "dependencies": { + "minimist": "1.2.0" + } + }, + "node_modules/karma-mocha/node_modules/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "node_modules/karma/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=0.12" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/less/node_modules/request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "optional": true, + "dependencies": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/log4js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "dependencies": { + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/log4js/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/log4js/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/lzma": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/lzma/-/lzma-2.3.2.tgz", + "integrity": "sha1-N4OySFi5wOdHoN88vx+1/KqSxEE=", + "bin": { + "lzma.js": "bin/lzma.js" + } + }, + "node_modules/marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "dependencies": { + "mime-db": "1.49.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.0.tgz", + "integrity": "sha512-d6RWgYPILd+AoWVOxiD0UwUqRicnE1inTxMr40CXOgqYve1MvnKntoLAtLIcxjEeVjEoYYTe5QAq3mUc6/ySjQ==", + "dependencies": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "node_modules/mocha/node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "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.)", + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/module-deps/node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dependencies": { + "better-assert": "~1.0.0" + } + }, + "node_modules/parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dependencies": { + "better-assert": "~1.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "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" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "node_modules/performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "optional": true + }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss": { + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", + "dependencies": { + "chalk": "^2.3.2", + "source-map": "^0.6.1", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-calc/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-colormin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-convert-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-comments/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-comments/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-empty/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-overridden/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-merge-longhand/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-merge-rules/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-font-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-gradients/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-params/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-selectors/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-charset/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-charset/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-display-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-positions/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-repeat-style/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-string/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-timing-functions/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-unicode/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-url/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-whitespace/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-ordered-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-initial/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-initial/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-reduce-transforms/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-unique-selectors/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-unique-selectors/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz", + "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "optional": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "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", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/puppeteer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", + "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", + "hasInstallScript": true, + "dependencies": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "engines": { + "node": ">=8.16.0" + } + }, + "node_modules/puppeteer/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/puppeteer/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/puppeteer/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/pxt-common-packages": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/pxt-common-packages/-/pxt-common-packages-9.0.1.tgz", + "integrity": "sha512-gfHsK431IR1w1BNbVhoYOEsT9j0aSsZHoyatozjnEd3g6YyKyXUi8h5NsMIJPizHzYPbiRvd+Ag2nsweGnWkNg==", + "dependencies": { + "pxt-core": "^6.13.9" + } + }, + "node_modules/pxt-common-packages/node_modules/pxt-core": { + "version": "6.13.57", + "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-6.13.57.tgz", + "integrity": "sha512-1FE26mvBLCW5b83Hai7bxEo27MnysGfyVte6gUTjs2zfUw6wv7IA58WWTrxCT5Vs+rTOtva4UpN3K4j9hxsnNQ==", + "dependencies": { + "@microsoft/immersive-reader-sdk": "1.1.0", + "applicationinsights-js": "^1.0.20", + "browserify": "16.2.0", + "chai": "^3.5.0", + "cssnano": "4.1.10", + "dompurify": "2.0.8", + "faye-websocket": "0.11.1", + "karma": "4.4.1", + "karma-chai": "0.1.0", + "karma-chrome-launcher": "3.1.0", + "karma-mocha": "1.3.0", + "less": "2.7.3", + "lzma": "2.3.2", + "marked": "0.3.19", + "mocha": "5.1.0", + "pngjs": "3.4.0", + "postcss": "6.0.21", + "promise.prototype.finally": "^3.1.2", + "puppeteer": "^2.0.0", + "request": "2.88.0", + "rimraf": "2.5.4", + "rtlcss": "2.2.1", + "sanitize-html": "1.22.0", + "semantic-ui-less": "2.2.14", + "terser": "5.6.0" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/pxt-core": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-7.0.12.tgz", + "integrity": "sha512-i7caqFdwTB4Lt5yaGwCDmb+3HiBp0HIB2If0zIt7MQ9RV3vBxY0vtsd+BRoiYLPnX3vXAXQPycJgVdTntntNrw==", + "dependencies": { + "@microsoft/immersive-reader-sdk": "1.1.0", + "applicationinsights-js": "^1.0.20", + "browserify": "16.2.0", + "chai": "^3.5.0", + "cssnano": "4.1.10", + "dompurify": "2.0.8", + "faye-websocket": "0.11.1", + "karma": "4.4.1", + "karma-chai": "0.1.0", + "karma-chrome-launcher": "3.1.0", + "karma-mocha": "1.3.0", + "less": "2.7.3", + "lzma": "2.3.2", + "marked": "0.3.19", + "mocha": "5.1.0", + "pngjs": "3.4.0", + "postcss": "6.0.21", + "promise.prototype.finally": "^3.1.2", + "puppeteer": "^2.0.0", + "request": "2.88.0", + "rimraf": "2.5.4", + "rtlcss": "2.2.1", + "sanitize-html": "1.22.0", + "semantic-ui-less": "2.2.14", + "terser": "5.6.0" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", + "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.11.0.tgz", + "integrity": "sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.17.0" + }, + "peerDependencies": { + "react": "^16.0.0" + } + }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/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==" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/request/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/request/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/request/node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/request/node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/request/node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/request/node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "node_modules/rimraf": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rtlcss": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", + "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", + "dependencies": { + "chalk": "^2.3.0", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.14", + "strip-json-comments": "^2.0.0" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize-html": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.22.0.tgz", + "integrity": "sha512-3RPo65mbTKpOAdAYWU496MSty1YbB3Y5bjwL5OclgaSSMtv65xvM7RW/EHRumzaZ1UddEJowCbSdK0xl5sAu0A==", + "dependencies": { + "chalk": "^2.4.1", + "htmlparser2": "^4.1.0", + "lodash.clonedeep": "^4.5.0", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.mergewith": "^4.6.1", + "postcss": "^7.0.27", + "srcset": "^2.0.1", + "xtend": "^4.0.1" + } + }, + "node_modules/sanitize-html/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/sanitize-html/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/semantic-ui-less": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/semantic-ui-less/-/semantic-ui-less-2.2.14.tgz", + "integrity": "sha512-JLkTqjOtct+OwM/JRv0SH76gCC0eE98xp5G4D29e9VbJ66QjWD3nB3waB7drpaMUFXo/YbKcyNOJBgMamcJI0Q==", + "dependencies": { + "jquery": "x.*" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dependencies": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "deprecated": "This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.", + "optional": true, + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dependencies": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "node_modules/socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dependencies": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dependencies": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/srcset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-2.0.1.tgz", + "integrity": "sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "dependencies": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/streamroller/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/streamroller/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/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==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "optional": true + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/terser": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", + "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "node_modules/type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "engines": { + "node": "*" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typescript": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "node_modules/umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dependencies": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/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==", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ws/node_modules/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==" + }, + "node_modules/xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } - } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "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" - } - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - }, - "dependencies": { + "dependencies": { + "@microsoft/immersive-reader-sdk": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@microsoft/immersive-reader-sdk/-/immersive-reader-sdk-1.1.0.tgz", + "integrity": "sha512-ULNUKUzb2WzcXv3Ot8yK8LX28C23uCifOYIlAQHE7QKCIPzIMq3ncaO8ymuO59njd7imFjU0DluizLuDzh2B0g==" + }, + "@types/marked": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", + "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", + "dev": true + }, + "@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==" + }, + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "@types/react": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.7.tgz", + "integrity": "sha512-tHpSs7HMyjnpyfzka1G0pYh7rBNdpwGgcIDT4vfV6jUaR69yOHo/vNH2H+d9iYHo9xnX4qDe7UalPe9HiGRkLw==", + "dev": true, + "requires": { + "csstype": "^2.2.0" + } + }, + "@types/react-dom": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.3.tgz", + "integrity": "sha512-xAvZiGhQlEhjStoKktoai8CelXVFBaSN6JX4vy1UQioRba3c2vum1TGzR0thHoEauZtIwzWg8mos0AHu2ne4jw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/react": "*" + } + }, + "@types/web-bluetooth": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.4.tgz", + "integrity": "sha512-C+BgVBBGY9c6ixcc5PsKAmGaCy3bswZ5zx/AWIAik9dgFuBkFsXBA3ze69jJi05xdZQ99QkfBSVIX6zl+6Tmww==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "optional": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "optional": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "optional": true, + "requires": { + "jsonify": "~0.0.0" + } + } + } }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, - "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==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "optional": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "optional": true - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - }, - "dependencies": { - "dom-serializer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.0.1.tgz", - "integrity": "sha512-1Aj1Qy3YLbdslkI75QEOfdp9TkQ3o8LRISAzxOibjBs/xWwr1WxZFOQphFkZuepHFGo+kB8e5FVJSS0faAJ4Rw==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "entities": "^2.0.0" - } + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } }, - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } }, - "domutils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.2.0.tgz", - "integrity": "sha512-0haAxVr1PR0SqYwCH7mxMpHZUwjih9oPPedqpR/KufsnxPyZ9dyVw1R5093qnJF3WXSbjBkdzRWLw/knJV/fAg==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0" - } - } - } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-parser-js": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", - "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "requires": { - "agent-base": "5", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } + "applicationinsights-js": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/applicationinsights-js/-/applicationinsights-js-1.0.21.tgz", + "integrity": "sha512-AUkkm8OWfCgbBuMe7kSAwUFpc1e2y+WisieQx/VgCS+BT/0AubmnGZ1yQ+zkENVriM9qArKNjLqTQp38x995wg==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "optional": true - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "requires": { - "source-map": "~0.5.3" - } - }, - "insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", - "requires": { - "JSONStream": "^1.0.3", - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - } - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "requires": { - "buffer-alloc": "^1.2.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "karma": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", - "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", - "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "braces": "^3.0.2", - "chokidar": "^3.0.0", - "colors": "^1.1.0", - "connect": "^3.6.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.14", - "log4js": "^4.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.1.1", - "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.3.0" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "optional": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "karma-chai": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", - "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=" - }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "requires": { - "which": "^1.2.1" - } - }, - "karma-mocha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", - "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "requires": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, - "less": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", - "requires": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.2.11", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "2.81.0", - "source-map": "^0.5.3" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "optional": true + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "optional": true + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "optional": true + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - } - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "log4js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", - "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", - "requires": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.4", - "streamroller": "^1.0.6" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lzma": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/lzma/-/lzma-2.3.2.tgz", - "integrity": "sha1-N4OySFi5wOdHoN88vx+1/KqSxEE=" - }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "requires": { - "mime-db": "1.42.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "mocha": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.0.tgz", - "integrity": "sha512-d6RWgYPILd+AoWVOxiD0UwUqRicnE1inTxMr40CXOgqYve1MvnKntoLAtLIcxjEeVjEoYYTe5QAq3mUc6/ySjQ==", - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "module-deps": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.2.tgz", - "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "node-abi": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.18.0.tgz", - "integrity": "sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==", - "requires": { - "semver": "^5.4.1" - } - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - }, - "postcss": { - "version": "6.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", - "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", - "requires": { - "chalk": "^2.3.2", - "source-map": "^0.6.1", - "supports-color": "^5.3.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "prebuild-install": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.5.tgz", - "integrity": "sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "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==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "optional": true, - "requires": { - "asap": "~2.0.3" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "optional": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "puppeteer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", - "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", - "requires": { - "@types/mime-types": "^2.1.0", - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "mime-types": "^2.1.25", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "pxt-common-packages": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/pxt-common-packages/-/pxt-common-packages-7.0.4.tgz", - "integrity": "sha512-s1tTRqgkax0VhhqRdzfmKVB9/pw4RieLyPIFmKK77NhMNuvwGDF5DnPL2fknwv6Prd2ozeLoUOztDPaCqGj9XQ==", - "requires": { - "@jacdac/jacdac-ts": "^0.0.9", - "pxt-core": "^5.37.15" - }, - "dependencies": { - "pxt-core": { - "version": "5.37.83", - "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-5.37.83.tgz", - "integrity": "sha512-4HMV9Zkwu2MB6rdbZNK95pvIvORe/rVBQHs34Eby07wwtB2B4fac0Nnq83Y+zNLSzDd6Th51mXdKIrJjYxLo2w==", - "requires": { - "applicationinsights-js": "^1.0.20", - "bluebird": "3.5.1", - "browserify": "16.2.0", - "chai": "^3.5.0", - "cssnano": "4.1.10", - "dompurify": "2.0.8", - "faye-websocket": "0.11.1", - "karma": "4.4.1", - "karma-chai": "0.1.0", - "karma-chrome-launcher": "3.1.0", - "karma-mocha": "1.3.0", - "less": "2.7.3", - "lzma": "2.3.2", - "marked": "0.3.19", - "mocha": "5.1.0", - "pngjs": "3.4.0", - "postcss": "6.0.21", - "puppeteer": "^2.0.0", - "request": "2.88.0", - "rimraf": "2.5.4", - "rtlcss": "2.2.1", - "sanitize-html": "1.22.0", - "semantic-ui-less": "2.2.14", - "uglify-js": "3.3.21" - } - } - } - }, - "pxt-core": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-6.0.23.tgz", - "integrity": "sha512-3RYVuojjcN3AkFxivFnjRkghknXGbfVGYwkzdx6UGLlr4c+AtZqKJf9SNV0eJBDpQEukpe4DXEct7ADWHtXwoA==", - "requires": { - "applicationinsights-js": "^1.0.20", - "bluebird": "3.5.1", - "browserify": "16.2.0", - "chai": "^3.5.0", - "cssnano": "4.1.10", - "dompurify": "2.0.8", - "faye-websocket": "0.11.1", - "karma": "4.4.1", - "karma-chai": "0.1.0", - "karma-chrome-launcher": "3.1.0", - "karma-mocha": "1.3.0", - "less": "2.7.3", - "lzma": "2.3.2", - "marked": "0.3.19", - "mocha": "5.1.0", - "pngjs": "3.4.0", - "postcss": "6.0.21", - "puppeteer": "^2.0.0", - "request": "2.88.0", - "rimraf": "2.5.4", - "rtlcss": "2.2.1", - "sanitize-html": "1.22.0", - "semantic-ui-less": "2.2.14", - "uglify-js": "3.3.21" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "react": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", - "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.3" - } - }, - "react-is": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", - "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", - "dev": true - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "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==", - "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" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "optional": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "requires": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "browserify": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.0.tgz", + "integrity": "sha512-yotdAkp/ZbgDesHQBYU37zjc29JDH4iXT8hjzM1fdUVWogjARX0S1cKeX24Ci6zZ+jG+ADmCTRt6xvtmJnI+BQ==", + "requires": { + "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.6.0", + "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.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.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", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "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.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "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==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + } + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + } + } + }, + "caniuse-lite": { + "version": "1.0.30001280", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz", + "integrity": "sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "requires": { + "assertion-error": "^1.0.1", + "deep-eql": "^0.1.3", + "type-detect": "^1.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "optional": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "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", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "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==" + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "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=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "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": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "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": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "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" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "csstype": { + "version": "2.6.17", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", + "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" + } + } + }, + "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==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "requires": { + "domelementtype": "^2.0.1" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + } + } + }, + "dompurify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.8.tgz", + "integrity": "sha512-vIOSyOXkMx81ghEalh4MLBtDHMx1bhKlaqHDMqM2yeitJ996SLOk5mGdDpI9ifJAgokred8Rmu219fX4OltqXw==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.899", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.899.tgz", + "integrity": "sha512-w16Dtd2zl7VZ4N4Db+FIa7n36sgPGCKjrKvUUmp5ialsikvcQLjcJR9RWnlYNxIyEHLdHaoIZEqKsPxU9MdyBg==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "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" + } + }, + "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==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", + "requires": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "dependencies": { + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + }, + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" }, "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "optional": true }, "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "optional": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/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-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "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==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "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==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "optional": true + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } }, "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==" - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "rimraf": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", - "requires": { - "glob": "^7.0.5" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rtlcss": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", - "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", - "requires": { - "chalk": "^2.3.0", - "findup": "^0.1.5", - "mkdirp": "^0.5.1", - "postcss": "^6.0.14", - "strip-json-comments": "^2.0.0" - } - }, - "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==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize-html": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.22.0.tgz", - "integrity": "sha512-3RPo65mbTKpOAdAYWU496MSty1YbB3Y5bjwL5OclgaSSMtv65xvM7RW/EHRumzaZ1UddEJowCbSdK0xl5sAu0A==", - "requires": { - "chalk": "^2.4.1", - "htmlparser2": "^4.1.0", - "lodash.clonedeep": "^4.5.0", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.mergewith": "^4.6.1", - "postcss": "^7.0.27", - "srcset": "^2.0.1", - "xtend": "^4.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "optional": true + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "requires": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semantic-ui-less": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/semantic-ui-less/-/semantic-ui-less-2.2.14.tgz", - "integrity": "sha512-JLkTqjOtct+OwM/JRv0SH76gCC0eE98xp5G4D29e9VbJ66QjWD3nB3waB7drpaMUFXo/YbKcyNOJBgMamcJI0Q==", - "requires": { - "jquery": "x.*" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "shasum-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", - "requires": { - "fast-safe-stringify": "^2.0.7" - } - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "requires": { + "call-bind": "^1.0.0" + } }, "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "srcset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-2.0.1.tgz", - "integrity": "sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ==" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "streamroller": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", - "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", - "requires": { - "async": "^2.6.2", - "date-format": "^2.0.0", - "debug": "^3.2.6", - "fs-extra": "^7.0.1", - "lodash": "^4.17.14" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "karma": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", + "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^3.0.2", + "chokidar": "^3.0.0", + "colors": "^1.1.0", + "connect": "^3.6.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.14", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", + "requires": {} + }, + "karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "requires": { + "which": "^1.2.1" + } + }, + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "requires": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.2.11", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "2.81.0", + "source-map": "^0.5.3" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "optional": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + } + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" + }, + "lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "log4js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "requires": { + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "lzma": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/lzma/-/lzma-2.3.2.tgz", + "integrity": "sha1-N4OySFi5wOdHoN88vx+1/KqSxEE=" + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.0.tgz", + "integrity": "sha512-d6RWgYPILd+AoWVOxiD0UwUqRicnE1inTxMr40CXOgqYve1MvnKntoLAtLIcxjEeVjEoYYTe5QAq3mUc6/ySjQ==", + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "requires": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "requires": { + "resolve": "^1.17.0" + } + } + } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "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==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "optional": true + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", + "requires": { + "chalk": "^2.3.2", + "source-map": "^0.6.1", + "supports-color": "^5.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } }, "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "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==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "requires": { + "asap": "~2.0.3" + } + }, + "promise.prototype.finally": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz", + "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "optional": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "puppeteer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", + "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", + "requires": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "pxt-common-packages": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/pxt-common-packages/-/pxt-common-packages-9.0.1.tgz", + "integrity": "sha512-gfHsK431IR1w1BNbVhoYOEsT9j0aSsZHoyatozjnEd3g6YyKyXUi8h5NsMIJPizHzYPbiRvd+Ag2nsweGnWkNg==", + "requires": { + "pxt-core": "^6.13.9" + }, + "dependencies": { + "pxt-core": { + "version": "6.13.57", + "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-6.13.57.tgz", + "integrity": "sha512-1FE26mvBLCW5b83Hai7bxEo27MnysGfyVte6gUTjs2zfUw6wv7IA58WWTrxCT5Vs+rTOtva4UpN3K4j9hxsnNQ==", + "requires": { + "@microsoft/immersive-reader-sdk": "1.1.0", + "applicationinsights-js": "^1.0.20", + "browserify": "16.2.0", + "chai": "^3.5.0", + "cssnano": "4.1.10", + "dompurify": "2.0.8", + "faye-websocket": "0.11.1", + "karma": "4.4.1", + "karma-chai": "0.1.0", + "karma-chrome-launcher": "3.1.0", + "karma-mocha": "1.3.0", + "less": "2.7.3", + "lzma": "2.3.2", + "marked": "0.3.19", + "mocha": "5.1.0", + "pngjs": "3.4.0", + "postcss": "6.0.21", + "promise.prototype.finally": "^3.1.2", + "puppeteer": "^2.0.0", + "request": "2.88.0", + "rimraf": "2.5.4", + "rtlcss": "2.2.1", + "sanitize-html": "1.22.0", + "semantic-ui-less": "2.2.14", + "terser": "5.6.0" + } + } + } + }, + "pxt-core": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/pxt-core/-/pxt-core-7.0.12.tgz", + "integrity": "sha512-i7caqFdwTB4Lt5yaGwCDmb+3HiBp0HIB2If0zIt7MQ9RV3vBxY0vtsd+BRoiYLPnX3vXAXQPycJgVdTntntNrw==", + "requires": { + "@microsoft/immersive-reader-sdk": "1.1.0", + "applicationinsights-js": "^1.0.20", + "browserify": "16.2.0", + "chai": "^3.5.0", + "cssnano": "4.1.10", + "dompurify": "2.0.8", + "faye-websocket": "0.11.1", + "karma": "4.4.1", + "karma-chai": "0.1.0", + "karma-chrome-launcher": "3.1.0", + "karma-mocha": "1.3.0", + "less": "2.7.3", + "lzma": "2.3.2", + "marked": "0.3.19", + "mocha": "5.1.0", + "pngjs": "3.4.0", + "postcss": "6.0.21", + "promise.prototype.finally": "^3.1.2", + "puppeteer": "^2.0.0", + "request": "2.88.0", + "rimraf": "2.5.4", + "rtlcss": "2.2.1", + "sanitize-html": "1.22.0", + "semantic-ui-less": "2.2.14", + "terser": "5.6.0" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react": { + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.3.tgz", + "integrity": "sha512-3UoSIsEq8yTJuSu0luO1QQWYbgGEILm+eJl2QN/VLDi7hL+EN18M3q3oVZwmVzzBJ3DkM7RMdRwBmZZ+b4IzSA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.3" + } + }, + "react-dom": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.11.0.tgz", + "integrity": "sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.17.0" + }, + "dependencies": { + "scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "requires": { + "readable-stream": "^2.0.2" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "requires": { - "minimist": "^1.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "requires": { - "acorn-node": "^1.2.0" - } - }, - "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "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" - } - } - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "requires": { - "process": "~0.11.0" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", - "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", - "dev": true - }, - "uglify-js": { - "version": "3.3.21", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.21.tgz", - "integrity": "sha512-uy82472lH8tshK3jS3c5IFb5MmNKd/5qyBd0ih8sM42L3jWvxnE339U9gZU1zufnLVs98Stib9twq8dLm2XYCA==", - "requires": { - "commander": "~2.15.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + }, + "dependencies": { + "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==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "requires": { + "glob": "^7.0.5" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rtlcss": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", + "integrity": "sha512-JjQ5DlrmwiItAjlmhoxrJq5ihgZcE0wMFxt7S17bIrt4Lw0WwKKFk+viRhvodB/0falyG/5fiO043ZDh6/aqTw==", + "requires": { + "chalk": "^2.3.0", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.14", + "strip-json-comments": "^2.0.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize-html": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.22.0.tgz", + "integrity": "sha512-3RPo65mbTKpOAdAYWU496MSty1YbB3Y5bjwL5OclgaSSMtv65xvM7RW/EHRumzaZ1UddEJowCbSdK0xl5sAu0A==", + "requires": { + "chalk": "^2.4.1", + "htmlparser2": "^4.1.0", + "lodash.clonedeep": "^4.5.0", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.mergewith": "^4.6.1", + "postcss": "^7.0.27", + "srcset": "^2.0.1", + "xtend": "^4.0.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semantic-ui-less": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/semantic-ui-less/-/semantic-ui-less-2.2.14.tgz", + "integrity": "sha512-JLkTqjOtct+OwM/JRv0SH76gCC0eE98xp5G4D29e9VbJ66QjWD3nB3waB7drpaMUFXo/YbKcyNOJBgMamcJI0Q==", + "requires": { + "jquery": "x.*" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "optional": true, + "requires": { + "hoek": "2.x.x" + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "srcset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-2.0.1.tgz", + "integrity": "sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "requires": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "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==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "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==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "optional": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "requires": { + "acorn-node": "^1.2.0" + } + }, + "terser": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", + "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "requires": { + "process": "~0.11.0" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "optional": true, + "requires": { + "punycode": "^1.4.1" + } + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "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==", + "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" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + }, + "dependencies": { + "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==" + } + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" - }, - "undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "usb": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/usb/-/usb-1.6.3.tgz", - "integrity": "sha512-23KYMjaWydACd8wgGKMQ4MNwFspAT6Xeim4/9Onqe5Rz/nMb4TM/WHL+qPT0KNFxzNKzAs63n1xQWGEtgaQ2uw==", - "requires": { - "bindings": "^1.4.0", - "nan": "2.13.2", - "prebuild-install": "^5.3.3" - } - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "webusb": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/webusb/-/webusb-1.3.1.tgz", - "integrity": "sha512-Z7JLoko7LHavfeuLteaT2B4+79EKME6EbTGw+Kg2iXCHNlQ2e57A5GZM6wd0uLeLuW+CnvCSV3ZP1u3l9Yxmgw==", - "requires": { - "@types/node": "^8.0.54", - "@types/usb": "^1.5.1", - "usb": "^1.6.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.62", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.62.tgz", - "integrity": "sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw==" - } - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } - } } diff --git a/package.json b/package.json index d8fde0d5..4f4291ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-calliopemini", - "version": "3.0.36", + "version": "4.0.18", "description": "calliope mini target for Microsoft MakeCode (PXT)", "keywords": [ "JavaScript", @@ -33,19 +33,19 @@ "docs/static/icons/favicon.ico" ], "devDependencies": { - "@types/bluebird": "2.0.33", "@types/marked": "0.3.0", - "@types/node": "8.0.53", - "@types/react": "16.0.25", + "@types/node": "8.10.66", + "@types/react": "16.4.7", "@types/react-dom": "16.0.3", "@types/web-bluetooth": "0.0.4", "less": "2.7.3", "react": "16.8.3", + "react-dom": "16.11.0", "semantic-ui-less": "2.2.14", - "typescript": "^3.7.5" + "typescript": "4.2.3" }, "dependencies": { - "pxt-common-packages": "7.0.4", - "pxt-core": "6.0.24" + "pxt-common-packages": "9.0.1", + "pxt-core": "7.0.14" } } diff --git a/pxtarget.json b/pxtarget.json index 50d87560..8f8ada7e 100644 --- a/pxtarget.json +++ b/pxtarget.json @@ -42,10 +42,10 @@ "gc": true, "imageRefTag": 9, "shimRenames": { + "sendBufferAsm": "light::sendWS2812Buffer" }, "patches": { - "0.0.0 - 1.0.0": [ - { + "0.0.0 - 1.0.0": [{ "type": "package", "map": { "microbit": "core", @@ -92,31 +92,27 @@ } } ], - "0.0.0 - 1.4.12": [ - { - "type": "api", - "map": { - "DisplayMode\\s*\\.\\s*BackAndWhite": "DisplayMode.BlackAndWhite" - } + "0.0.0 - 1.4.12": [{ + "type": "api", + "map": { + "DisplayMode\\s*\\.\\s*BackAndWhite": "DisplayMode.BlackAndWhite" } - ] + }] }, - "hidSelectors": [ - { - "usagePage": "0xFF00", - "usageId": "0x0001", - "vid": "0x1366", - "pid": "0x1025" - } - ], + "hidSelectors": [{ + "usagePage": "0xFF00", + "usageId": "0x0001", + "vid": "0x1366", + "pid": "0x1025" + }], "webUSB": false, "useNewFunctions": true }, "compileService": { - "yottaTarget": "calliope-mini-classic-gcc", + "yottaTarget": "calliope-mini-classic-gcc@https://github.com/calliope-mini/target-calliope-mini-classic-gcc#v1.2.3", "yottaCorePackage": "microbit", "githubCorePackage": "calliope-mini/microbit", - "gittag": "v2.2.0-rc6-calliope.rc3", + "gittag": "v2.2.0-rc6-calliope.rc3-iss0.3", "serviceId": "calliope", "dockerImage": "pext/yotta:latest" }, @@ -132,8 +128,7 @@ "continueBlock": true, "functionsOptions": { "useNewFunctions": true, - "extraFunctionEditorTypes": [ - { + "extraFunctionEditorTypes": [{ "typeName": "game.LedSprite", "label": "LedSprite", "icon": "send", @@ -149,7 +144,8 @@ }, "onStartColor": "#54C9C9", "onStartNamespace": "basic", - "onStartWeight": 54 + "onStartWeight": 60, + "onStartGroup": "Control" }, "simulator": { "autoRun": true, @@ -208,9 +204,9 @@ "C15": "C_P15", "C19": "C_P19", "C20": "C_P20", - "EXT_PWR":"EXT_PWR", - "SPKR":"SPKR", - "BTN_A": "BTN_A", + "EXT_PWR": "EXT_PWR", + "SPKR": "SPKR", + "BTN_A": "BTN_A", "BTN_B": "BTN_B", "MOTOR1": "M_OUT1", "MOTOR2": "M_OUT2" @@ -299,7 +295,14 @@ "organizationUrl": "https://makecode.com/", "organizationLogo": "./static/Microsoft-logo_rgb_c-gray-square.png", "organizationWideLogo": "./static/Microsoft-logo_rgb_c-white.png", - "homeScreenHero": "./static/hero.jpg", + "homeScreenHero": { + "imageUrl": "./static/hero.jpg", + "name": "Flashing Heart", + "url": "/calliope/firststeps/firstSteps", + "description": "Let's go – start your first tutorial with Calliope mini", + "cardType": "tutorial" + }, + "homeScreenHeroGallery": "/hero-banner", "homeUrl": "https://makecode.calliope.cc/", "embedUrl": "https://makecode.calliope.cc/", "shareUrl": "https://makecode.calliope.cc/", @@ -309,26 +312,27 @@ "boardName": "Calliope mini", "driveDisplayName": "MINI", "appStoreID": "1309545545", - "crowdinProject": "kindscript", + "crowdinProject": "makecode", "extendEditor": true, "extendFieldEditors": true, "enableTrace": true, + "ignoreDocsErrors": false, + "errorList": true, + "allowPackageExtensions": true, + "addNewTypeScriptFile": true, "experiments": [ - "allowPackageExtensions", - "instructions", + "accessibleBlocks", "debugExtensionCode", "bluetoothUartConsole", "bluetoothPartialFlashing", "simScreenshot", - "simGif" + "simGif", + "blocksErrorList" ], - "bluetoothUartFilters": [ - { - "namePrefix": "Calliope mini" - } - ], - "docMenu": [ - { + "bluetoothUartFilters": [{ + "namePrefix": "Calliope mini" + }], + "docMenu": [{ "name": "Support", "path": "https://calliope.cc/en/impressum" }, @@ -395,6 +399,7 @@ "ar", "bg", "cs", + "cy", "da", "de", "el", @@ -416,6 +421,7 @@ "ru", "si-LK", "sk", + "sr", "sv-SE", "tr", "uk", @@ -428,7 +434,8 @@ "browserDbPrefixes": { "1": "v1", "2": "v2", - "3": "v3" + "3": "v3", + "4": "v4" }, "editorVersionPaths": { "0": "v0" @@ -447,15 +454,46 @@ "chooseLanguageRestrictionOnNewProject": true, "openProjectNewTab": true, "python": true, - "appFlashingTroubleshoot": "/device/windows-app/troubleshoot" + "appFlashingTroubleshoot": "/device/windows-app/troubleshoot", + "immersiveReader": true, + "tutorialCodeValidation": true, + "downloadDialogTheme": { + "webUSBDeviceNames": ["Calliope mini CMSIS-DAP", "DAPLink CMSIS-DAP"], + "minimumFirmwareVersion": "0249", + "deviceIcon": "xicon microbit", + "deviceSuccessIcon": "xicon microbit-check", + + "downloadMenuHelpURL": "/device/usb", + "downloadHelpURL": "/device/usb", + "firmwareHelpURL": "/device/usb/webusb/troubleshoot", + "troubleshootWebUSBHelpURL": "/device/usb/webusb/troubleshoot", + "incompatibleHardwareHelpURL": "/device/v2", + + "dragFileImage": "./static/download/transfer.png", + "connectDeviceImage": "./static/download/connect.png", + "selectDeviceImage": "./static/download/pair.png", + "connectionSuccessImage": "/static/download/connected.png", + "checkFirmwareVersionImage": "./static/download/firmware.png", + "checkUSBCableImage": "./static/download/connect.pn", + "incompatibleHardwareImage": "/static/download/incompatible.png" + }, + "winAppDeprImage": "/static/winapp.PNG", + "showWinAppDeprBanner": false }, "queryVariants": { "hidemenu": { "appTheme": { "hideMenuBar": true } + }, + "androidapp": { + "compile": { + "webUSB": false + }, + "appTheme": { + "disableBlobObjectDownload": true + } } }, - "uploadDocs": true, - "ignoreDocsErrors": true -} + "uploadDocs": true +} \ No newline at end of file diff --git a/pxtwapp/pxtwapp/package.appxmanifest b/pxtwapp/pxtwapp/package.appxmanifest index 32ef2a2c..6a0a309b 100644 --- a/pxtwapp/pxtwapp/package.appxmanifest +++ b/pxtwapp/pxtwapp/package.appxmanifest @@ -1,4 +1,4 @@ - + diff --git a/sim/compat.ts b/sim/compat.ts new file mode 100644 index 00000000..c4d93129 --- /dev/null +++ b/sim/compat.ts @@ -0,0 +1,7 @@ +namespace pxsim { + export interface CommonBoard extends CoreBoard + , EventBusBoard { + bus: EventBus; + edgeConnectorState: EdgeConnectorState; + } +} \ No newline at end of file diff --git a/sim/dalboard.ts b/sim/dalboard.ts index 51bb2627..a231c28e 100644 --- a/sim/dalboard.ts +++ b/sim/dalboard.ts @@ -4,7 +4,11 @@ namespace pxsim { export class DalBoard extends CoreBoard - implements RadioBoard, LightBoard { + implements CommonBoard + , RadioBoard + , LightBoard + , MicrophoneBoard + , ControlMessageBoard { // state & update logic for component services ledMatrixState: LedMatrixState; edgeConnectorState: EdgeConnectorState; @@ -20,17 +24,24 @@ namespace pxsim { rgbLedState: number; speakerState: SpeakerState; fileSystem: FileSystemState; + logoTouch: Button; + speakerEnabled: boolean = true; + controlMessageState: ControlMessageState; // visual viewHost: visuals.BoardHost; view: SVGElement; + // board hardware version + hardwareVersion = 1; + constructor() { super() // components this.lightState = {}; this.fileSystem = new FileSystemState(); + this.controlMessageState = new ControlMessageState(this); this.builtinParts["ledmatrix"] = this.ledMatrixState = new LedMatrixState(runtime); this.builtinParts["buttonpair"] = this.buttonPairState = new ButtonPairState({ ID_BUTTON_A: DAL.MICROBIT_ID_BUTTON_A, @@ -41,8 +52,10 @@ namespace pxsim { }); this.builtinParts["edgeconnector"] = this.edgeConnectorState = new EdgeConnectorState({ pins: [ + DAL.MICROBIT_ID_IO_P12, DAL.MICROBIT_ID_IO_P0, DAL.MICROBIT_ID_IO_P1, + DAL.MICROBIT_ID_IO_P16, DAL.MICROBIT_ID_IO_P2, DAL.MICROBIT_ID_IO_P3, DAL.MICROBIT_ID_IO_P4, @@ -52,12 +65,10 @@ namespace pxsim { DAL.MICROBIT_ID_IO_P8, DAL.MICROBIT_ID_IO_P9, DAL.MICROBIT_ID_IO_P10, - DAL.MICROBIT_ID_IO_P11, - DAL.MICROBIT_ID_IO_P12, + DAL.MICROBIT_ID_IO_P11, DAL.MICROBIT_ID_IO_P13, DAL.MICROBIT_ID_IO_P14, DAL.MICROBIT_ID_IO_P15, - DAL.MICROBIT_ID_IO_P16, 0, 0, DAL.MICROBIT_ID_IO_P19, @@ -71,13 +82,13 @@ namespace pxsim { "P3": DAL.MICROBIT_ID_IO_P16 } }); - this.builtinParts["radio"] = this.radioState = new RadioState(runtime, { + this.builtinParts["radio"] = this.radioState = new RadioState(runtime, this, { ID_RADIO: DAL.MICROBIT_ID_RADIO, RADIO_EVT_DATAGRAM: DAL.MICROBIT_RADIO_EVT_DATAGRAM }); - this.builtinParts["microphone"] = this.microphoneState = new AnalogSensorState(3001 /* DEVICE_ID_MICROPHONE */, 52, 120, 75, 96); + this.builtinParts["microphone"] = this.microphoneState = new AnalogSensorState(3001 /* DEVICE_ID_MICROPHONE */, 0, 255, 75, 180); this.builtinParts["accelerometer"] = this.accelerometerState = new AccelerometerState(runtime); - this.builtinParts["serial"] = this.serialState = new SerialState(); + this.builtinParts["serial"] = this.serialState = new SerialState(runtime, this); this.builtinParts["thermometer"] = this.thermometerState = new ThermometerState(); this.builtinParts["lightsensor"] = this.lightSensorState = new LightSensorState(); this.builtinParts["compass"] = this.compassState = new CompassState(); @@ -97,25 +108,14 @@ namespace pxsim { this.builtinPartVisuals["microservo"] = (xy: visuals.Coord) => visuals.mkMicroServoPart(xy); } - receiveMessage(msg: SimulatorMessage) { - if (!runtime || runtime.dead) return; - - switch (msg.type || "") { - case "eventbus": - const ev = msg; - this.bus.queue(ev.id, ev.eventid, ev.value); - break; - case "serial": - const data = (msg).data || ""; - this.serialState.receiveData(data); - break; - case "radiopacket": - const packet = msg; - this.radioState.receivePacket(packet); - break; + ensureHardwareVersion(version: number) { + if (version > this.hardwareVersion) { + this.hardwareVersion = version; + this.updateView(); } } + initAsync(msg: SimulatorRunMessage): Promise { super.initAsync(msg); @@ -124,6 +124,21 @@ namespace pxsim { const cmpDefs = msg.partDefinitions || {}; const fnArgs = msg.fnArgs; + const v2Parts: pxt.Map = { + "microphone": true, + "logotouch": true, + "builtinspeaker": true, + "v2": true + }; + if (msg.builtinParts) { + const v2PartsUsed = msg.builtinParts.filter(k => v2Parts[k]) + if (v2PartsUsed.length) { + console.log(`detected v2 feature`, v2PartsUsed); + cmpsList.push(...v2PartsUsed); + this.hardwareVersion = 2; + } + } + const opts: visuals.BoardHostOpts = { state: this, boardDef: boardDef, @@ -134,6 +149,7 @@ namespace pxsim { maxHeight: "100%", highContrast: msg.highContrast }; + this.viewHost = new visuals.BoardHost(pxsim.visuals.mkBoardView({ visual: boardDef.visual, boardDef: boardDef, diff --git a/sim/public/icons/jacdac.svg b/sim/public/icons/jacdac.svg new file mode 100644 index 00000000..37c092b2 --- /dev/null +++ b/sim/public/icons/jacdac.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sim/public/sim.manifest b/sim/public/sim.manifest index 1a7b5996..8086bbc8 100644 --- a/sim/public/sim.manifest +++ b/sim/public/sim.manifest @@ -1,9 +1,19 @@ CACHE MANIFEST CACHE: -/cdn/bluebird.min.js /cdn/pxtsim.js /sim/sim.js +/sim/sounds/giggle.wav +/sim/sounds/happy.wav +/sim/sounds/hello.wav +/sim/sounds/mysterious.wav +/sim/sounds/sad.wav +/sim/sounds/slide.wav +/sim/sounds/soaring.wav +/sim/sounds/spring.wav +/sim/sounds/twinkle.wav +/sim/sounds/yawn.wav + NETWORK: * diff --git a/sim/public/simulator.html b/sim/public/simulator.html index 5eb83fc3..16a01a70 100644 --- a/sim/public/simulator.html +++ b/sim/public/simulator.html @@ -19,10 +19,22 @@ body { margin: 0; } - - - + + diff --git a/sim/public/sounds/giggle.wav b/sim/public/sounds/giggle.wav new file mode 100644 index 0000000000000000000000000000000000000000..5187a7ba7eb1cfc980ad3fd40c902ed53fe5db3a GIT binary patch literal 65070 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 literal 0 HcmV?d00001 diff --git a/sim/public/sounds/happy.wav b/sim/public/sounds/happy.wav new file mode 100644 index 0000000000000000000000000000000000000000..1adfa1f11b28e1c6775d6b0133b6bb28749e085e GIT binary patch literal 54318 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 hI1U^KjswSm6}A8X literal 0 HcmV?d00001 diff --git a/sim/public/sounds/sad.wav b/sim/public/sounds/sad.wav new file mode 100644 index 0000000000000000000000000000000000000000..7ed59e5a1d6189a0ab7d16812c9aed8d53abed58 GIT binary patch literal 74286 zcmeI4J(3(Z425SihdP4Gf$!l!s&eYUj#cGy=1i$}wbpTbDIdkNvs2yVG}y#H!ETI7 zt`P|W?|lHfcN72i>!(jY|MYbE2b2%Dbs-_JB{v*tc?F@ zQ)-8><4=f#jiZuNXMJ3Or@_U}caS1PSVwFE*B@<94Nx`>buTrn2qt74GQ~@Rp3j% zph^hs&03MQ7aCI)!N8=Ugl?OMnj_>n;K@2cEisr(aD6O-Pd;!F4yCMWrtLk^DY}YS zqqN0!bSx(V64z ziBmkX`9S#-9m*TILXZO}b3tgJwAyghD}B67DB=#b!Y>S^9IKJ!M*eh5{$H$0#JNd0L?Pun87`f?NpeerGz=2X za%*~s1;X@D2)kGjqey7$3z!d!RzbQ#sqiXh7PzCGw^jXMx6}RHsz|kei%n2%P`nXE zpVB~&E>=wd`V?B?d>O-7V+yH{G5M<;tCdvOsotuq?d|PM>)x@wJ%f~c<(9pF-agOO z=eD%`r`md6mTzAS_6$-+vKLBAidmd255&nz&hI^-Kx1&UDIrJO6T_b z!%zmbGc3eyVo!+KtB3#fAFj@Y)}}sA1m9~+Z@<&m-f`;wvE4lm9+l4Y=Z6~@F5q#% z#Uqdj`fr~NBk~w*GKl*)gM_Ze47k4^$>TsDC_3wyHM*!aMiqQ)Qf!Jm{-Co7a7nQ# zqCl(f#HC1I1|veDYa8SY88$h>2r-!t8)h4+Hf3yDqoS3Qgkxv&Ita@;A)JXsu$?|c zhwe5D3(Pjn=FP$iQ4*7BmUbYn)3#G){4k|>F^l2li;{DmoGrl<<#9Ei#g>V`f8h;2 zlcU;LGZR_LMoDrG+BO$OV0@4%CsTXg%DMFb2xm;?jsaJY9fi8_K%?0OGuQe?^@l%z z{!}ITW6ih8uL;Z#KN-@%kTAYcB#+s`?7Lu3MBo7ur<@Ksa!^%BUF>vN7f{^#I$OUf zyM@X^kfFF$)cP%uJgki=X9tb6T z##Wv-@D;KRxpoS40tvd2)do|dNgCAlN@-vmObPk{BW2WIU!V_|6AFAWh%`uPA#-rf z!R6hWk3RR0ha692v~xZwak0JrV)A^q8TAXz}+yr8ku+nPI+x9a8nq!3006J z+XchDCbi^1!FHV8GrM<1!=Z-g6X*zTvC&0C)s55*A*5#>Ep;P$eYaNMPAsI+ng+i{ zv_HRw5Sr|au5Q8mKeCrwD3(l4GK7I_29nYktPxMQ5mZclW^#DCwvV^l3LM;mXgV!A z$y?HCMjO#O$s-vZqGe)?DZOzu8qb&W%oouqF}y*YIF6yhbtZ<$(Kh^mUCNQM9huA? zYQj=XYamZV=74XeR##`Rns3z^x@0?HGt9t{E+v=-b{#N{7_@S08=fd$%&(G zswIY|E1!NCHV92_%6ekOY!I U5=a6`APFRaB#;Dz1fDPd1DX8|d;kCd literal 0 HcmV?d00001 diff --git a/sim/public/sounds/slide.wav b/sim/public/sounds/slide.wav new file mode 100644 index 0000000000000000000000000000000000000000..fba1293ce22f56f711b8f8f3af5aff460016ac54 GIT binary patch literal 57902 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 literal 0 HcmV?d00001 diff --git a/sim/public/sounds/soaring.wav b/sim/public/sounds/soaring.wav new file mode 100644 index 0000000000000000000000000000000000000000..a0b84c55496b0107f011bff30d8bfacbee92d27f GIT binary patch literal 360494 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 CzZMq& literal 0 HcmV?d00001 diff --git a/sim/public/sounds/spring.wav b/sim/public/sounds/spring.wav new file mode 100644 index 0000000000000000000000000000000000000000..6fa3eca91460a83144daa15c4251527f8b62d346 GIT binary patch literal 91694 zcmeHNJCY^2t*!QCY6-Hm4;h*WxiTbsA{66|H*R-*dO6yZmLh^*fCNa8N#>`D{o?87 zCGkBt0P>df&wu>#%U^%{_VVw){p;_){r<;a{`~Ut^3D9;|Ni@8|Nq;|pI-j+>mR>< zGcs>q{NKm^w-K0(z>ocJBhZDwWCCt;H%Fk099#Gy2;7`>J3NoTL+JFS!`x&&0f8^g zu+x%1p^#tB#c9QRyrVBijp2kJU+S|G7)JQ%ie~|QH$P9W+i3iEtHVk0jKXziy_29j z)yn^k{YpdY5F4p&(gUv@mV>H*x7lXh`>mJ#&ph0YAn7H zt)0^m1V#`a(>W4lpYB+E{aSrd^+@-}qSWXKqDxlke?Y7&j2_{ESd=O~QFO^F{r8J? zMbRbPAB$3>D~b+brF(@~htrm*!kbd0<*DOd=}{rp;j|^H@TL@LdFr@VdQ^yYIBkh4 zyeUOmo;vQ89u;C8PB~G9hl&ViQGZr3thv%V;v_X5WEsw){!F&3xzYRKBsCsn8P1~q zOt!1J(fi>fH6COc&Z7QIwyU|(`$3W#!-Wje*FP3kGzWU~NK#|CkU{$T$HI!{KyMyN zY77@LNMHY0SkWBl%_B*T;X(%Ks~-y^ngg|UET}PD$Y2Ai=fXnmKxHuq)ePl#K}YqO zD_6g(EPA1;q5QJP@JFs(`@YQZk7bsZ8SV;o{p;?G~I%ofoOngYBC|fPz$fV|CJD zAx{sIAp1mxi*Kw>IxOVrK@w!2sBrO()k%kiJUvK)%o7zQ-xz6sM8xQqt>p38Kx`mL zYsiGCEUFPDUWdezzVrz5vO@H{aB@tZmI?EQ&klJfuIs%Oa*qMPnD@LA>_qA=2o)%eeDpq5iB`{ zve5Q5Td}#YREqmr+bHx$CH(+f@DO!(lMr_VNVA@+zZ7e?{y@*#HiBod*I`sGQoR|=(ioud~c*g+X6BIak8 zq2_M~rLD|Dq=M!vrFAWMP3;_tA!f_C9T!UD}`0;D7-iYDY_3;oJ`9D8{PoLm3OO#qK^@uz39U%*N z(rW}fHl72{6Zygkq_d7thLk!&*-0k^64u<=>Y^p@9iCQKx+9d8@y8A`@z~WD4(#_> zt#IlNhVCYqcv^%8EtEBSq=`^5{oPO*YUZa$NHd#megnV~%);Vtd{3YA?J~!fXSsJv zw^Q?H!>|o^n=pKc_rm6uLFIJvb*$BR;oZFowy_Cov>dGW!e&n&+myA=ytZH;??1l3 zzJGkY{rK_r@$vrp9X`yL*Y}?vukI`gyng(Q0-2Jtpi=Tyji;#eUV2KQ7*8>jsuGT$ zSAzI$PH!ioVebS_89|6h~%6q_{kH1kgUP)%^;Y!ab z+PO*l{*~HuGt~|^H0dl-no4(!mnSgw^7d>nHB652`RSj;P!CO`$`|^fqf;q_4z+7iFsFTdSC$1#f>I@c;EUQ5_CNh#iN7Ful5|Lp; zuOHIr7iX{=9W5KC(arntltu?`e!Kz2VYiue$cH%?S#X2!aYVj%BEoh`DP7rQr>{{v_Vq zB&bbh7zt25Pv)#d_8r#VjUm}1Y(Bazu|EZA#i zxWlIPThBb&Wd&o)K0=@PMsdPc*6SHHoe94|-jj)-$C<#cV-(Z`>|1QY?d+5YHsRVl zx%N?D6Q3IZk71(49HDH{xZ>P0WkhdoJJb@!Nz2N{Qwu?W!_%>bgLT4)szg4 zTrr_m*f{wD(;0b+O4e=iL@gXsN(n}APa*4%X*$@#VU{`&e}zfQ$xw08}lf|?RlL4G?@gHO;V@2~AXaC5upgYdGkYe2># zJ0`0jza6Q;`yN%b2G@_tYKdZn?P7!yyA!uUOaQj(VLSTm>G!1@-eFB)J<~ysE%t3b zZr!kFS>qugE9CXwIO9`;GGY4Ve_2p20*us`2+GU`OP~%;tw*XB6f9I=b!Zumu$nI7 z^r}QZBdDbXsPuGvU@mh$6#YZQ@AzHUq-)+YAtRXpVhbyMcjt@4EqYJ0&d|BYvVCG_h(1 zv=Ui30}z}C#>j1EfJ~x$Gr(bQhX8Cpv^8K^+U;d%ju#_p3x6XjA#_s>;cMmmsq17~^V}YytwDM2M0nt{6lKUSDVh3s3H^h@Po#q+F|7dSJw3vI(CKcPijs{S z47y3>)?}Kpce#%1gb!`mb-=~$p3=AanhakDY6AT`-E1E}!;lNxBh#*5XC=eNVcBNa z_`PWS8h(pcw8LAM;QPpRS(BSH*}nZiL03e+un%6-`$`$Px)0dAlXgb*Ft>*KpwdMQ zRZnUY_nx==z>?{*Wus^l6Ps^RJDnV3{NS~G1sj}@tF0aGex>>}eb-n^Q3#s?gI36s zgcX_`l<8`CM}A6B79v-e`ye$Ml$~y2N?{@tHI7Vp3(GCGj#R!Yf?`@mjJ&ISN09n5 zK^bm@J|3G>E0FpOLAe&i6a5BAogS3!K?8yrRA#T)?HAUc>1Dh|{O=d|nJNfdR=Azx z2Sh1rhagzi2-|7rgpE_b&1@HFqj17BVw_)R6ltf9MUmD)e96#a(GOe>G7cF^>vu_) z;Vxn806e94kxmj#F5giS9Vj27@*EO9p?tz{IY6R41K_s=9-e+Yg-8vHVa{-we&1wo)R5Yn}>vPz6#a4SHS)YT{^g6D7~~zVNn^L!dVHBpOv`>@_D_XzJ=kBF?uVR(f|&B}D&_;;b{JEzo|7qy=`DkTX+hA_LRYHapZvI(ex2h2sdB|QMwQl%phpqd$A-nWk zME>;+KKPJzSm5$CvAApbnpn6dab?HE_`2o08VlTgUFA#THXm`A%EgS!d!$L_^iEu# zMAvlR)#dA&M7aB|D4+4^@p55%a-g9fW@!2e2b}ctkZf2o{VfAAQ4V_Y;rU?kpjzt* z7v+n13K$PDg4U^l-c_Cgd(m|Dvx;T;ft)Iyu=CJQxA8;^N9!~(bYWqW36I=B;z$(imD#{@0HIF;tr%7zYLVg=GbTv`63n z)G{TZY~YqiT*58i(K!t%j1Ql0`2D!Zcb0g_J2(%+;#l6K=hHh#!*>Lo!#pEa0zFhL zWd=t)Eq%j`5cBqbnTR~sVSX;zXerM1Es!nH z4_YG=3m1ni+HplWI)h5avjJ!v@1RT-L;Iw;vC9Vp5C0gVZ%%1P!bGG}9d0xdc2H)9 zqA~9uQ`zHmIUA`7LAm9}Qr!#(ln@%CcnLCd6rw^~hrwQ zXafuZO4xz<8srzDT{YAk0^U3l>?QDRX7w#&MW`|Ahz7wD2!bVBN6sm;MqSY`^0MIX zQ**LdbN?|RCz{g1I%UQvcobPK9eehqoM=iS^=5D{gBEiwd-l|m-r7JqGe+v9%qc4q zyRM<0nK|Mr3nR+|f4w9pk)l&`!fEEu89)TQEC?ystWJ_xRwv>q8|Aeb(LMI)ep;Fn zeqprvW$22(f>Ko!G_=BnWtwKOhfUsMVa!EVL-VyJoq=e+(rV`AG{L3}`6q4O`CuVG zzHJmmaJ5YO^3Et+=3OSvXPZt#-nCh3rHg`RkmoO6^?H{Duc5RcZ~v2&|8Ex(JjEh8 zSno3LO?0mEMHA(0E9i)8#yx*kqTeR($wcRBOwQDaJFS9HaFDakd@q;@2ONdzSvlw% zJI<-I-k7M^=m{L+mxxn)79K~6g2H~=NZF#Z*wDj`)Mr9UY*2c^b~-Z=xXD53!+v`L zrzjxew~bWur9NWEVg-i`v*3thm$n%l?^vS2Axlg4PzpkbSY7 zVktou4en3`S&y<5L;jOHq#)%OFi?JCl$9z$Oo|{xn0<-~a)7dD=c6p8*!(j`z{q`K zkoB{|>WUF$=!UNn$}FJlp@=do%^gZH^iuf%$`t?RHwoo{YW686$f3cWi6Ac<7*dLz zAjiMw0H>R{5&sse?%BB<%VkSWtyo9Lw; zS=I;mYZVF>yxQTJb;4O>&vi5+XnhZt)~Q;id-qdT8~n9er@rb$XQtL>>|LWyaLwvz4(mm;x42ZybG3T*GB(fXL)LV?uNbA-tX&3!73Nq4R>2SPV3aScUO^&rzzPl@ih1N0Dwq@_#aDnSS^trqQ~kCX4Te1Y zkq)aIVfp)Tbveb&DWGL_F&&;}u)O!9H8{k(@rQ2oO^=fRSkv2+t4RDH_j zl5QHjICj0M3{?%apZBR}aFm?qJXn$lE1#<9|?W z`@%u$xkFEd-Q@=zsLG;!B`&1fq*6#Qd_MPRH+WH4?m%Wy$IbG#C>$JW>!e)RU4PI4 zt1QY@vg1tAzfF;IyP5H}8(dX!nM55o>)WF6kec++Q(<@cK?kg|sH(KGP_uhA0!+`H pd$c=Tt}wchS){*N-W8>T;kHJp@5hb6Mqneb5!eVUMBvBE{{b8Q3N-)# literal 0 HcmV?d00001 diff --git a/sim/public/sounds/twinkle.wav b/sim/public/sounds/twinkle.wav new file mode 100644 index 0000000000000000000000000000000000000000..5091e036b976529cdf7a435a5476e4224b4b92cf GIT binary patch literal 298030 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 O1PlQ~U<(2tzy2TRtr|Z7 literal 0 HcmV?d00001 diff --git a/sim/public/sounds/yawn.wav b/sim/public/sounds/yawn.wav new file mode 100644 index 0000000000000000000000000000000000000000..b3f234b104cba2afdd330667fca0146cbcd5d544 GIT binary patch literal 123950 zcmeHQIg%tha_z5ChvruE4 z&H#LQ@A(p0Jv8fo|F^&V<)8oWk01Z}FaPncfBWyh|I{`m0^ zKmO~lfB)+r&gS>|ISL#Fjsi!4qrg$%C~y=w3LFKF0!M+Pz)|2Ra1=NS90iU7M}ecj zQQ#KYFEsr^=6Hx_ zzsVt*ivHpu^~b29sd%XPW2md3?EaXOg6jAWm=gXc6)G^*fau;W05!#2Vp*Rtr3?@O z=@!IFP4V=5nMyTWsSB3i_nfeo17KylyndtYLtwA71q#0?1?lt)4qa)W57;Td!Bb-T zTRg?X6V~fT1Y^?7Xv-Q@E}48PBxCbPTS2fT9OR-;1G@;<01T)RTUH1ef_y4yBkM?# zX^Kg}?zRO!46prkT1Z*mbLypMwOH6Ca;Gji?G{d=@rB((D9@i}5IjOY<)hU-&43*; zVw+ECjd;2|JNz_1l*J7KEHE@?fLk?3^4eB&7vj>>V~jD%#-*!HUTOS78|ko@%( z{*&4HKlP)`kXU`?Nd7FwVn>Z=-Xs5{oJ9il#hH^9#V{PF48C;K`W(kS{TiBt?oUvB ziE~?&RZHD-=W)AH4sbSAWAzcLysr4PZp%B122Y&VAy-6v1GU!3LZh@R*V5b`#lM{M z#wj<;<56k>0>t{5Zla1&ZN4VTVA4VJcfdGEY0&&Z1==lR=&(VmyUZ_4a4o?uknNRU zb-^M|Ck)^FwBBuPVnwKZtl(g!E{EBSvK>AS!vztv@Y*@mcthIF;jgo5E?q7B?sJQ3 z8;Z4x)|%opfXyFubg!(I*N9pl_2OO*bU;-|>czn-^uW4VTo;MHXiRI} zl=?(U|EnPFf{|gF6!3-=X|mNeP%mhw#m{s}P@$Hjs1;n2!bGo~yH_MN#rOr){DAU( z6%<+032klD>$4VJy`Z4f78$>o9;Ss-jfYw-uB!UE2vVmmxkL8xW_SaSdd|~0+b#k_ z$>R;E)Ba&_ZPbJNoz&kN786)ie&K~ptzEEK_LGEuMUdX>ZztDEz${jn0O{RsYoa>V z{Dum#a<-o7y-sSuVZ=Sgeyi_dV-k*7y^GsqYj$%PY8y4c>$<_qg06gd4>?Z-U;tXB0D!J;+5kYDw}qDF)D?i68wz?^&w(cRzI33X?QYixQNO9?K(DBN zljl98(JQLo3^a8mfiBL>4O<_&Z2HX-L3OG1o7p1hWA(_*pS~Boh@KBaaBjZ7jt1|l zL0EBOUvIpDWvQ>;%Qvu*^qsizMqU+bC0#poqu5@kK%-)>6>euV_M-6>f=OjJJ0bX4 z^;v!Pop~4`ovOb<748DJHjhg6^}kp^E3h&!LOYw}N*$_&^^?KQgkI$fo(RtK=dhns z`{i4~Q1E9q$)Iwp3!Xd6cl@8ef5ewcxbaszdd@?TUn&(i5dwho=pNSRK*$aBZ41G^ z7|p40bs|qgfJGH%MJYopfOQdmK z*r~m>&bYS6e^AuoEjo~hEe0lc8-k^J&{|ix-X>~0(a@f0OV{gEQoTPzd#4&j2<;jT zjYK=qlIlgSdlCs;St5VWq)Uu?q9z~w{Y*$iwh3&YY9xe2v!V(RmT;{)RY>$HTxaV# z+rw`%uR_I_wAMnoJ;W4_?O|cS*m^t=uDp2%`d%-Dep7yROHJ2nN5aV13q}adab**c zAS~1;tzip1EYW7zk&va}UDylz zw5#@tI*jecTk7C>yF~iR(r=Q}ipIJ|HTAY$p|a($4*CraUX%xY*i9)ycWGXudZA5A zsvbzJU3r64^&2LF>k;%Z-h5Z#bV>CaqojHnEMgm%souXcH@JKB&Yrnpo$UiSaBP!B zvGp72{Ztmn6Lt~cCH?L`IKw5=b3-?rQwP^P8@kCGKYGxk&ud-wwLT?}-1ww0a|}Uw z@lTcM2(K);F57=UtxGiaMSiUDw#Ces*r z;)>Y8(*R(FoS&73jfd+5VH2(pO=$J4o%V8=mkMx#X}?X}G@Nq{w*UqnJ%e&in)osIt-WWRvow+&mCtV~8WS>?IHyp1qsEtCA_CZ8yBa>)hj zer=i%dDLa1`ukmMojf!zJ9V+O*ii8YH8uz~)UN&XD873qtW57?xmR+hUYNcm{>oU1 zeZ;zY2;?v@v@RR!bD@U?)ML{6$fEutc?b6Q|0E7xixiDiQUYW#xrgJ&pK zWc&hOvMQ1Bi?!6p#d=K-ETP)g>P2fejTikck9s@{f;Se*x|qhhecHo022^*Iqh1-S z$}uSJB=Ku#?=I6lXjAXtJ2=0(-16-U%QG%FezB2 zXe(HxP+zk5Dd;NM|2|?bccq7GESh3nBvbK1YW4jpgDq+#m%=nJ&qOjQ?x2NIPxw*fbMD8d2?Q5`m&F5c^ivJ1SO#qKRfBESk{t$4z00rXF1eZ(l zT!5~q-`zkhjVes#Q61#|`rHr|vll$5hW?I&su$ouR|rhX4GJz`0Vh?9fr$_#E!xT_ zyvC$e4rw4NoK!);WFWEb19^yv1|LkoNhdU70&y!w5QUg@(K%50Jy&!fL}|vgJJn$< zCsX(=foq!^Q`O1o320iECY>~DLj#3xLiKl{;gdT6jWJ7z+GI=EZPgwJ5a$rTVpDQ0 zDlOnGope7@sJ96v0IiM$hP#dgnYSL%wn+;Bk2)j~SW_`Hs}jIVPR@y*+Y^jIy8zej zYGQ8>S1k<570+mCrjcMcY^AMdQlH?N#AC%7l7nvrWHC<>u0dlG7I3{GjzUYD+u(Ev zW{e#?qGsZuQo={`j3;Mui0-|^th*?ZcGwGA_m%_tXeLc40!kod;7KBzWK05c-8;r)Z}EHpgG5%1Nl$e04S{pU5{!NfMd#t; zym)jV1NiQP4K<*+mGT-iQGgf0At@;u4Q`7fDZV8N6t0LqbWW+dI0o=T;i+VM!jHm1 z`$9I@0L3{vIIV{CSr$l3Je?{_=%Pw9hiH>XL#-uJ9expjBP*TpF+M>ek}T?|4O@xZ|~J)zx@+g#-apD?={*ENP8fIQHO> zsD-Cbf@67CO3dit6f6mz0&Gpw?CR6-tVG%iaWA-zKxzxI__i(7!rONBrf&r~3eYsP zuVCkzG>(r=y$k2JO_+ zmBSRjLxif+D=GUH#R_trA#9>fa>Pa3;bjXRVJ+tok9%p zR*CCLR9Mq4LdkVp9k~{qOl(ZXt+cI|&cbu! zSxs^=7SJF$I9mVI>)LGvCzEk=LNAJE;jt$NG zCPgP*k{bvAT;Et2JAGO;Af$P>b;lS&v_8C6ctq2}obS-uBn_II8VAh>qi1-{Kegy`RnfW`G+mC$k2u+0X-}&0>;(g{P|~@3vGF1QD`(S!_<+2lC>(995eh?qYKOufoX|LZ&>Ev1X{%O|2jB7g6!RxV95il2+1S*e{Q=t$+;zv zOwDXqF2X7#7)l}88CY^mwun+|t_Zjs;nskoj42qYy>mQcMK*>@6HPO~-)F2rCvvTZ zE?ZF`f^ylc4J})--EEDw6q*)nhGsdinPodxwqlBDu&7`Ida>9!;T)`9s2WwyM?E!u zH70suiIi=qU&KUDk`;yIUkdE4AViuYrv@U3vJFL~03u%Xa(Fh5NuNHgDvZF&N1^4) zCa6voCGX9K#%rSFZ;^;aEmR-NSdc=M8cC%}qP!W1LD&f(kqj!7vk)?cAjtwiG9%2^|B*NI14oRah&iJ?qryg=_cL8 zsmd^Ql-+D1w-@n>Fsulf82Hz8u0X3P*km^b(V`R&^mz(D`mpP{B(O8pSIH zKe2WET`K%t=ZyqK64X?moLD zK3CS#e=hPSc?v6MbV9v{RZnhin_3m4Oe z#w?a3v=KuR9|J=;pg#9Egi(kAf=4ONEp4t3RRbm=6d%SQu${ew@yZP)^;5n}bC=&V zVJxe=xESKd^2Krq=ppDN^?K&IGd0hJ@7qt5B+OTOHQw<6*+gfC#BS)eVduE=wf_G|2`eCXZ|F_T|A>Y>+|tkA=Drs%~(3s02EfoBnOF_P@GXwp$pn@LR? z5f~{)u|L2H{CxB{f^Y;zyF#ThV@bmS&EGx%fX*fKz}&%s;R~Dvyh)ANvoWdLAmOO4Sjp8QG*yUq8BgY?AHPyg~y%h&6}VRxRq&HA-~w(_<7{5P!XCzDtS zG{>xx`Gb5pn($`7l&(UV&IM}6qZI42w5m!T>B*#zanvPh^to!tEiQJ3D8)X@;!V)V zE?Sl^3khgEvsk8gWzh#x%$B7HRE#NFT7Yh#6hktYHF1-Xq|FKCm915HWvys01mxr$ zQa3`^q9Pv-T1lcfEsFz#u8>L%S#r8yWQ(rkXb=KmV}!?Zn*{leYG}phTJW~ne-~CS zv?!(kG(SWDV<%S z-7%(X?7h_x%ev!`NG2*~KO|kb1L(z=(>&AsT}*%7JuV6#CoTl{p*X@E)CjFKKQB!y zR7@yGFZ@oZAoAT>dZ}ik7=%{pcdNI0$l1DF9kWlg_e!WG@JQXkYL`ZnN zNJ)Dll)MQN;dT4}t!Kv;1EkCjH6h{!i-UKhrzv<3H28(vjYk ze$25*xWX?8Pm|K1BS2^UtOT1txiAz8rN*kjT#koV;3c(Ups-G)e0azi;CbH|ZE4Sw zQwoC|zhh*=kT6jQ?lT7IWDw*OEXjr?a66WyDeRVHD@oZ&Ok#;zkwhJ!Q@$Ud7 zmdk)*%$yugkT{+-tV~8k?B_#46%aZIi$@>>9@WtA355tCUo9vaCFFRJaKk~S1_y~g zK2KPbNitLn8ZGd-Z()W(f|gknHHb&oVhfC@c>_iu0{11zb+@q$kf_8J5}(_ozy&n~ zSCF;7gDa^#{1TshQ{dBB(C7RDLrm`)kUV%24?r>>3B5kJYNgT@$+eiHNjmQR)A+l?vy^Z6)n6gUbT1&#to Zfuq1t;3#kuI0_sEjsi!49SZ#X@&BBW4vGK( literal 0 HcmV?d00001 diff --git a/sim/state/buttonpair.ts b/sim/state/buttonpair.ts index 419b8d39..25992d5d 100644 --- a/sim/state/buttonpair.ts +++ b/sim/state/buttonpair.ts @@ -1,4 +1,14 @@ namespace pxsim.input { + export function onButtonEvent(button: number, buttonEvent: number, handler: RefAction): void { + let b = board().buttonPairState; + if (button == b.props.ID_BUTTON_AB && !b.usesButtonAB) { + b.usesButtonAB = true; + runtime.queueDisplayUpdate(); + } + pxtcore.registerWithDal(button, buttonEvent, handler); + } + + // Deprecated export function onButtonPressed(button: number, handler: RefAction): void { let b = board().buttonPairState; if (button == b.props.ID_BUTTON_AB && !b.usesButtonAB) { diff --git a/sim/state/compass.ts b/sim/state/compass.ts index debf76f4..41c82c97 100644 --- a/sim/state/compass.ts +++ b/sim/state/compass.ts @@ -8,8 +8,22 @@ namespace pxsim.input { return b.heading; } + export function assumeCalibrationCompass(){ + } + + export function clearCalibrationCompass(){ + } + + export function isCalibratedCompass(): boolean { + // let b = board().compassState; + // return b.isCalibrated; + // TODO + return true; + } + export function magneticForce(): number { // TODO return 0; } + } \ No newline at end of file diff --git a/sim/state/edgeconnector.ts b/sim/state/edgeconnector.ts index f403a8bc..32d33e24 100644 --- a/sim/state/edgeconnector.ts +++ b/sim/state/edgeconnector.ts @@ -1,17 +1,27 @@ namespace pxsim.input { + export function onPinTouchEvent(pinId: number, pinEvent: number, handler: RefAction) { + let pin = getPin(pinId); + if (!pin) return; + pin.isTouched(); + runtime.queueDisplayUpdate(); + pxtcore.registerWithDal(pin.id, pinEvent, handler); + } + + // Deprecated export function onPinPressed(pinId: number, handler: RefAction) { let pin = getPin(pinId); if (!pin) return; pin.isTouched(); - runtime.queueDisplayUpdate(); + runtime.queueDisplayUpdate(); pxtcore.registerWithDal(pin.id, DAL.MICROBIT_BUTTON_EVT_CLICK, handler); } + // Deprecated export function onPinReleased(pinId: number, handler: RefAction) { let pin = getPin(pinId); if (!pin) return; pin.isTouched(); - runtime.queueDisplayUpdate(); + runtime.queueDisplayUpdate(); pxtcore.registerWithDal(pin.id, DAL.MICROBIT_BUTTON_EVT_UP, handler); } @@ -95,51 +105,68 @@ namespace pxsim.pins { } export function analogSetPitchPin(pinId: number) { + const b = board(); + if (!b) return; let pin = getPin(pinId); if (!pin) return; - board().edgeConnectorState.pins.filter(p => !!p).forEach(p => p.pitch = false); + const ec = b.edgeConnectorState + ec.pins.filter(p => !!p).forEach(p => p.pitch = false); pin.pitch = true; } + export function setSoundOutputPinEnabled(enabled: boolean) { + const b = board(); + if (!b) return; + const ec = b.edgeConnectorState + ec.pitchEnabled = !enabled; + } + export function analogSetPitchVolume(volume: number) { const ec = board().edgeConnectorState; ec.pitchVolume = Math.max(0, Math.min(0xff, volume | 0)); + AudioContextManager.setCurrentToneGain((ec.pitchVolume / 0xff) / 10); } export function analogPitchVolume() { const ec = board().edgeConnectorState; return ec.pitchVolume; } - + export function analogPitch(frequency: number, ms: number) { // update analog output const b = board(); if (!b) return; const ec = b.edgeConnectorState; const pins = ec.pins; - const pin = pins.filter(pin => !!pin && pin.pitch)[0] || pins[0]; + const pin = ec.pitchEnabled && (pins.filter(pin => !!pin && pin.pitch)[0] || pins[0]); const pitchVolume = ec.pitchVolume | 0; - pin.mode = PinFlags.Analog | PinFlags.Output; - if (frequency <= 0 || pitchVolume <= 0) { - pin.value = 0; - pin.period = 0; - } else { - const v = 1 << (pitchVolume >> 5); - pin.value = v; - pin.period = 1000000 / frequency; + if (pin) { + pin.mode = PinFlags.Analog | PinFlags.Output; + if (frequency <= 0 || pitchVolume <= 0) { + pin.value = 0; + pin.period = 0; + } else { + const v = 1 << (pitchVolume >> 5); + pin.value = v; + pin.period = 1000000 / frequency; + } + runtime.queueDisplayUpdate(); } - runtime.queueDisplayUpdate(); let cb = getResume(); - const v = pitchVolume / 0xff; - AudioContextManager.tone(frequency, v); + if (pin) { + const v = pitchVolume / 0xff; + AudioContextManager.tone(frequency, v / 10); + } if (ms <= 0) cb(); else { setTimeout(() => { AudioContextManager.stop(); - pin.value = 0; - pin.period = 0; - pin.mode = PinFlags.Unused; + if (pin) { + pin.value = 0; + pin.period = 0; + pin.mode = PinFlags.Unused; + } runtime.queueDisplayUpdate(); cb() }, ms); @@ -152,4 +179,18 @@ namespace pxsim.pins { const ec = b.edgeConnectorState; // TODO support buttons here } +} +namespace pxsim.music { + export function setVolume(volume: number): void { + pxsim.pins.analogSetPitchVolume(volume); + } + export function volume(): number { + return pxsim.pins.analogPitchVolume(); + } +} + +namespace pxsim.pins { + export function setAudioPin(pinId: number) { + pxsim.pins.analogSetPitchPin(pinId); + } } \ No newline at end of file diff --git a/sim/state/edgeconnectorsim.ts b/sim/state/edgeconnectorsim.ts index 55944245..4d0264d5 100644 --- a/sim/state/edgeconnectorsim.ts +++ b/sim/state/edgeconnectorsim.ts @@ -87,6 +87,7 @@ namespace pxsim { export class EdgeConnectorState { pins: Pin[]; pitchVolume: number; + pitchEnabled = true; constructor(public props: EdgeConnectorProps) { this.pins = props.pins.map(id => id != undefined ? new Pin(id) : null); diff --git a/sim/state/microphone.ts b/sim/state/microphone.ts new file mode 100644 index 00000000..9872a5f5 --- /dev/null +++ b/sim/state/microphone.ts @@ -0,0 +1,28 @@ +// move to common packages eventually +namespace pxsim.input { + + export function soundLevel(): number { + const b = microphoneState(); + if (!b) return 0; + b.setUsed(); + return b.getLevel(); + } + + export function onSound(sound: number /* SoundThreshold */, body: RefAction) { + const b = microphoneState(); + if (!b) return; + b.setUsed(); + pxtcore.registerWithDal(b.id, sound, body); + } + + export function setSoundThreshold(sound: number, threshold: number){ + const b = microphoneState(); + if (!b) return; + b.setUsed(); + if (sound === 2 /* SoundThreshold.Loud */) + b.setHighThreshold(threshold); + else + b.setLowThreshold(threshold); + } + +} diff --git a/sim/state/misc.ts b/sim/state/misc.ts index 74063b9a..91fe481e 100644 --- a/sim/state/misc.ts +++ b/sim/state/misc.ts @@ -35,46 +35,6 @@ namespace pxsim.basic { namespace pxsim.control { export var inBackground = thread.runInBackground; - export function createBuffer(sz: number) { - return pxsim.BufferMethods.createBuffer(sz) - } - - export function reset() { - const cb = getResume(); - pxsim.runtime.restart(); - } - - export function waitMicros(micros: number) { - // TODO - } - export function waitForEvent(id: number, evid: number) { - const cb = getResume(); - board().bus.wait(id, evid, cb); - } - - export function millis(): number { - return runtime.runningTime(); - } - - export function micros(): number { - return runtime.runningTimeUs(); - } - - - export function deviceName(): string { - let b = board(); - return b && b.id - ? b.id.slice(0, 4) - : "abcd"; - } - - export function deviceSerialNumber(): number { - let b = board(); - return parseInt(b && b.id - ? b.id.slice(1) - : "42"); - } - export function onEvent(id: number, evid: number, handler: RefAction) { if (id == DAL.MICROBIT_ID_BUTTON_AB) { const b = board().buttonPairState; @@ -86,11 +46,6 @@ namespace pxsim.control { pxtcore.registerWithDal(id, evid, handler) } - export function raiseEvent(id: number, evid: number, mode: number) { - // TODO mode? - board().bus.queue(id, evid) - } - export function eventTimestamp() { return board().bus.getLastEventTime() } @@ -100,12 +55,6 @@ namespace pxsim.control { } } -namespace pxsim.pxtcore { - export function registerWithDal(id: number, evid: number, handler: RefAction) { - board().bus.listen(id, evid, handler); - } -} - namespace pxsim.input { export function calibrateCompass() { // device calibrates... @@ -168,6 +117,12 @@ namespace pxsim.pins { export function setEvents(name: number, event: number) { } + + export function setMatrixWidth(pin: number, width: number) { + const lp = neopixelState(pin); + if (!lp) return; + lp.width = width; + } } namespace pxsim.devices { @@ -246,13 +201,24 @@ namespace pxsim.bluetooth { } namespace pxsim.light { + export function sendWS2812Buffer(buffer: RefBuffer, pin: number) { pxsim.sendBufferAsm(buffer, pin) } + export function sendWS2812BufferWithBrightness(buffer: RefBuffer, pin: number, brightness: number) { + const clone = new RefBuffer(new Uint8Array(buffer.data)) + const data = clone.data; + for(let i =0; i < data.length; ++i) { + data[i] = (data[i] * brightness) >> 8; + } + pxsim.sendBufferAsm(clone, pin) + } + export function setMode(pin: number, mode: number) { const lp = neopixelState(pin); if (!lp) return; lp.mode = mode & 0xff; } + } diff --git a/sim/state/serial.ts b/sim/state/serial.ts index 31cedecf..e43a2bf6 100644 --- a/sim/state/serial.ts +++ b/sim/state/serial.ts @@ -3,6 +3,17 @@ namespace pxsim { export class SerialState { serialIn: string[] = []; + constructor(private readonly runtime: Runtime, private readonly board: BaseBoard) { + this.board.addMessageListener(this.handleMessage.bind(this)) + } + + private handleMessage(msg: SimulatorMessage) { + if (msg.type === "serial") { + const data = (msg).data || ""; + this.receiveData(data); + } + } + public receiveData(data: string) { this.serialIn.push(); } @@ -28,12 +39,6 @@ namespace pxsim { } } -namespace pxsim.control { - export function __log(s: string) { - board().writeSerial(s + "\r\n"); - } -} - namespace pxsim.serial { export function writeString(s: string) { board().writeSerial(s); diff --git a/sim/state/soundexpression.ts b/sim/state/soundexpression.ts new file mode 100644 index 00000000..7852d676 --- /dev/null +++ b/sim/state/soundexpression.ts @@ -0,0 +1,60 @@ +namespace pxsim.music { + function loadWavAsync(path: string): Promise { + return new Promise((resolve, reject) => { + let httprequest = new XMLHttpRequest(); + httprequest.responseType = "arraybuffer"; + httprequest.onreadystatechange = function () { + if (httprequest.readyState == XMLHttpRequest.DONE) { + if (httprequest.status == 200) { + const r = httprequest.response; + resolve(new Uint8Array(httprequest.response)); + } + else { + reject(httprequest.status); + } + } + }; + httprequest.open("GET", path, true); + httprequest.send(); + }) + } + const wavPromises: Map> = {} + //% + export function __playSoundExpression(notes: string, waitTillDone: boolean): void { + const cb = getResume(); + const b = board(); + // v2 only... + b.ensureHardwareVersion(2); + + // load wav file + let p: Promise; + // defined in sim.html + const path = (pxsim).soundExpressionFiles[notes]; + if (path) { + p = wavPromises[notes] || (wavPromises[notes] = loadWavAsync(path)); + } else + p = Promise.resolve(undefined); + + p.then(data => { + // failed to load data + if (data) { + // finally play + const buf = new RefBuffer(data); + const pp = AudioContextManager.playBufferAsync(buf) + if (waitTillDone) + // wait until sound is done + return pp; + } + // don't wait + cb(); + return Promise.resolve(); + }).catch((e) => { + console.log(e) + cb(); + }) + } + + export function __stopSoundExpressions() { + AudioContextManager.stopAll(); + } +} \ No newline at end of file diff --git a/sim/state/storage.ts b/sim/state/storage.ts new file mode 100644 index 00000000..92c7fa97 --- /dev/null +++ b/sim/state/storage.ts @@ -0,0 +1,36 @@ + +namespace pxsim.storage { + + export function putValue(key: string, value: string) : void { + sessionStorage.setItem('simulatorValue_'+key, value); + } + + export function putValueInt(key: string, value: number) : void { + sessionStorage.setItem('simulatorValue_'+key, value+""); + } + + export function getValue(key: string) : string { + if(sessionStorage.getItem('simulatorValue_'+key)) { + return sessionStorage.getItem('simulatorValue_'+key); + } else { + return ""; + } + } + + export function getValueInt(key: string) : number { + if(sessionStorage.getItem('simulatorValue_'+key)) { + return parseFloat(sessionStorage.getItem('simulatorValue_'+key)); + } else { + return 0; + } + } + + export function removeStr(key: string) : void { + sessionStorage.removeItem('simulatorValue_'+key); + } + + export function removeInt(key: string) : void { + sessionStorage.removeItem('simulatorValue_'+key); + } + +} \ No newline at end of file diff --git a/sim/tsconfig.json b/sim/tsconfig.json index ba44bb72..dd1e5dd0 100644 --- a/sim/tsconfig.json +++ b/sim/tsconfig.json @@ -1,23 +1,31 @@ { "compilerOptions": { - "target": "es5", + "target": "es2017", "noImplicitAny": true, "noImplicitReturns": true, "declaration": true, "out": "../built/sim.js", "rootDir": ".", "newLine": "LF", + "moduleResolution": "node", "sourceMap": false, - "lib": ["dom", "dom.iterable", "scripthost", "es6"], - "types": ["bluebird"], - "typeRoots": ["../node_modules/@types"] + "lib": [ + "dom", + "dom.iterable", + "scripthost", + "es2017" + ] }, "include": [ "*.ts", "state/*.ts", "visuals/*.ts", + "../node_modules/pxt-common-packages/libs/base/sim/control.ts", + "../node_modules/pxt-common-packages/libs/base/sim/controlmessage.ts", "../node_modules/pxt-common-packages/libs/core/sim/analogSensor.ts", + "../node_modules/pxt-common-packages/libs/microphone/sim/state.ts", "../node_modules/pxt-common-packages/libs/core/sim/neopixel.ts", - "../node_modules/pxt-common-packages/libs/radio/sim/*.ts" + "../node_modules/pxt-common-packages/libs/radio/sim/*.ts", + "../node_modules/pxt-common-packages/libs/settings/sim/*.ts" ] } diff --git a/sim/visuals/microbit.ts b/sim/visuals/microbit.ts index f1c76eb2..15629386 100644 --- a/sim/visuals/microbit.ts +++ b/sim/visuals/microbit.ts @@ -8,10 +8,15 @@ namespace pxsim.visuals { -webkit-filter: grayscale(1); filter: grayscale(1); } + .sim-button-group { + cursor: pointer; + } .sim-button { pointer-events: none; } - + .sim-board, .sim-display, sim-button { + fill: #111; + } .sim-button-outer:hover { stroke:grey; stroke-width: 3px; @@ -59,20 +64,21 @@ namespace pxsim.visuals { } .sim-text { - font-family:"Lucida Console", Monaco, monospace; - font-size:14px; - fill:#fff; - pointer-events: none; user-select: none; - } - .sim-text.inverted { - fill:#000; + font-family:"Lucida Console", Monaco, monospace; + font-size:14px; + fill:#fff; + pointer-events: none; user-select: none; } .sim-text-pin { - font-family:"Lucida Console", Monaco, monospace; - font-size:20px; - fill:#3cb5b5; - pointer-events: none; + font-family:"Lucida Console", Monaco, monospace; + pointer-events: none; user-select: none; + fill:#3cb5b5; + font-size:24px; + stroke:#fff; + stroke-alignment: outside; + paint-order: stroke; + stroke-width: 3px; } .sim-thermometer { @@ -84,6 +90,22 @@ namespace pxsim.visuals { r:8px; } + .inverted { + fill:#000; + stroke:#fff; + stroke-alignment: outside; + paint-order: stroke; + stroke-width: 3px; + } + .big { + font-size:24px; + font-weight: bold; + } + .centered { + transform: translateX(-1.5ch); + text-align: center; + } + /* animations */ .sim-theme-glow { animation-name: sim-theme-glow-animation; @@ -686,6 +708,8 @@ namespace pxsim.visuals { virtualButtonDown?: string; lightLevelOn?: string; lightLevelOff?: string; + soundLevelOn?: string; + soundLevelOff?: string; } export var themes: IBoardTheme[] = ["#3ADCFE"].map(accent => { @@ -702,8 +726,10 @@ namespace pxsim.visuals { virtualButtonDown: "#FFA500", virtualButtonOuter: "#333", virtualButtonUp: "#fff", - lightLevelOn: "yellow", - lightLevelOff: "#555" + lightLevelOn: "#555", + lightLevelOff: "yellow", + soundLevelOn: "#3ADCFE", + soundLevelOff: "#555" } }); @@ -723,14 +749,24 @@ namespace pxsim.visuals { private style: SVGStyleElement; private defs: SVGDefsElement; private g: SVGGElement; - + private pkg: SVGPathElement; + private logos: SVGElement[]; + private headg: SVGGElement; + private head: SVGGElement; + private headParts: SVGElement; + private headInitialized = false; + private heads: SVGElement[]; + private headText: SVGTextElement; + private display: SVGElement; private buttons: SVGElement[]; private buttonsOuter: SVGElement[]; + private buttonABText: SVGTextElement; private pins: SVGElement[]; private pinGradients: SVGLinearGradientElement[]; private pinTexts:{ [key: number]: SVGTextElement }; private ledsOuter: SVGElement[]; private leds: SVGElement[]; + private microphoneLed: SVGElement; private systemLed: SVGCircleElement; private antenna: SVGPolylineElement; private rssi: SVGTextElement; @@ -740,8 +776,14 @@ namespace pxsim.visuals { private thermometerGradient: SVGLinearGradientElement; private thermometer: SVGRectElement; private thermometerText: SVGTextElement; + private soundLevelGradient: SVGLinearGradientElement; + private soundLevel: SVGRectElement; + private soundLevelText: SVGTextElement; + private soundLevelIcon: SVGTextElement; private shakeButton: SVGElement; + private shakeText: SVGTextElement; public board: pxsim.DalBoard; + private domHardwareVersion = 1; private rgbLed: SVGElement; private pinNmToCoord: Map = { "EXT_PWR": [ @@ -1008,7 +1050,7 @@ namespace pxsim.visuals { this.pinGradients.forEach(lg => svg.setGradientColors(lg, theme.pin, theme.pinActive)); svg.setGradientColors(this.lightLevelGradient, theme.lightLevelOn, theme.lightLevelOff); - + svg.setGradientColors(this.soundLevelGradient, theme.soundLevelOff, theme.soundLevelOn); svg.setGradientColors(this.thermometerGradient, theme.ledOff, theme.ledOn); } @@ -1017,6 +1059,18 @@ namespace pxsim.visuals { if (!state) return; let theme = this.props.theme; + this.updateMicrophone(); + this.updatePins(); + this.updateTilt(); + this.updateHeading(); + this.updateLightLevel(); + this.updateTemperature(); + this.updateButtonAB(); + this.updateGestures(); + this.updateRgbLed(); + this.updateSpeaker(); + this.updateRSSI(); + let bpState = state.buttonPairState; let buttons = [bpState.aBtn, bpState.bBtn, bpState.abBtn]; buttons.forEach((btn, index) => { @@ -1046,16 +1100,7 @@ namespace pxsim.visuals { } }) } - this.updatePins(); - this.updateTilt(); - this.updateHeading(); - this.updateLightLevel(); - this.updateTemperature(); - this.updateButtonAB(); - this.updateGestures(); - this.updateRgbLed(); - this.updateSpeaker(); - this.updateRSSI(); + if (!runtime || runtime.dead) U.addClass(this.element, "grayscale"); else U.removeClass(this.element, "grayscale"); @@ -1090,7 +1135,7 @@ namespace pxsim.visuals { private updateGestures() { let state = this.board; if (state.accelerometerState.useShake && !this.shakeButton) { - let shake = this.mkBtn(26, MB_HEIGHT - 45); + let shake = this.mkBtn(280, MB_HEIGHT - 45); this.shakeButton = shake.inner; svg.fill(this.shakeButton, this.props.theme.virtualButtonUp) svg.buttonEvents(shake.outer, @@ -1103,11 +1148,17 @@ namespace pxsim.visuals { this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE } ) - let shakeText = svg.child(shake.outer, "text", { x: 15, y: MB_HEIGHT - 10, class: "sim-text inverted" }) as SVGTextElement; + let shakeText = svg.child(shake.outer, "text", { x: 280, y: MB_HEIGHT - 5, class: "sim-text big inverted centered" }) as SVGTextElement; shakeText.textContent = "SHAKE" } } + private updateMicrophone() { + const b = board(); + if (!b || !b.microphoneState.sensorUsed) return; + this.updateSoundLevel(); + } + private updateButtonAB() { let state = this.board; if (state.buttonPairState.usesButtonAB && (this.buttons[2]).style.visibility != "visible") { @@ -1158,7 +1209,7 @@ namespace pxsim.visuals { } else if (pin.mode & PinFlags.Touch) { v = pin.touched ? "0%" : "100%"; - if (text) text.textContent = ""; + if (text) text.textContent = v; } else { v = "100%"; if (text) text.textContent = ""; @@ -1185,65 +1236,218 @@ namespace pxsim.visuals { if (!this.thermometer) { let gid = "gradient-thermometer"; this.thermometerGradient = svg.linearGradient(this.defs, gid); - const ty = MB_HEIGHT - 180; + const ty = MB_HEIGHT - 200; this.thermometer = svg.child(this.g, "rect", { class: "sim-thermometer", - x: 28, + x: 0, y: ty, - width: 10, - height: 80, - rx: 5, ry: 5, + width: 30, + height: 160, + rx: 5, + ry: 5, fill: `url(#${gid})` }); this.thermometerText = svg.child(this.g, "text", { - class: 'sim-text', - x: 48, y: ty + 78 + class: 'sim-text big inverted centered', + x: 15, + y: ty + 190 }) as SVGTextElement; this.updateTheme(); let pt = this.element.createSVGPoint(); svg.buttonEvents(this.thermometer, + // move (ev) => { let cur = svg.cursorPoint(pt, this.element, ev); - let t = Math.max(0, Math.min(1, (cur.y - ty - 5) / 70)) + let t = Math.max(0, Math.min(1, (cur.y - ty) / 160)) state.thermometerState.temperature = Math.floor(tmax - t * (tmax - tmin)); this.updateTemperature(); - }, ev => { }, ev => { }) + }, + // start + ev => { }, + // stop + ev => { }, + // keydown + (ev) => { + let charCode = (typeof ev.which == "number") ? ev.which : ev.keyCode + if (charCode === 40 || charCode === 37) { // Down/Left arrow + state.thermometerState.temperature--; + if(state.thermometerState.temperature < tmin) state.thermometerState.temperature = tmin; + this.updateTemperature(); + } else if (charCode === 38 || charCode === 39) { // Up/Right arrow + state.thermometerState.temperature++ + if(state.thermometerState.temperature > tmax) state.thermometerState.temperature = tmax; + this.updateTemperature(); + } + }) } + accessibility.makeFocusable(this.thermometer); + accessibility.setAria(this.thermometer, "slider", pxsim.localization.lf("Temperature Level")); + this.thermometer.setAttribute("aria-valuemin", tmin + ""); + this.thermometer.setAttribute("aria-valuemax", tmax + ""); + this.thermometer.setAttribute("aria-orientation", "vertical"); + this.thermometer.setAttribute("aria-valuenow", state.thermometerState.temperature + ""); + this.thermometer.setAttribute("aria-valuetext", state.thermometerState.temperature + ""); + let t = Math.max(tmin, Math.min(tmax, state.thermometerState.temperature)) let per = Math.floor((state.thermometerState.temperature - tmin) / (tmax - tmin) * 100) svg.setGradientValue(this.thermometerGradient, 100 - per + "%"); this.thermometerText.textContent = t + "°C"; + this.thermometer.setAttribute("aria-valuenow", t.toString()); + this.thermometer.setAttribute("aria-valuetext", t + "°C"); + accessibility.setLiveContent(t + "°C"); + } + + private updateSoundLevel() { + let state = this.board; + if (!state || !state.microphoneState.sensorUsed) return; + + const tmin = 0 // state.microphoneState.min; + const tmax = 255 //state.microphoneState.max; + if (!this.soundLevel) { + const level = state.microphoneState.getLevel(); + let gid = "gradient-soundlevel"; + this.soundLevelGradient = svg.linearGradient(this.defs, gid); + const ty = MB_HEIGHT - 200; + this.soundLevel = svg.child(this.g, "rect", { + class: "sim-thermometer", + x: 490, + y: ty, + width: 30, + height: 160, + rx: 5, + ry: 5, + fill: `url(#${gid})` + }); + this.soundLevelText = svg.child(this.g, "text", { + class: 'sim-text big inverted centered', + x: 505, + y: ty + 190 + }) as SVGTextElement; + this.soundLevelIcon = svg.child(this.g, "svg", { + x: 495, + y: 400, + viewbox: "0 0 20 29", + role: "img", + }) as SVGTextElement; + this.soundLevelIcon.setAttribute("aria-hidden", "true"); + this.soundLevelIcon.setAttribute("focusable", "false"); + this.soundLevelIcon.setAttribute("style", "pointer-events: none; opacity: 0.8; width: 20px;"); + svg.child(this.soundLevelIcon, "path", { + fill: "white", + d: "M 10 19.9375 C 13.011719 19.9375 15.453125 17.503906 15.453125 14.5 L 15.453125 5.4375 C 15.453125 2.433594 13.011719 0 10 0 C 6.988281 0 4.546875 2.433594 4.546875 5.4375 L 4.546875 14.5 C 4.546875 17.503906 6.988281 19.9375 10 19.9375 Z M 19.089844 10.875 L 18.183594 10.875 C 17.679688 10.875 17.273438 11.28125 17.273438 11.78125 L 17.273438 14.5 C 17.273438 18.738281 13.609375 22.136719 9.273438 21.714844 C 5.496094 21.347656 2.726562 17.960938 2.726562 14.175781 L 2.726562 11.78125 C 2.726562 11.28125 2.320312 10.875 1.816406 10.875 L 0.910156 10.875 C 0.40625 10.875 0 11.28125 0 11.78125 L 0 14.054688 C 0 19.132812 3.632812 23.660156 8.636719 24.347656 L 8.636719 26.28125 L 5.453125 26.28125 C 4.953125 26.28125 4.546875 26.6875 4.546875 27.1875 L 4.546875 28.09375 C 4.546875 28.59375 4.953125 29 5.453125 29 L 14.546875 29 C 15.046875 29 15.453125 28.59375 15.453125 28.09375 L 15.453125 27.1875 C 15.453125 26.6875 15.046875 26.28125 14.546875 26.28125 L 11.363281 26.28125 L 11.363281 24.367188 C 16.234375 23.703125 20 19.535156 20 14.5 L 20 11.78125 C 20 11.28125 19.59375 10.875 19.089844 10.875 Z M 19.089844 10.875 " + }); + if (this.props.runtime) + this.props.runtime.environmentGlobals[pxsim.localization.lf("sound level")] = state.microphoneState.getLevel(); + this.updateTheme(); + + let pt = this.element.createSVGPoint(); + svg.buttonEvents(this.soundLevel, + // move + (ev) => { + let cur = svg.cursorPoint(pt, this.element, ev); + let t = Math.max(0, Math.min(1, (cur.y - ty) / 160)) * tmax + console.log(tmax - t); + state.microphoneState.setLevel( Math.floor(tmax - t)); + // state.microphoneState.setLevel(Math.floor(tmin + t * (tmax - tmin))); + this.updateMicrophone(); + }, + // start + ev => { }, + // stop + ev => { }, + // keydown + (ev) => { + let charCode = (typeof ev.which == "number") ? ev.which : ev.keyCode + if (charCode === 40 || charCode === 37) { // Down/Left arrow + state.microphoneState.setLevel(state.microphoneState.getLevel() - 1); + if(state.microphoneState.getLevel() < tmin) state.microphoneState.setLevel(tmin); + this.updateMicrophone(); + } else if (charCode === 38 || charCode === 39) { // Up/Right arrow + state.microphoneState.setLevel(state.microphoneState.getLevel() + 1); + if(state.microphoneState.getLevel() > tmax) state.microphoneState.setLevel(tmax); + this.updateMicrophone(); + } + }) + + accessibility.makeFocusable(this.soundLevel); + accessibility.setAria(this.soundLevel, "slider", pxsim.localization.lf("Sound Level")); + this.soundLevel.setAttribute("aria-valuemin", tmin + ""); + this.soundLevel.setAttribute("aria-valuemax", tmax + ""); + this.soundLevel.setAttribute("aria-orientation", "vertical"); + this.soundLevel.setAttribute("aria-valuenow", level + ""); + this.soundLevel.setAttribute("aria-valuetext", level + ""); + } + + let t = Math.max(tmin, Math.min(tmax, state.microphoneState.getLevel())) + let per = Math.floor((state.microphoneState.getLevel() - tmin) / (tmax - tmin) * 100) + svg.setGradientValue(this.soundLevelGradient, (100 - per) + "%"); + this.soundLevelText.textContent = t + ""; + this.soundLevel.setAttribute("aria-valuenow", t.toString()); + this.soundLevel.setAttribute("aria-valuetext", t + ""); + accessibility.setLiveContent(t + ""); } private updateHeading() { - let xc = 258; + const valMin = 0; + const valMax = 360; + let xc = 501.2; let yc = 75; let state = this.board; if (!state || !state.compassState.usesHeading) return; - /* + // /* if (!this.headInitialized) { - let p = this.head.firstChild.nextSibling as SVGPathElement; - p.setAttribute("d", "m269.9,50.134647l0,0l-39.5,0l0,0c-14.1,0.1 -24.6,10.7 -24.6,24.8c0,13.9 10.4,24.4 24.3,24.7l0,0l39.6,0c14.2,0 40.36034,-22.97069 40.36034,-24.85394c0,-1.88326 -26.06034,-24.54606 -40.16034,-24.64606m-0.2,39l0,0l-39.3,0c-7.7,-0.1 -14,-6.4 -14,-14.2c0,-7.8 6.4,-14.2 14.2,-14.2l39.1,0c7.8,0 14.2,6.4 14.2,14.2c0,7.9 -6.4,14.2 -14.2,14.2l0,0l0,0z"); + let p = this.heads[1]; + svg.child(p, "circle", {style: "fill:#DDDDDD55;stroke:#3A3A3A;", cx: "501.2", cy: "75", r: "55" }); + svg.child(p, "polyline", {style: "fill:#008EEF;stroke:#3A3A3A;", points: "517.7,75 501.1,140.2 484.6,75" }); + svg.child(p, "polyline", {style: "fill:#FF3951;stroke:#3A3A3A;", points: "484.6,75 501.1,9.5 517.7,75" }); + svg.child(p, "circle", {style: "fill:#748476;stroke:#3A3A3A;", cx: "501.1", cy: "75", r: "16.5" }); + svg.child(p, "circle", {style: "fill:#CCDBCE;", cx: "501.1", cy: "75", r: "10" }); + // p.setAttribute("d", "m269.9,50.134647l0,0l-39.5,0l0,0c-14.1,0.1 -24.6,10.7 -24.6,24.8c0,13.9 10.4,24.4 24.3,24.7l0,0l39.6,0c14.2,0 40.36034,-22.97069 40.36034,-24.85394c0,-1.88326 -26.06034,-24.54606 -40.16034,-24.64606m-0.2,39l0,0l-39.3,0c-7.7,-0.1 -14,-6.4 -14,-14.2c0,-7.8 6.4,-14.2 14.2,-14.2l39.1,0c7.8,0 14.2,6.4 14.2,14.2c0,7.9 -6.4,14.2 -14.2,14.2l0,0l0,0z"); this.updateTheme(); let pt = this.element.createSVGPoint(); - svg.buttonEvents( - this.head, + svg.buttonEvents(this.head, + // move (ev: MouseEvent) => { let cur = svg.cursorPoint(pt, this.element, ev); - state.compassState.heading = Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI + 90); - if (state.compassState.heading < 0) state.compassState.heading += 360; + state.compassState.heading = valMax - (Math.floor(Math.atan2(cur.y - yc, cur.x - xc) * 180 / Math.PI) + 90) - valMax; + if (state.compassState.heading < valMin) state.compassState.heading += valMax; this.updateHeading(); + }, + // start + ev => { }, + // stop + ev => { }, + // keydown + ev => { + let charCode = (typeof ev.which == "number") ? ev.which : ev.keyCode + if (charCode === 40 || charCode === 37) { // Down/Left arrow + state.compassState.heading--; + if(state.compassState.heading < valMin) state.compassState.heading += valMax; + this.updateHeading(); + } else if (charCode === 38 || charCode === 39) { // Up/Right arrow + state.compassState.heading++; + if(state.compassState.heading >= valMax) state.compassState.heading -= valMax;; + this.updateHeading(); + } }); this.headInitialized = true; } + accessibility.makeFocusable(this.head); + accessibility.setAria(this.head, "slider", pxsim.localization.lf("Heading")); + this.head.setAttribute("aria-valuemin", valMin + ""); + this.head.setAttribute("aria-valuemax", valMax + ""); + this.head.setAttribute("aria-orientation", "vertical"); + this.head.setAttribute("aria-valuenow", state.compassState.heading + ""); + this.head.setAttribute("aria-valuetext", state.compassState.heading + ""); + let txt = state.compassState.heading.toString() + "°"; if (txt != this.headText.textContent) { - svg.rotateElement(this.head, xc, yc, state.compassState.heading + 180); + svg.rotateElement(this.head, xc, yc, valMax - state.compassState.heading - 90); this.headText.textContent = txt; - } */ + } } private lastFlashTime: number = 0; @@ -1282,46 +1486,77 @@ namespace pxsim.visuals { private updateLightLevel() { let state = this.board; + const valMin = 0; + const valMax = 255; if (!state || !state.lightSensorState.usesLightLevel) return; if (!this.lightLevelButton) { let gid = "gradient-light-level"; this.lightLevelGradient = svg.linearGradient(this.defs, gid) - const cx = 30; - const cy = 45; - const r = 20; + const cx = 25; + const cy = 75; + const r = 55; + this.lightLevelButton = svg.child(this.g, "circle", { cx: `${cx}px`, cy: `${cy}px`, r: `${r}px`, class: 'sim-light-level-button', fill: `url(#${gid})` }) as SVGCircleElement; let pt = this.element.createSVGPoint(); + svg.buttonEvents(this.lightLevelButton, + // move (ev) => { let pos = svg.cursorPoint(pt, this.element, ev); let rs = r / 2; - let level = Math.max(0, Math.min(255, Math.floor((pos.y - (cy - rs)) / (2 * rs) * 255))); - if (level != this.board.lightSensorState.lightLevel) { - this.board.lightSensorState.lightLevel = level; + let level = valMax - Math.max(valMin, Math.min(valMax, Math.floor((pos.y - (cy - r)) / (2 * r) * valMax))); + + if (level != state.lightSensorState.lightLevel) { + state.lightSensorState.lightLevel = level; this.applyLightLevel(); } - }, ev => { }, - ev => { }) - this.lightLevelText = svg.child(this.g, "text", { x: cx - r - 7, y: cy + r + 8, text: '', class: 'sim-text inverted' }) as SVGTextElement; + }, + // start + ev => { }, + // stop + ev => { }, + // keydown + ev => { + let charCode = (typeof ev.which == "number") ? ev.which : ev.keyCode + if (charCode === 40 || charCode === 37) { // Down/Left arrow + state.lightSensorState.lightLevel--; + if(state.lightSensorState.lightLevel < valMin) state.lightSensorState.lightLevel = valMin; + this.applyLightLevel(); + } else if (charCode === 38 || charCode === 39) { // Up/Right arrow + state.lightSensorState.lightLevel++ + if(state.lightSensorState.lightLevel > valMax) state.lightSensorState.lightLevel = valMax; + this.applyLightLevel(); + } + }) + this.lightLevelText = svg.child(this.g, "text", { x: cx , y: cy + r + 35, text: '', class: 'sim-text inverted big centered' }) as SVGTextElement; this.updateTheme(); } - svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(state.lightSensorState.lightLevel * 100 / 255))) + '%') + accessibility.makeFocusable(this.lightLevelButton); + accessibility.setAria(this.lightLevelButton, "slider", pxsim.localization.lf("Light Level")); + this.lightLevelButton.setAttribute("aria-valuemin", valMin + ""); + this.lightLevelButton.setAttribute("aria-valuemax", valMax + ""); + this.lightLevelButton.setAttribute("aria-orientation", "vertical"); + this.lightLevelButton.setAttribute("aria-valuenow", state.lightSensorState.lightLevel + ""); + this.lightLevelButton.setAttribute("aria-valuetext", state.lightSensorState.lightLevel + ""); + + svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor((255 - state.lightSensorState.lightLevel) * 100 / 255))) + '%') this.lightLevelText.textContent = state.lightSensorState.lightLevel.toString(); } private applyLightLevel() { let lv = this.board.lightSensorState.lightLevel; - svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor(lv * 100 / 255))) + '%') + svg.setGradientValue(this.lightLevelGradient, Math.min(100, Math.max(0, Math.floor((255 - lv) * 100 / 255))) + '%') this.lightLevelText.textContent = lv.toString(); } private updateTilt() { + return; if (this.props.disableTilt) return; let state = this.board; if (!state || !state.accelerometerState.accelerometer.isActive) return; @@ -1347,6 +1582,7 @@ namespace pxsim.visuals { "y": "0px", "width": MB_WIDTH + "px", "height": MB_HEIGHT + "px", + "fill": "rgba(0,0,0,0)" }); this.style = svg.child(this.element, "style", {}); this.style.textContent = MB_STYLE; @@ -1356,6 +1592,15 @@ namespace pxsim.visuals { this.element.appendChild(this.g); // filters + let ledglow = svg.child(this.defs, "filter", { id: "ledglow", x: "-75%", y: "-75%", width: "300%", height: "300%" }); + svg.child(ledglow, "feMorphology", { operator: "dilate", radius: "4", in: "SourceAlpha", result: "thicken" }); + svg.child(ledglow, "feGaussianBlur", { stdDeviation: "5", in: "thicken", result: "blurred" }); + svg.child(ledglow, "feFlood", { "flood-color": "rgb(255, 17, 77)", result: "glowColor" }); + svg.child(ledglow, "feComposite", { in: "glowColor", in2: "blurred", operator: "in", result: "ledglow_colored" }); + let ledglowMerge = svg.child(ledglow, "feMerge", {}); + svg.child(ledglowMerge, "feMergeNode", { in: "ledglow_colored" }); + svg.child(ledglowMerge, "feMergeNode", { in: "SourceGraphic" }); + let glow = svg.child(this.defs, "filter", { id: "filterglow", x: "-5%", y: "-5%", width: "120%", height: "120%" }); svg.child(glow, "feGaussianBlur", { stdDeviation: "5", result: "glow" }); let merge = svg.child(glow, "feMerge", {}); @@ -1368,24 +1613,42 @@ namespace pxsim.visuals { const top = Number(this.element.getElementById("LED_0_0").getAttribute("y")); const ledoffw = Number(this.element.getElementById("LED_1_0").getAttribute("x"))-left; const ledoffh = Number(this.element.getElementById("LED_0_1").getAttribute("y"))-top; - const ledw = 5.1; - const ledh = 12.9; + // const ledw = 5.1; + // const ledh = 12.9; for (let i = 0; i < 5; ++i) { let ledtop = i * ledoffh + top; for (let j = 0; j < 5; ++j) { let ledleft = j * ledoffw + left; let k = i * 5 + j; - this.ledsOuter.push(svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: ledw, height: ledh })); - this.leds.push(svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 1, y: ledtop - 1, width: ledw + 2, height: ledh + 2, rx: 2, ry: 2, title: `(${j},${i})` })); + this.ledsOuter.push(svg.child(this.g, "rect", { class: "sim-led-back", x: ledleft, y: ledtop, width: 10, height: 20, rx: 2, ry: 2 })); + let led = svg.child(this.g, "rect", { class: "sim-led", x: ledleft - 2, y: ledtop - 2, width: 14, height: 24, rx: 3, ry: 3, title: `(${j},${i})` }); + svg.filter(led, `url(#ledglow)`) + this.leds.push(led); } } + + // head + // this.headg = svg.child(this.g, "g", { style: "transform: translate(100px, 0px);" }); + this.head = svg.child(this.g, "g", { class: "sim-head" }); + svg.child(this.head, "circle", { cx: 501.2, cy: 75, r: 100, fill: "transparent" }) + this.headParts = svg.child(this.head, "g", { class: "sim-button-outer sim-button-group" }); + this.heads = [] + // background + this.heads.push(svg.path(this.headParts, "sim-button","")); + // shapes + this.heads.push(svg.child(this.headParts, "g", { class: "sim-theme" })); + // this.heads.push(svg.path(this.headParts, "sim-theme", "M230.6,69.7c-2.9,0-5.3,2.4-5.3,5.3c0,2.9,2.4,5.3,5.3,5.3c2.9,0,5.3-2.4,5.3-5.3C235.9,72.1,233.5,69.7,230.6,69.7")); + // this.heads.push(svg.path(this.headParts, "sim-theme", "M269.7,80.3c2.9,0,5.3-2.4,5.3-5.3c0-2.9-2.4-5.3-5.3-5.3c-2.9,0-5.3,2.4-5.3,5.3C264.4,77.9,266.8,80.3,269.7,80.3")); + this.headText = svg.child(this.g, "text", { x: 500, y: 165, class: "sim-text inverted big centered" }) + // https://www.microbit.co.uk/device/pins // P0, P1, P2 this.pins = pinNames.map(n => { let p = this.element.getElementById(n) as SVGElement; if(!p) console.log("missing "+n); U.addClass(p, "sim-pin"); + // console.log(p); return p; }); @@ -1398,11 +1661,18 @@ namespace pxsim.visuals { return lg; }) + // this.pinTexts = [ + // [-20, 340], + // [50, 495], + // [450, 495], + // [500, 340] + // ].map(p => svg.child(this.g, "text", { class: "sim-text-pin", x: p[0], y: p[1] })); + this.pinTexts = { - [DigitalPin.P0]: svg.child(this.g, "text", { class: "sim-text-pin", x: -20, y: 340 }), - [DigitalPin.P1]: svg.child(this.g, "text", { class: "sim-text-pin", x: 50, y: 495 }), - [DigitalPin.P2]: svg.child(this.g, "text", { class: "sim-text-pin", x: 450, y: 495 }), - [DigitalPin.P3]: svg.child(this.g, "text", { class: "sim-text-pin", x: 500, y: 340 }) + [DigitalPin.P0]: svg.child(this.g, "text", { class: "sim-text-pin big centered", x: 20, y: 315 }), + [DigitalPin.P1]: svg.child(this.g, "text", { class: "sim-text-pin big centered", x: 135, y: 530 }), + [DigitalPin.P2]: svg.child(this.g, "text", { class: "sim-text-pin big centered", x: 395, y: 530 }), + [DigitalPin.P3]: svg.child(this.g, "text", { class: "sim-text-pin big centered", x: 535, y: 315 }) } // BTN A, B @@ -1421,8 +1691,8 @@ namespace pxsim.visuals { return button; } - let ab = outerBtn(69, MB_HEIGHT - 45); - let abtext = svg.child(ab.outer, "text", { x: 67, y: MB_HEIGHT - 10, class: "sim-text inverted" }) as SVGTextElement; + let ab = outerBtn(210, MB_HEIGHT - 45); + let abtext = svg.child(ab.outer, "text", { x: 210, y: MB_HEIGHT - 5, class: "sim-text big inverted centered" }) as SVGTextElement; abtext.textContent = "A+B"; (this.buttonsOuter[2]).style.visibility = "hidden"; (this.buttons[2]).style.visibility = "hidden"; @@ -1453,15 +1723,31 @@ namespace pxsim.visuals { } private attachEvents() { + this.attachIFrameEvents(); + this.attachAccelerometerEvents(); + this.attachPinsIOEvents(); + this.attachPinsTouchEvents(); + this.attachABEvents(); + this.attachAPlusBEvents(); + } + + private attachIFrameEvents() { Runtime.messagePosted = (msg) => { switch (msg.type || "") { case "serial": this.flashSystemLed(); break; case "radiopacket": this.flashAntenna(); break; + case "eventbus": + if ((msg).id == DAL.MES_BROADCAST_GENERAL_ID) + this.flashAntenna(); + break; } } - let tiltDecayer = 0; + } + + private attachAccelerometerEvents() { + let tiltDecayer: any = undefined; this.element.addEventListener(pointerEvents.move, (ev: MouseEvent) => { - let state = this.board; + const state = this.board; if (!state.accelerometerState.accelerometer.isActive) return; if (tiltDecayer) { @@ -1469,14 +1755,19 @@ namespace pxsim.visuals { tiltDecayer = 0; } - let bbox = this.element.getBoundingClientRect(); - let ax = (ev.clientX - bbox.width / 2) / (bbox.width / 3); - let ay = (ev.clientY - bbox.height / 2) / (bbox.height / 3); + const bbox = this.element.getBoundingClientRect(); - let x = - Math.max(- 1023, Math.min(1023, Math.floor(ax * 1023))); - let y = - Math.max(- 1023, Math.min(1023, Math.floor(ay * 1023))); - let z2 = 1023 * 1023 - x * x - y * y; - let z = Math.floor((z2 > 0 ? -1 : 1) * Math.sqrt(Math.abs(z2))); + // ev.clientX and ev.clientY are not defined on mobile iOS + const xPos = ev.clientX != null ? ev.clientX : ev.pageX; + const yPos = ev.clientY != null ? ev.clientY : ev.pageY; + + const ax = (xPos - bbox.width / 2) / (bbox.width / 3); + const ay = (yPos - bbox.height / 2) / (bbox.height / 3); + + const x = - Math.max(- 1023, Math.min(1023, Math.floor(ax * 1023))); + const y = - Math.max(- 1023, Math.min(1023, Math.floor(ay * 1023))); + const z2 = 1023 * 1023 - x * x - y * y; + const z = Math.floor((z2 > 0 ? -1 : 1) * Math.sqrt(Math.abs(z2))); state.accelerometerState.accelerometer.update(x, y, z); this.updateTilt(); @@ -1504,10 +1795,15 @@ namespace pxsim.visuals { }, 50) } }, false); + } - this.pins.forEach((pin, index) => { + private attachPinsIOEvents() { + this.pins.slice(2, 6).forEach((pin, index) => { + // var index = i + 2; if (!this.board.edgeConnectorState.pins[index]) return; let pt = this.element.createSVGPoint(); + let xpos = (index === 0 || index === 3) ? 300 : 520; + let vMax = (index === 0 || index === 3) ? 1 : 1032; svg.buttonEvents(pin, // move ev => { @@ -1516,8 +1812,8 @@ namespace pxsim.visuals { let svgpin = this.pins[index]; if (pin.mode & PinFlags.Input) { let cursor = svg.cursorPoint(pt, this.element, ev); - let v = (400 - cursor.y) / 40 * 1023 - pin.value = Math.max(0, Math.min(1023, Math.floor(v))); + let v = (xpos - cursor.y) / 70 * (vMax + 1); + pin.value = Math.max(0, Math.min(vMax, Math.floor(v))); } this.updatePin(pin, index); }, @@ -1529,8 +1825,8 @@ namespace pxsim.visuals { U.addClass(svgpin, "touched"); if (pin.mode & PinFlags.Input) { let cursor = svg.cursorPoint(pt, this.element, ev); - let v = (400 - cursor.y) / 40 * 1023 - pin.value = Math.max(0, Math.min(1023, Math.floor(v))); + let v = (xpos - cursor.y) / 70 * (vMax + 1); + pin.value = Math.max(0, Math.min(vMax, Math.floor(v))); } this.updatePin(pin, index); }, @@ -1542,82 +1838,154 @@ namespace pxsim.visuals { U.removeClass(svgpin, "touched"); this.updatePin(pin, index); return false; + }, + // keydown + (ev: KeyboardEvent) => { + let charCode = (typeof ev.which == "number") ? ev.which : ev.keyCode + let state = this.board; + let pin = state.edgeConnectorState.pins[index]; + + if (charCode === 40 || charCode === 37) { // Down/Left arrow + pin.value -= 10; + if (pin.value < 0) { + pin.value = 1023; + } + this.updatePin(pin, index); + } else if (charCode === 38 || charCode === 39) { // Up/Right arrow + pin.value += 10; + if (pin.value > 1023) { + pin.value = 0; + } + this.updatePin(pin, index); + } }); }) - this.pins.slice(0, 2).forEach((btn, index) => { - pointerEvents.down.forEach(evid => btn.addEventListener(evid, ev => { - let state = this.board; - state.edgeConnectorState.pins[index].touched = true; - this.updatePin(state.edgeConnectorState.pins[index], index); - this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_DOWN); - })); - btn.addEventListener(pointerEvents.leave, ev => { - let state = this.board; - state.edgeConnectorState.pins[index].touched = false; - this.updatePin(state.edgeConnectorState.pins[index], index); - }) - btn.addEventListener(pointerEvents.up, ev => { - let state = this.board; - state.edgeConnectorState.pins[index].touched = false; - this.updatePin(state.edgeConnectorState.pins[index], index); - this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_UP); - this.board.bus.queue(state.edgeConnectorState.pins[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK); - }) - }) + } - let bpState = this.board.buttonPairState; - let stateButtons = [bpState.aBtn, bpState.bBtn, bpState.abBtn]; - this.buttonsOuter.slice(0, 2).forEach((btn, index) => { + private attachPinsTouchEvents() { + this.pins.slice(2, 6).forEach((btn, i) => { + var index = i + 2; + let state = this.board; + let pressedTime: number; pointerEvents.down.forEach(evid => btn.addEventListener(evid, ev => { let state = this.board; - stateButtons[index].pressed = true; - svg.fill(this.buttons[index], this.props.theme.buttonDown); - this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_DOWN); + // console.log(`down ${state.edgeConnectorState.pins[i].id}`) + state.edgeConnectorState.pins[i].touched = true; + this.updatePin(state.edgeConnectorState.pins[i], index); + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_DOWN); + pressedTime = runtime.runningTime() })); - btn.addEventListener(pointerEvents.leave, ev => { - let state = this.board; - stateButtons[index].pressed = false; - svg.fill(this.buttons[index], this.props.theme.buttonUps[index]); - }) + // btn.addEventListener(pointerEvents.leave, ev => { + // let state = this.board; + // state.edgeConnectorState.pins[i].touched = false; + // this.updatePin(state.edgeConnectorState.pins[i], index); + // }) btn.addEventListener(pointerEvents.up, ev => { let state = this.board; + // console.log(`up ${state.edgeConnectorState.pins[i].id}, index ${index}`) + state.edgeConnectorState.pins[i].touched = false; + this.updatePin(state.edgeConnectorState.pins[i], index); + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_UP); + const currentTime = runtime.runningTime() + if (currentTime - pressedTime > DAL.DEVICE_BUTTON_LONG_CLICK_TIME) { + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_LONG_CLICK); + // console.log(`& long click`) + } else { + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_CLICK); + // console.log(`& click`) + } + pressedTime = undefined; + }) + accessibility.enableKeyboardInteraction(btn, undefined, () => { + let state = this.board; + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_DOWN); + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_UP); + this.board.bus.queue(state.edgeConnectorState.pins[i].id, DAL.MICROBIT_BUTTON_EVT_CLICK); + }); + }) + } + + private attachABEvents() { + const bpState = this.board.buttonPairState; + const stateButtons: Button[] = [bpState.aBtn, bpState.bBtn]; + const elButtonOuters = this.buttonsOuter.slice(0, 2); + const elButtons = this.buttons.slice(0, 2); + + elButtonOuters.forEach((btn, index) => { + let pressedTime: number; + pointerEvents.down.forEach(evid => btn.addEventListener(evid, ev => { + // console.log(`down ${stateButtons[index].id}`) + stateButtons[index].pressed = true; + svg.fill(elButtons[index], this.props.theme.buttonDown); + this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_DOWN); + pressedTime = runtime.runningTime() + })); + btn.addEventListener(pointerEvents.leave, ev => { stateButtons[index].pressed = false; - svg.fill(this.buttons[index], this.props.theme.buttonUps[index]); + svg.fill(elButtons[index], this.props.theme.buttonUps[0]); + }) + btn.addEventListener(pointerEvents.up, ev => { + stateButtons[index].pressed = false; + svg.fill(elButtons[index], this.props.theme.buttonUps[0]); + this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_UP); + const currentTime = runtime.runningTime() + if (currentTime - pressedTime > DAL.DEVICE_BUTTON_LONG_CLICK_TIME) + this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_LONG_CLICK); + else + this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK); + pressedTime = undefined; + }) + accessibility.enableKeyboardInteraction(btn, undefined, () => { + this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_DOWN); this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_UP); this.board.bus.queue(stateButtons[index].id, DAL.MICROBIT_BUTTON_EVT_CLICK); - }) + }); }) + } + + private attachAPlusBEvents() { + const bpState = this.board.buttonPairState; + let pressedTime: number; + // A+B pointerEvents.down.forEach(evid => this.buttonsOuter[2].addEventListener(evid, ev => { - let state = this.board; - stateButtons[0].pressed = true; - stateButtons[1].pressed = true; - stateButtons[2].pressed = true; + bpState.aBtn.pressed = true; + bpState.bBtn.pressed = true; + bpState.abBtn.pressed = true; svg.fill(this.buttons[0], this.props.theme.buttonDown); svg.fill(this.buttons[1], this.props.theme.buttonDown); svg.fill(this.buttons[2], this.props.theme.buttonDown); - this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_DOWN); + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_DOWN); + pressedTime = runtime.runningTime() })); this.buttonsOuter[2].addEventListener(pointerEvents.leave, ev => { - let state = this.board; - stateButtons[0].pressed = false; - stateButtons[1].pressed = false; - stateButtons[2].pressed = false; + bpState.aBtn.pressed = false; + bpState.bBtn.pressed = false; + bpState.abBtn.pressed = false; svg.fill(this.buttons[0], this.props.theme.buttonUps[0]); svg.fill(this.buttons[1], this.props.theme.buttonUps[1]); svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); }) this.buttonsOuter[2].addEventListener(pointerEvents.up, ev => { - let state = this.board; - stateButtons[0].pressed = false; - stateButtons[1].pressed = false; - stateButtons[2].pressed = false; + bpState.aBtn.pressed = false; + bpState.bBtn.pressed = false; + bpState.abBtn.pressed = false; svg.fill(this.buttons[0], this.props.theme.buttonUps[0]); svg.fill(this.buttons[1], this.props.theme.buttonUps[1]); svg.fill(this.buttons[2], this.props.theme.virtualButtonUp); - this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_UP); - this.board.bus.queue(stateButtons[2].id, DAL.MICROBIT_BUTTON_EVT_CLICK); + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_UP); + const currentTime = runtime.runningTime() + if (currentTime - pressedTime > DAL.DEVICE_BUTTON_LONG_CLICK_TIME) + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_LONG_CLICK); + else + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_CLICK); + pressedTime = undefined; }) + accessibility.enableKeyboardInteraction(this.buttonsOuter[2], undefined, () => { + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_DOWN); + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_UP); + this.board.bus.queue(bpState.abBtn.id, DAL.MICROBIT_BUTTON_EVT_CLICK); + }); } } } diff --git a/targetconfig.json b/targetconfig.json index 4120d635..2c9189c2 100644 --- a/targetconfig.json +++ b/targetconfig.json @@ -1,153 +1,169 @@ { "packages": { "approvedRepos": [ - "Microsoft/pxt-neopixel", - "Microsoft/pxt-microturtle", - "Microsoft/pxt-sonar", - "Microsoft/pxt-hacking-stem", - "Microsoft/pxt-bluetooth-temperature-sensor", - "Microsoft/pxt-bluetooth-midi", - "Microsoft/pxt-max6675", - "Microsoft/pxt-midi", - "Microsoft/pxt-radio-blockchain", - "Microsoft/pxt-bluetooth-max6675", - "Microsoft/pxt-filesystem", - "Microsoft/pxt-ws2812b", - "MKleinSB/pxt-foldio", - "MKleinSB/pxt-remember-int", - "MKleinSB/pxt-BME680", - "MKleinSB/pxt-automationbit-calliope", - "MKleinSB/pxt-kitronik-robotics-board-calliope", - "MKleinSB/pxt-kitronik-zip-tile-calliope", - "MKleinSB/pxt-calliope-esp", - "MKleinSB/pxt-calliope-modem", - "MKleinSB/pxt-fischertechnik-calliope", - "MKleinSB/pxt-ft-fototransistor-calliope", - "MKleinSB/pxt-thumbjoystick-calliope", - "MKleinSB/pxt-envirobit", - "MKleinSB/pxt-makerbit-ultrasonic-calliope", - "MKleinSB/pxt-makerbit-motor-calliope", - "MKleinSB/pxt-bc95", - "MKleinSB/pxt-kitronik-zip-64", - "MKleinSB/pxt-makerbit-touch", - "MKleinSB/pxt-iot-environment-kit", - "MKleinSB/pxt-serial-rb", - "MKleinSB/pxt-ds18b20-calliope", - "MKleinSB/pxt-mpr121", - "MKleinSB/pxt-graphs", - "MKleinSB/pxt-IR-Calliope", - "MKleinSB/pxt-Seeed-Temperatursensor", - "MKleinSB/pxt-MCP23017", - "MKleinSB/ScrollText", - "MKleinSB/pxt-calliope-oled96", - "KitronikLtd/pxt-kitronik-servo-lite", - "KitronikLtd/pxt-kitronik-I2C-16-servo", - "KitronikLtd/pxt-kitronik-stopbit", - "KitronikLtd/pxt-kitronik-lampbit", - "KitronikLtd/pxt-kitronik-klimate", - "KitronikLtd/pxt-kitronik-rtc", - "KitronikLtd/pxt-kitronik-game-controller", - "KitronikLtd/pxt-kitronik-robotics-board", - "KitronikLtd/pxt-kitronik-klef-piano", - "Tinkertanker/pxt-ir-receiver", - "Tinkertanker/pxt-iot-environment-kit", - "Tinkertanker/pxt-realtimeclock-ds1307", - "Tinkertanker/pxt-tinkercademy-tinker-kit", - "Tinkertanker/pxt-rotary-encoder-ky040", - "Tinkertanker/pxt-tinkercademy-microbot", - "Tinkertanker/pxt-oled-ssd1306", - "Tinkertanker/pxt-range-vl53l0x", - "Tinkertanker/pxt-continuous-servo", - "Tinkertanker/pxt-smarthome", - "Tinkertanker/microDriver_SHT2x", - "Tinkertanker/uDriver_PCA9585", - "Tinkertanker/pxt-alphanumeric-ht16k33", - "PaulDFoster/pxt-microbit-GY521", - "chevyng/pxt-ucl-junkrobot", - "sparkfun/pxt-gator-environment", - "LaboratoryForPlayfulComputation/pxt-BlockyTalkyBLE", - "mbitfun/pxt-katakana", - "jdarling/pxt-pca9685", - "pizayanz/pxt-linebeacon", - "vengit/pxt-sbrick", - "Annikken/pxt-Andee", - "sparkfun/pxt-gator-light", - "sparkfun/pxt-gator-temp", - "makecode-extensions/i2cLCD1602", - "makecode-extensions/OLED12864_I2C", - "makecode-extensions/DS1307", - "makecode-extensions/ScrollText", - "makecode-extensions/WhaleySansFont", - "makecode-extensions/BMP280", - "makecode-extensions/TM1637", - "makecode-extensions/BMP180", - "makecode-extensions/BH1750", - "makecode-extensions/APDS9930", - "makecode-extensions/AT24XX", - "makecode-extensions/BME280", - "makecode-extensions/TM1650", - "makecode-extensions/NTC", - "makecode-extensions/DS1302", "51bit/ColorBit", "51bit/SFC", "51bit/SmartTools", - "lwchkg/pxt-proportional-font", - "jcubuntu/pxt-iKB1", - "alankrantas/pxt-DHT11_DHT22", - "cgs-matthew-pham/pxt-hitechnic-irseeker-v2", - "letstalkscience/pxt-cozir", - "monkmakes/pxt-sensor", - "keigan-motor/pxt-KeiganMotor", - "alankrantas/pxt-ESP8266_ThingSpeak", - "sparkfun/pxt-gator-particle", - "sparkfun/pxt-gator-soil", - "sparkfun/pxt-gator-microphone", - "rebeccaclavier/pxt-bmp280", "51bit/dfplayermini", - "makecode-extensions/STTS751", - "makecode-extensions/LSM6DSO", - "makecode-extensions/LPS22", + "Freenove/Makecode-Extension-Starter-Kit", + "joernalraun/pxt-remember-int", + "KitronikLtd/pxt-kitronik-I2C-16-servo", + "KitronikLtd/pxt-kitronik-game-controller", + "KitronikLtd/pxt-kitronik-klef-piano", + "KitronikLtd/pxt-kitronik-klimate", + "KitronikLtd/pxt-kitronik-lampbit", + "KitronikLtd/pxt-kitronik-robotics-board", + "KitronikLtd/pxt-kitronik-rtc", + "KitronikLtd/pxt-kitronik-servo-lite", + "KitronikLtd/pxt-kitronik-stopbit", + "MKleinSB/ScrollText", + "MKleinSB/pxt-BME680", + "MKleinSB/pxt-IR-Calliope", + "MKleinSB/pxt-MCP23017", + "MKleinSB/pxt-OLED-SSD1306", + "MKleinSB/pxt-Seeed-Temperatursensor", + "MKleinSB/pxt-automationbit-calliope", + "MKleinSB/pxt-bc95", + "MKleinSB/pxt-callibot", + "MKleinSB/pxt-callicolor", + "MKleinSB/pxt-callicross", + "MKleinSB/pxt-calliope-esp", + "MKleinSB/pxt-calliope-oled96", + "MKleinSB/pxt-columbuseye", + "MKleinSB/pxt-dht11", + "MKleinSB/pxt-envirobit", + "MKleinSB/pxt-esp-thingspeak", + "MKleinSB/pxt-fischertechnik-calliope", + "MKleinSB/pxt-foldio", + "MKleinSB/pxt-ft-fototransistor-calliope", + "MKleinSB/pxt-gatorlog-calliope", + "MKleinSB/pxt-graphs", + "MKleinSB/pxt-iot-environment-kit", + "MKleinSB/pxt-kitronik-robotics-board-calliope", + "MKleinSB/pxt-kitronik-zip-64", + "MKleinSB/pxt-kitronik-zip-tile-calliope", + "MKleinSB/pxt-makerbit-motor-calliope", + "MKleinSB/pxt-makerbit-touch", + "MKleinSB/pxt-makerbit-ultrasonic-calliope", + "MKleinSB/pxt-mpr121", + "MKleinSB/pxt-pca9685", + "MKleinSB/pxt-seeed-temperature", + "MKleinSB/pxt-serial-rb", + "MKleinSB/pxt-serialmp3", + "MKleinSB/pxt-thumbjoystick-calliope", + "Microsoft/pxt-bluetooth-max6675", + "Microsoft/pxt-bluetooth-midi", + "Microsoft/pxt-bluetooth-temperature-sensor", + "Microsoft/pxt-filesystem", + "Microsoft/pxt-hacking-stem", + "Microsoft/pxt-max6675", + "Microsoft/pxt-microturtle", + "Microsoft/pxt-midi", + "Microsoft/pxt-neopixel", + "Microsoft/pxt-radio-blockchain", + "Microsoft/pxt-sonar", + "Microsoft/pxt-ws2812b", + "Tinkertanker/pxt-alphanumeric-ht16k33", + "Tinkertanker/pxt-continuous-servo", + "Tinkertanker/pxt-iot-environment-kit", + "Tinkertanker/pxt-ir-receiver", + "Tinkertanker/pxt-oled-ssd1306", + "Tinkertanker/pxt-range-vl53l0x", + "Tinkertanker/pxt-realtimeclock-ds1307", + "Tinkertanker/pxt-rotary-encoder-ky040", + "Tinkertanker/pxt-smarthome", + "Tinkertanker/pxt-tinkercademy-tinker-kit", + "alankrantas/pxt-DHT11_DHT22", + "alankrantas/pxt-ESP8266_ThingSpeak", + "assirati/pxt-inventura", + "calliope-edu/CO2-Sensor-SCD40", + "calliope-edu/pxt-SCD30", + "calliope-edu/pxt-TCS34725FN", + "calliope-edu/pxt-grove", + "calliope-edu/pxt-sunlightsensor-si1145", + "cgs-matthew-pham/pxt-hitechnic-irseeker-v2", + "jcubuntu/pxt-iKB1", + "jdarling/pxt-pca9685", + "keigan-motor/pxt-KeiganMotor", + "letstalkscience/pxt-cozir", + "lwchkg/pxt-proportional-font", + "makecode-extensions/APDS9930", + "makecode-extensions/AT24XX", + "makecode-extensions/BH1750", + "makecode-extensions/BME280", + "makecode-extensions/BMP180", + "makecode-extensions/BMP280", + "makecode-extensions/DS1302", + "makecode-extensions/DS1307", + "makecode-extensions/HTS221", "makecode-extensions/LIS2DW12", "makecode-extensions/LIS2MDL", - "makecode-extensions/HTS221", - "assirati/pxt-inventura", - "Freenove/Makecode-Extension-Starter-Kit", + "makecode-extensions/LPS22", + "makecode-extensions/LSM6DSO", + "makecode-extensions/NTC", + "makecode-extensions/OLED12864_I2C", + "makecode-extensions/STTS751", + "makecode-extensions/ScrollText", + "makecode-extensions/TM1637", + "makecode-extensions/TM1650", + "makecode-extensions/WhaleySansFont", + "makecode-extensions/i2cLCD1602", + "monkmakes/pxt-sensor", "mu-opensource/pxt-muvision", - "calliope-edu/pxt-grove", + "pizayanz/pxt-linebeacon", + "rebeccaclavier/pxt-bmp280", + "sparkfun/pxt-gator-environment", + "sparkfun/pxt-gator-light", + "sparkfun/pxt-gator-microphone", + "sparkfun/pxt-gator-particle", + "sparkfun/pxt-gator-soil", + "sparkfun/pxt-gator-temp", "tinysuperlab/motionkit", "tinysuperlab/touchkit", - "MKleinSB/pxt-seeed-temperature", - "MKleinSB/pxt-dht11", - "MKleinSB/pxt-esp-thingspeak", - "MKleinSB/pxt-OLED-SSD1306", - "MKleinSB/pxt-pca9685", - "MKleinSB/pxt-mpr121", - "MKleinSB/pxt-gatorlog-calliope", - "MKleinSB/pxt-callibot", - "MKleinSB/pxt-serialmp3", - "dl1ekm/pxt-calliope-ADS1x15", - "dl1ekm/pxt-calliope-PCF85063-RTC" + "vengit/pxt-sbrick" ], "preferredRepos": [ - "tinysuperlab/motionkit", - "tinysuperlab/touchkit", - "calliope-edu/pxt-grove", - "Microsoft/pxt-microturtle", + "MKleinSB/pxt-KY-040", + "MKleinSB/pxt-MAX7219_8x8", "MKleinSB/pxt-OLED-SSD1306", - "MKleinSB/pxt-foldio", - "MKleinSB/pxt-seeed-temperature", + "MKleinSB/pxt-OLEDpaint", + "MKleinSB/pxt-callibot", + "MKleinSB/pxt-callicolor", + "MKleinSB/pxt-callicross", + "MKleinSB/pxt-callimotor", + "MKleinSB/pxt-calliope-buttons", "MKleinSB/pxt-dht11", "MKleinSB/pxt-esp-thingspeak", - "Microsoft/pxt-neopixel", - "MKleinSB/pxt-pca9685", - "MKleinSB/pxt-mpr121", "MKleinSB/pxt-gatorlog-calliope", - "MKleinSB/pxt-callibot", + "MKleinSB/pxt-huskylens", + "MKleinSB/pxt-kitronik-zip-tile-calliope", + "MKleinSB/pxt-mpr121", + "MKleinSB/pxt-pca9685", + "MKleinSB/pxt-seeed-temperature", "MKleinSB/pxt-serialmp3", + "Microsoft/pxt-microturtle", + "Microsoft/pxt-neopixel", + "calliope-edu/CO2-Sensor-SCD40", + "calliope-edu/makecode-extension-scd41", + "calliope-edu/pxt-HM3301_Dust_Sensor", + "calliope-edu/pxt-TCS34725FN", + "calliope-edu/pxt-display", + "calliope-edu/pxt-grove", + "calliope-edu/pxt-rgblcd", + "calliope-edu/pxt-sunlightsensor-si1145", + "calliope-mini/pxt-SCD30", "dl1ekm/pxt-calliope-ADS1x15", - "dl1ekm/pxt-calliope-PCF85063-RTC" + "dl1ekm/pxt-calliope-PCF85063-RTC", + "tinysuperlab/motionkit", + "tinysuperlab/touchkit" ] }, + "skillMap": { + "defaultPath": "docs:/skillmap/mini", + "pathAliases": { + "space": "docs:/skillmap/space" + } + }, "galleries": { "First Steps": "calliope/firststeps", "Tutorials": "calliope/tutorials", diff --git a/theme/style.less b/theme/style.less index b0c82208..fca946a0 100644 --- a/theme/style.less +++ b/theme/style.less @@ -99,6 +99,7 @@ @media only screen and (min-width: @largeMonitorBreakpoint) { } + /* Download dialog */ .ui.downloaddialog.modal>.content { padding: 1rem; @@ -111,15 +112,15 @@ justify-content: center; display: flex; padding: 1rem; - + img { - height:100px; + height:100px; } } } .instructions { img { - margin-bottom:1rem; + margin-bottom:1rem; } } } \ No newline at end of file