diff --git a/.dockerignore b/.dockerignore
index 34cd20923..a8a84cccb 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -2,6 +2,7 @@
.github
docs
default.etcd
+browser
*.gz
*.tar.gz
*.bzip2
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index e93bf3cda..e5ae404ed 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -46,3 +46,4 @@ jobs:
make crosscompile
make verify
make verify-healing
+ cd browser && npm install && npm run test && cd ..
diff --git a/CREDITS b/CREDITS
index fe24fa77c..40f722b28 100644
--- a/CREDITS
+++ b/CREDITS
@@ -4205,6 +4205,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================================
+github.com/felixge/httpsnoop
+https://github.com/felixge/httpsnoop
+----------------------------------------------------------------
+Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com)
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+================================================================
+
github.com/fortytw2/leaktest
https://github.com/fortytw2/leaktest
----------------------------------------------------------------
@@ -5758,6 +5783,34 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================================
+github.com/gorilla/handlers
+https://github.com/gorilla/handlers
+----------------------------------------------------------------
+Copyright (c) 2013 The Gorilla Handlers Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+================================================================
+
github.com/gorilla/mux
https://github.com/gorilla/mux
----------------------------------------------------------------
@@ -10680,6 +10733,214 @@ https://github.com/minio/minio-go/v7
================================================================
+github.com/minio/rpc
+https://github.com/minio/rpc
+----------------------------------------------------------------
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+================================================================
+
github.com/minio/selfupdate
https://github.com/minio/selfupdate
----------------------------------------------------------------
diff --git a/Dockerfile.cicd b/Dockerfile.cicd
index 15b3ad416..f0f4264e7 100644
--- a/Dockerfile.cicd
+++ b/Dockerfile.cicd
@@ -1,3 +1,16 @@
+# Copyright 2020 MinIO, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
FROM golang:1.16-alpine as builder
LABEL maintainer="MinIO Inc "
diff --git a/README.md b/README.md
index d2c5a9334..e8d1a0eb0 100644
--- a/README.md
+++ b/README.md
@@ -25,10 +25,14 @@ Run the following command to run the latest stable image of MinIO on a Docker co
docker run -p 9000:9000 minio/minio server /data
```
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as
-the MinIO Client `mc` commandline tool. See [Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc`
-commandline tool. For application developers, see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for
-supported languages.
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
+see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
+
> NOTE: To deploy MinIO on Docker with persistent storage, you must map local persistent directories from the host OS to the container using the
`docker -v` option. For example, `-v /mnt/data:/data` maps the host OS drive at `/mnt/data` to `/data` on the Docker container.
@@ -41,10 +45,15 @@ Run the following command to run the bleeding-edge image of MinIO on a Docker co
docker run -p 9000:9000 minio/minio:edge server /data
```
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
+
> NOTE: To deploy MinIO on Docker with persistent storage, you must map local persistent directories from the host OS to the container using the
`docker -v` option. For example, `-v /mnt/data:/data` maps the host OS drive at `/mnt/data` to `/data` on the Docker container.
@@ -73,7 +82,11 @@ brew uninstall minio
brew install minio/stable/minio
```
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
@@ -87,7 +100,11 @@ chmod +x minio
./minio server /data
```
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
@@ -113,7 +130,11 @@ The following table lists supported architectures. Replace the `wget` URL with t
| 64-bit PowerPC LE (ppc64le) | https://dl.min.io/server/minio/release/linux-ppc64le/minio |
| IBM Z-Series (S390X) | https://dl.min.io/server/minio/release/linux-s390x/minio |
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
@@ -137,7 +158,11 @@ Use the following command to run a standalone MinIO server on the Windows host.
minio.exe server D:\
```
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
@@ -165,10 +190,15 @@ Use the following commands to compile and run a standalone MinIO server from sou
GO111MODULE=on go get github.com/minio/minio
```
-The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
+The MinIO deployment starts using default root credentials `minioadmin:minioadmin`. You can test the deployment using the MinIO Browser, an embedded
+web-based object browser built into MinIO Server. Point a web browser running on the host machine to http://127.0.0.1:9000 and log in with the
+root credentials. You can use the Browser to create buckets, upload objects, and browse the contents of the MinIO server.
+
+You can also connect using any S3-compatible tool, such as the MinIO Client `mc` commandline tool. See
[Test using MinIO Client `mc`](#test-using-minio-client-mc) for more information on using the `mc` commandline tool. For application developers,
see https://docs.min.io/docs/ and click **MinIO SDKs** in the navigation to view MinIO SDKs for supported languages.
+
> NOTE: Standalone MinIO servers are best suited for early development and evaluation. Certain features such as versioning, object locking, and bucket replication
require distributed deploying MinIO with Erasure Coding. For extended development and production, deploy MinIO with Erasure Coding enabled - specifically,
with a *minimum* of 4 drives per MinIO server. See [MinIO Erasure Code Quickstart Guide](https://docs.min.io/docs/minio-erasure-code-quickstart-guide.html)
@@ -240,6 +270,11 @@ The above statement is also valid for all gateway backends.
# Test MinIO Connectivity
+## Test using MinIO Browser
+MinIO Server comes with an embedded web based object browser. Point your web browser to http://127.0.0.1:9000 to ensure your server has started successfully.
+
+![Screenshot](https://github.com/minio/minio/blob/master/docs/screenshots/minio-browser.png?raw=true)
+
## Test using MinIO Client `mc`
`mc` provides a modern alternative to UNIX commands like ls, cat, cp, mirror, diff etc. It supports filesystems and Amazon S3 compatible cloud storage services. Follow the MinIO Client [Quickstart Guide](https://docs.min.io/docs/minio-client-quickstart-guide) for further instructions.
diff --git a/browser/.babelrc b/browser/.babelrc
new file mode 100644
index 000000000..f9e96ea25
--- /dev/null
+++ b/browser/.babelrc
@@ -0,0 +1,9 @@
+{
+ "presets": [
+ "es2015",
+ "react"
+ ],
+ "plugins": [
+ "transform-object-rest-spread"
+ ]
+}
\ No newline at end of file
diff --git a/browser/.editorconfig b/browser/.editorconfig
new file mode 100644
index 000000000..3674a17f4
--- /dev/null
+++ b/browser/.editorconfig
@@ -0,0 +1,16 @@
+# editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.json]
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/browser/.esformatter b/browser/.esformatter
new file mode 100644
index 000000000..1677d7c4b
--- /dev/null
+++ b/browser/.esformatter
@@ -0,0 +1,23 @@
+{
+ "plugins": [
+ "esformatter-jsx"
+ ],
+ // Copied from https://github.com/royriojas/esformatter-jsx
+ "jsx": {
+ "formatJSX": true, //Duh! that's the default
+ "attrsOnSameLineAsTag": false, // move each attribute to its own line
+ "maxAttrsOnTag": 3, // if lower or equal than 3 attributes, they will be kept on a single line
+ "firstAttributeOnSameLine": true, // keep the first attribute in the same line as the tag
+ "formatJSXExpressions": true, // default true, if false jsxExpressions won't be recursively formatted
+ "JSXExpressionsSingleLine": true, // default true, if false the JSXExpressions might span several lines
+ "alignWithFirstAttribute": false, // do not align attributes with the first tag
+ "spaceInJSXExpressionContainers": " ", // default to one space. Make it empty if you don't like spaces between JSXExpressionContainers
+ "removeSpaceBeforeClosingJSX": false, // default false. if true =>
+ "closingTagOnNewLine": false, // default false. if true attributes on multiple lines will close the tag on a new line
+ "JSXAttributeQuotes": "", // possible values "single" or "double". Leave it as empty string if you don't want to modify the attributes' quotes
+ "htmlOptions": {
+ // put here the options for js-beautify.html
+ }
+ }
+}
+
diff --git a/browser/.gitignore b/browser/.gitignore
new file mode 100644
index 000000000..38edf38cf
--- /dev/null
+++ b/browser/.gitignore
@@ -0,0 +1,18 @@
+**/*.swp
+cover.out
+*~
+minio
+!*/
+site/
+**/*.test
+**/*.sublime-workspace
+/.idea/
+/Minio.iml
+**/access.log
+build
+vendor/**/*.js
+vendor/**/*.json
+.DS_Store
+*.syso
+coverage.txt
+node_modules
diff --git a/browser/.prettierrc b/browser/.prettierrc
new file mode 100644
index 000000000..cce9d3c08
--- /dev/null
+++ b/browser/.prettierrc
@@ -0,0 +1,3 @@
+{
+ "semi": false
+}
diff --git a/browser/LICENSE b/browser/LICENSE
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/browser/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/browser/README.md b/browser/README.md
new file mode 100644
index 000000000..3023a86e4
--- /dev/null
+++ b/browser/README.md
@@ -0,0 +1,103 @@
+# MinIO File Browser
+
+``MinIO Browser`` provides minimal set of UI to manage buckets and objects on ``minio`` server.
+
+
+## Installation
+
+### Install node
+```sh
+curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
+exec -l $SHELL
+nvm install stable
+```
+
+### Install node dependencies
+```sh
+npm install
+```
+
+## Generating Assets
+
+> NOTE: if you are not part of MinIO organization please do not run this yourself and submit in a PR. Static assets in PRs are allowed only for authorized users.
+
+```sh
+npm run release
+```
+
+This generates `release` in the current directory.
+
+
+## Run MinIO Browser with live reload
+
+### Run MinIO Browser with live reload
+
+```sh
+npm run dev
+```
+
+Open [http://localhost:8080/minio/](http://localhost:8080/minio/) in your browser to play with the application.
+
+### Run MinIO Browser with live reload on custom port
+
+Edit `browser/webpack.config.js`
+
+```diff
+diff --git a/browser/webpack.config.js b/browser/webpack.config.js
+index 3ccdaba..9496c56 100644
+--- a/browser/webpack.config.js
++++ b/browser/webpack.config.js
+@@ -58,6 +58,7 @@ var exports = {
+ historyApiFallback: {
+ index: '/minio/'
+ },
++ port: 8888,
+ proxy: {
+ '/minio/webrpc': {
+ target: 'http://localhost:9000',
+@@ -97,7 +98,7 @@ var exports = {
+ if (process.env.NODE_ENV === 'dev') {
+ exports.entry = [
+ 'webpack/hot/dev-server',
+- 'webpack-dev-server/client?http://localhost:8080',
++ 'webpack-dev-server/client?http://localhost:8888',
+ path.resolve(__dirname, 'app/index.js')
+ ]
+ }
+```
+
+```sh
+npm run dev
+```
+
+Open [http://localhost:8888/minio/](http://localhost:8888/minio/) in your browser to play with the application.
+
+### Run MinIO Browser with live reload on any IP
+
+Edit `browser/webpack.config.js`
+
+```diff
+diff --git a/browser/webpack.config.js b/browser/webpack.config.js
+index 8bdbba53..139f6049 100644
+--- a/browser/webpack.config.js
++++ b/browser/webpack.config.js
+@@ -71,6 +71,7 @@ var exports = {
+ historyApiFallback: {
+ index: '/minio/'
+ },
++ host: '0.0.0.0',
+ proxy: {
+ '/minio/webrpc': {
+ target: 'http://localhost:9000',
+```
+
+```sh
+npm run dev
+```
+
+Open [http://IP:8080/minio/](http://IP:8080/minio/) in your browser to play with the application.
+
+
+## Run tests
+
+ npm run test
diff --git a/browser/app/css/loader.css b/browser/app/css/loader.css
new file mode 100644
index 000000000..bba70295f
--- /dev/null
+++ b/browser/app/css/loader.css
@@ -0,0 +1,98 @@
+.page-load {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ background: #002a37;
+ z-index: 100;
+ transition: opacity 200ms;
+ -webkit-transition: opacity 200ms;
+}
+
+.pl-0{
+ opacity: 0;
+}
+
+.pl-1 {
+ display: none;
+}
+
+.pl-inner {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ left: 50%;
+ margin-left: -50px;
+ top: 50%;
+ margin-top: -50px;
+ text-align: center;
+ -webkit-animation: fade-in 500ms;
+ animation: fade-in 500ms;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+ animation-delay: 350ms;
+ -webkit-animation-delay: 350ms;
+ -webkit-backface-visibility: visible;
+ backface-visibility: visible;
+}
+
+.pl-inner:before {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ display: block;
+ -webkit-animation: spin 1000ms infinite linear;
+ animation: spin 1000ms infinite linear;
+ border: 1px solid rgba(255, 255, 255, 0.2);;
+ border-left-color: #fff;
+ border-radius: 50%;
+}
+
+.pl-inner > img {
+ width: 30px;
+ margin-top: 21px;
+}
+
+@-webkit-keyframes fade-in {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes fade-in {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
diff --git a/browser/app/fonts/lato/lato-normal.woff b/browser/app/fonts/lato/lato-normal.woff
new file mode 100755
index 000000000..f2317755c
Binary files /dev/null and b/browser/app/fonts/lato/lato-normal.woff differ
diff --git a/browser/app/fonts/lato/lato-normal.woff2 b/browser/app/fonts/lato/lato-normal.woff2
new file mode 100755
index 000000000..2a119ebd5
Binary files /dev/null and b/browser/app/fonts/lato/lato-normal.woff2 differ
diff --git a/browser/app/img/arrow.svg b/browser/app/img/arrow.svg
new file mode 100644
index 000000000..fb5574ff8
--- /dev/null
+++ b/browser/app/img/arrow.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/browser/app/img/browsers/chrome.png b/browser/app/img/browsers/chrome.png
new file mode 100644
index 000000000..278ef4d15
Binary files /dev/null and b/browser/app/img/browsers/chrome.png differ
diff --git a/browser/app/img/browsers/firefox.png b/browser/app/img/browsers/firefox.png
new file mode 100644
index 000000000..2803f10a7
Binary files /dev/null and b/browser/app/img/browsers/firefox.png differ
diff --git a/browser/app/img/browsers/safari.png b/browser/app/img/browsers/safari.png
new file mode 100644
index 000000000..4ed52b904
Binary files /dev/null and b/browser/app/img/browsers/safari.png differ
diff --git a/browser/app/img/favicon/favicon-16x16.png b/browser/app/img/favicon/favicon-16x16.png
new file mode 100644
index 000000000..1ef69e777
Binary files /dev/null and b/browser/app/img/favicon/favicon-16x16.png differ
diff --git a/browser/app/img/favicon/favicon-32x32.png b/browser/app/img/favicon/favicon-32x32.png
new file mode 100644
index 000000000..24f73811b
Binary files /dev/null and b/browser/app/img/favicon/favicon-32x32.png differ
diff --git a/browser/app/img/favicon/favicon-96x96.png b/browser/app/img/favicon/favicon-96x96.png
new file mode 100644
index 000000000..7410eca4c
Binary files /dev/null and b/browser/app/img/favicon/favicon-96x96.png differ
diff --git a/browser/app/img/login-img-bck.svg b/browser/app/img/login-img-bck.svg
new file mode 100644
index 000000000..2dd8593c5
--- /dev/null
+++ b/browser/app/img/login-img-bck.svg
@@ -0,0 +1,50 @@
+
+
+
+ Untitled
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/browser/app/img/logo.svg b/browser/app/img/logo.svg
new file mode 100644
index 000000000..504777e9d
--- /dev/null
+++ b/browser/app/img/logo.svg
@@ -0,0 +1,12 @@
+
+
+
+ logo
+ Created with Sketch.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/browser/app/img/more-h-light.svg b/browser/app/img/more-h-light.svg
new file mode 100644
index 000000000..0c2e2da60
--- /dev/null
+++ b/browser/app/img/more-h-light.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/browser/app/img/more-h.svg b/browser/app/img/more-h.svg
new file mode 100644
index 000000000..cf69dcf6b
--- /dev/null
+++ b/browser/app/img/more-h.svg
@@ -0,0 +1 @@
+
diff --git a/browser/app/img/select-caret.svg b/browser/app/img/select-caret.svg
new file mode 100644
index 000000000..b2b26b86b
--- /dev/null
+++ b/browser/app/img/select-caret.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/browser/app/index.html b/browser/app/index.html
new file mode 100644
index 000000000..61cc6e39d
--- /dev/null
+++ b/browser/app/index.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+ MinIO Browser
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/browser/app/index.js b/browser/app/index.js
new file mode 100644
index 000000000..4856f0a11
--- /dev/null
+++ b/browser/app/index.js
@@ -0,0 +1,43 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import "babel-polyfill"
+import "./less/main.less"
+import "@fortawesome/fontawesome-free/css/all.css"
+import "material-design-iconic-font/dist/css/material-design-iconic-font.min.css"
+
+import React from "react"
+import ReactDOM from "react-dom"
+import { Router, Route } from "react-router-dom"
+import { Provider } from "react-redux"
+
+import history from "./js/history"
+import configureStore from "./js/store/configure-store"
+import hideLoader from "./js/loader"
+import App from "./js/App"
+
+const store = configureStore()
+
+ReactDOM.render(
+
+
+
+
+ ,
+ document.getElementById("root")
+)
+
+hideLoader()
diff --git a/browser/app/js/App.js b/browser/app/js/App.js
new file mode 100644
index 000000000..825661b43
--- /dev/null
+++ b/browser/app/js/App.js
@@ -0,0 +1,34 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { Route, Switch, Redirect } from "react-router-dom"
+import Browser from "./browser/Browser"
+import Login from "./browser/Login"
+import OpenIDLogin from "./browser/OpenIDLogin"
+import web from "./web"
+
+export const App = () => {
+ return (
+
+
+
+
+
+ )
+}
+
+export default App
diff --git a/browser/app/js/__tests__/App.test.js b/browser/app/js/__tests__/App.test.js
new file mode 100644
index 000000000..4084a089c
--- /dev/null
+++ b/browser/app/js/__tests__/App.test.js
@@ -0,0 +1,65 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { MemoryRouter } from "react-router-dom"
+import App from "../App"
+
+jest.mock("../browser/Login", () => () => Login
)
+jest.mock("../browser/Browser", () => () => Browser
)
+
+describe("App", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render Login component for '/login' route", () => {
+ const wrapper = mount(
+
+
+
+ )
+ expect(wrapper.text()).toBe("Login")
+ })
+
+ it("should render Browser component for '/' route", () => {
+ const wrapper = mount(
+
+
+
+ )
+ expect(wrapper.text()).toBe("Browser")
+ })
+
+ it("should render Browser component for '/bucket' route", () => {
+ const wrapper = mount(
+
+
+
+ )
+ expect(wrapper.text()).toBe("Browser")
+ })
+
+ it("should render Browser component for '/bucket/a/b/c' route", () => {
+ const wrapper = mount(
+
+
+
+ )
+ expect(wrapper.text()).toBe("Browser")
+ })
+})
diff --git a/browser/app/js/__tests__/jsonrpc-test.js b/browser/app/js/__tests__/jsonrpc-test.js
new file mode 100644
index 000000000..cc2c34e9e
--- /dev/null
+++ b/browser/app/js/__tests__/jsonrpc-test.js
@@ -0,0 +1,41 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import JSONrpc from "../jsonrpc"
+
+describe("jsonrpc", () => {
+ it("should fail with invalid endpoint", done => {
+ try {
+ let jsonRPC = new JSONrpc({
+ endpoint: "htt://localhost:9000",
+ namespace: "Test"
+ })
+ } catch (e) {
+ done()
+ }
+ })
+ it("should succeed with valid endpoint", () => {
+ let jsonRPC = new JSONrpc({
+ endpoint: "http://localhost:9000/webrpc",
+ namespace: "Test"
+ })
+ expect(jsonRPC.version).toEqual("2.0")
+ expect(jsonRPC.host).toEqual("localhost")
+ expect(jsonRPC.port).toEqual("9000")
+ expect(jsonRPC.path).toEqual("/webrpc")
+ expect(jsonRPC.scheme).toEqual("http")
+ })
+})
diff --git a/browser/app/js/alert/Alert.js b/browser/app/js/alert/Alert.js
new file mode 100644
index 000000000..7603a19d8
--- /dev/null
+++ b/browser/app/js/alert/Alert.js
@@ -0,0 +1,30 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import AlertComponent from "react-bootstrap/lib/Alert"
+
+const Alert = ({ show, type, message, onDismiss }) => (
+
+ {message}
+
+)
+
+export default Alert
diff --git a/browser/app/js/alert/AlertContainer.js b/browser/app/js/alert/AlertContainer.js
new file mode 100644
index 000000000..fd1e4ebe9
--- /dev/null
+++ b/browser/app/js/alert/AlertContainer.js
@@ -0,0 +1,41 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import Alert from "./Alert"
+import * as alertActions from "./actions"
+
+export const AlertContainer = ({ alert, clearAlert }) => {
+ if (!alert.message) {
+ return ""
+ }
+ return
+}
+
+const mapStateToProps = state => {
+ return {
+ alert: state.alert
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ clearAlert: () => dispatch(alertActions.clear())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(AlertContainer)
diff --git a/browser/app/js/alert/__tests___/Alert.test.js b/browser/app/js/alert/__tests___/Alert.test.js
new file mode 100644
index 000000000..62eaa27b8
--- /dev/null
+++ b/browser/app/js/alert/__tests___/Alert.test.js
@@ -0,0 +1,34 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import Alert from "../Alert"
+
+describe("Alert", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call onDismiss when close button is clicked", () => {
+ const onDismiss = jest.fn()
+ const wrapper = mount(
+
+ )
+ wrapper.find("button").simulate("click", { preventDefault: jest.fn() })
+ expect(onDismiss).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/alert/__tests___/AlertContainer.test.js b/browser/app/js/alert/__tests___/AlertContainer.test.js
new file mode 100644
index 000000000..ced273540
--- /dev/null
+++ b/browser/app/js/alert/__tests___/AlertContainer.test.js
@@ -0,0 +1,34 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { AlertContainer } from "../AlertContainer"
+
+describe("Alert", () => {
+ it("should render without crashing", () => {
+ shallow(
+
+ )
+ })
+
+ it("should render nothing if message is empty", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Alert").length).toBe(0)
+ })
+})
diff --git a/browser/app/js/alert/__tests___/actions.test.js b/browser/app/js/alert/__tests___/actions.test.js
new file mode 100644
index 000000000..b7b561f69
--- /dev/null
+++ b/browser/app/js/alert/__tests___/actions.test.js
@@ -0,0 +1,69 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import configureStore from "redux-mock-store"
+import thunk from "redux-thunk"
+import * as actionsAlert from "../actions"
+
+const middlewares = [thunk]
+const mockStore = configureStore(middlewares)
+
+jest.useFakeTimers()
+
+describe("Alert actions", () => {
+ it("creates alert/SET action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "alert/SET",
+ alert: { id: 0, message: "Test alert", type: "danger" }
+ }
+ ]
+ store.dispatch(actionsAlert.set({ message: "Test alert", type: "danger" }))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates alert/CLEAR action for non danger alerts", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "alert/SET",
+ alert: { id: 1, message: "Test alert" }
+ },
+ {
+ type: "alert/CLEAR",
+ alert: { id: 1 }
+ }
+ ]
+ store.dispatch(actionsAlert.set({ message: "Test alert" }))
+ jest.runAllTimers()
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates alert/CLEAR action directly", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "alert/CLEAR"
+ }
+ ]
+ store.dispatch(actionsAlert.clear())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+})
diff --git a/browser/app/js/alert/__tests___/reducer.test.js b/browser/app/js/alert/__tests___/reducer.test.js
new file mode 100644
index 000000000..19c7ac7bb
--- /dev/null
+++ b/browser/app/js/alert/__tests___/reducer.test.js
@@ -0,0 +1,87 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import reducer from "../reducer"
+import * as actionsAlert from "../actions"
+
+describe("alert reducer", () => {
+ it("should return the initial state", () => {
+ expect(reducer(undefined, {})).toEqual({
+ show: false,
+ type: "danger"
+ })
+ })
+
+ it("should handle SET_ALERT", () => {
+ expect(
+ reducer(undefined, {
+ type: actionsAlert.SET,
+ alert: { id: 1, type: "danger", message: "Test message" }
+ })
+ ).toEqual({
+ show: true,
+ id: 1,
+ type: "danger",
+ message: "Test message"
+ })
+ })
+
+ it("should clear alert if id not passed", () => {
+ expect(
+ reducer(
+ { show: true, type: "danger", message: "Test message" },
+ {
+ type: actionsAlert.CLEAR
+ }
+ )
+ ).toEqual({
+ show: false,
+ type: "danger"
+ })
+ })
+
+ it("should clear alert if id is matching", () => {
+ expect(
+ reducer(
+ { show: true, id: 1, type: "danger", message: "Test message" },
+ {
+ type: actionsAlert.CLEAR,
+ alert: { id: 1 }
+ }
+ )
+ ).toEqual({
+ show: false,
+ type: "danger"
+ })
+ })
+
+ it("should not clear alert if id is not matching", () => {
+ expect(
+ reducer(
+ { show: true, id: 1, type: "danger", message: "Test message" },
+ {
+ type: actionsAlert.CLEAR,
+ alert: { id: 2 }
+ }
+ )
+ ).toEqual({
+ show: true,
+ id: 1,
+ type: "danger",
+ message: "Test message"
+ })
+ })
+})
diff --git a/browser/app/js/alert/actions.js b/browser/app/js/alert/actions.js
new file mode 100644
index 000000000..d602039ee
--- /dev/null
+++ b/browser/app/js/alert/actions.js
@@ -0,0 +1,46 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export const SET = "alert/SET"
+export const CLEAR = "alert/CLEAR"
+
+export let alertId = 0
+
+export const set = alert => {
+ const id = alertId++
+ return (dispatch, getState) => {
+ if (alert.type !== "danger" || alert.autoClear) {
+ setTimeout(() => {
+ dispatch({
+ type: CLEAR,
+ alert: {
+ id
+ }
+ })
+ }, 5000)
+ }
+ dispatch({
+ type: SET,
+ alert: Object.assign({}, alert, {
+ id
+ })
+ })
+ }
+}
+
+export const clear = () => {
+ return { type: CLEAR }
+}
diff --git a/browser/app/js/alert/reducer.js b/browser/app/js/alert/reducer.js
new file mode 100644
index 000000000..4fae949a5
--- /dev/null
+++ b/browser/app/js/alert/reducer.js
@@ -0,0 +1,41 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as actionsAlert from "./actions"
+
+const initialState = {
+ show: false,
+ type: "danger"
+}
+export default (state = initialState, action) => {
+ switch (action.type) {
+ case actionsAlert.SET:
+ return {
+ show: true,
+ id: action.alert.id,
+ type: action.alert.type,
+ message: action.alert.message
+ }
+ case actionsAlert.CLEAR:
+ if (action.alert && action.alert.id != state.id) {
+ return state
+ } else {
+ return initialState
+ }
+ default:
+ return state
+ }
+}
diff --git a/browser/app/js/browser/AboutModal.js b/browser/app/js/browser/AboutModal.js
new file mode 100644
index 000000000..63591cff9
--- /dev/null
+++ b/browser/app/js/browser/AboutModal.js
@@ -0,0 +1,60 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { Modal } from "react-bootstrap"
+import logo from "../../img/logo.svg"
+
+export const AboutModal = ({ serverInfo, hideAbout }) => {
+ const { version, platform, runtime } = serverInfo
+ return (
+
+
+ ×
+
+
+
+
+
+
+ Version
+ {version}
+
+
+ Platform
+ {platform}
+
+
+ Runtime
+ {runtime}
+
+
+
+
+
+ )
+}
+
+export default AboutModal
diff --git a/browser/app/js/browser/Browser.js b/browser/app/js/browser/Browser.js
new file mode 100644
index 000000000..a1930f887
--- /dev/null
+++ b/browser/app/js/browser/Browser.js
@@ -0,0 +1,40 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import { connect } from "react-redux"
+import SideBar from "./SideBar"
+import MainContent from "./MainContent"
+import AlertContainer from "../alert/AlertContainer"
+
+class Browser extends React.Component {
+ render() {
+ return (
+
+ )
+ }
+}
+
+export default connect(state => state)(Browser)
diff --git a/browser/app/js/browser/BrowserDropdown.js b/browser/app/js/browser/BrowserDropdown.js
new file mode 100644
index 000000000..ed1bdd917
--- /dev/null
+++ b/browser/app/js/browser/BrowserDropdown.js
@@ -0,0 +1,135 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Dropdown } from "react-bootstrap"
+import * as browserActions from "./actions"
+import web from "../web"
+import history from "../history"
+import AboutModal from "./AboutModal"
+import ChangePasswordModal from "./ChangePasswordModal"
+
+export class BrowserDropdown extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ showAboutModal: false,
+ showChangePasswordModal: false
+ }
+ }
+ showAbout(e) {
+ e.preventDefault()
+ this.setState({
+ showAboutModal: true
+ })
+ }
+ hideAbout() {
+ this.setState({
+ showAboutModal: false
+ })
+ }
+ showChangePassword(e) {
+ e.preventDefault()
+ this.setState({
+ showChangePasswordModal: true
+ })
+ }
+ hideChangePassword() {
+ this.setState({
+ showChangePasswordModal: false
+ })
+ }
+ componentDidMount() {
+ const { fetchServerInfo } = this.props
+ fetchServerInfo()
+ }
+ logout(e) {
+ e.preventDefault()
+ web.Logout()
+ history.replace("/login")
+ }
+ render() {
+ const { serverInfo } = this.props
+ return (
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ serverInfo: state.browser.serverInfo
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ fetchServerInfo: () => dispatch(browserActions.fetchServerInfo())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(BrowserDropdown)
diff --git a/browser/app/js/browser/ChangePasswordModal.js b/browser/app/js/browser/ChangePasswordModal.js
new file mode 100644
index 000000000..b21464c13
--- /dev/null
+++ b/browser/app/js/browser/ChangePasswordModal.js
@@ -0,0 +1,260 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import web from "../web"
+import * as alertActions from "../alert/actions"
+import { getRandomAccessKey, getRandomSecretKey } from "../utils"
+import jwtDecode from "jwt-decode"
+import classNames from "classnames"
+
+import { Modal, ModalBody, ModalHeader } from "react-bootstrap"
+import InputGroup from "./InputGroup"
+import { ACCESS_KEY_MIN_LENGTH, SECRET_KEY_MIN_LENGTH } from "../constants"
+
+export class ChangePasswordModal extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ currentAccessKey: "",
+ currentSecretKey: "",
+ currentSecretKeyVisible: false,
+ newAccessKey: "",
+ newSecretKey: "",
+ newSecretKeyVisible: false
+ }
+ }
+ // When its shown, it loads the access key from JWT token
+ componentWillMount() {
+ const token = jwtDecode(web.GetToken())
+ this.setState({
+ currentAccessKey: token.sub,
+ newAccessKey: token.sub
+ })
+ }
+
+ // Save the auth params and set them.
+ setAuth(e) {
+ const { showAlert } = this.props
+
+ if (this.canUpdateCredentials()) {
+ const currentAccessKey = this.state.currentAccessKey
+ const currentSecretKey = this.state.currentSecretKey
+ const newAccessKey = this.state.newAccessKey
+ const newSecretKey = this.state.newSecretKey
+ web
+ .SetAuth({
+ currentAccessKey,
+ currentSecretKey,
+ newAccessKey,
+ newSecretKey
+ })
+ .then(data => {
+ showAlert({
+ type: "success",
+ message: "Credentials updated successfully."
+ })
+ })
+ .catch(err => {
+ showAlert({
+ type: "danger",
+ message: err.message
+ })
+ })
+ }
+ }
+
+ generateAuth(e) {
+ const { serverInfo } = this.props
+ this.setState({
+ newSecretKey: getRandomSecretKey(),
+ newSecretKeyVisible: true
+ })
+ }
+
+ canChangePassword() {
+ const { serverInfo } = this.props
+ // Password change is not allowed for temporary users(STS)
+ if(serverInfo.userInfo.isTempUser) {
+ return false
+ }
+
+ // Password change is only allowed for regular users
+ if (!serverInfo.userInfo.isIAMUser) {
+ return false
+ }
+
+ return true
+ }
+
+ canUpdateCredentials() {
+ return (
+ this.state.currentAccessKey.length > 0 &&
+ this.state.currentSecretKey.length > 0 &&
+ this.state.newAccessKey.length >= ACCESS_KEY_MIN_LENGTH &&
+ this.state.newSecretKey.length >= SECRET_KEY_MIN_LENGTH
+ )
+ }
+
+ render() {
+ const { hideChangePassword, serverInfo } = this.props
+ const allowChangePassword = this.canChangePassword()
+
+ if (!allowChangePassword) {
+ return (
+
+ Change Password
+
+ Credentials of this user cannot be updated through MinIO Browser.
+
+
+
+ Close
+
+
+
+ )
+ }
+
+ return (
+
+ Change Password
+
+
+
+
+ {
+ this.setState({
+ currentSecretKeyVisible: !this.state.currentSecretKeyVisible
+ })
+ }}
+ className={
+ "toggle-password fas fa-eye " +
+ (this.state.currentSecretKeyVisible ? "toggled" : "")
+ }
+ />
+ {
+ this.setState({ currentSecretKey: e.target.value })
+ }}
+ id="currentSecretKey"
+ label="Current Secret Key"
+ name="currentSecretKey"
+ type={this.state.currentSecretKeyVisible ? "text" : "password"}
+ spellCheck="false"
+ required="required"
+ autoComplete="false"
+ align="ig-left"
+ />
+
+
+
+ {
+ this.setState({
+ newSecretKeyVisible: !this.state.newSecretKeyVisible
+ })
+ }}
+ className={
+ "toggle-password fas fa-eye " +
+ (this.state.newSecretKeyVisible ? "toggled" : "")
+ }
+ />
+ {
+ this.setState({ newSecretKey: e.target.value })
+ }}
+ id="newSecretKey"
+ label="New Secret Key"
+ name="newSecretKey"
+ type={this.state.newSecretKeyVisible ? "text" : "password"}
+ spellCheck="false"
+ required="required"
+ autoComplete="false"
+ align="ig-left"
+ onChange={e => {
+ this.setState({ newSecretKey: e.target.value })
+ }}
+ />
+
+
+
+
+ Generate
+
+
+ Update
+
+
+ Cancel
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ serverInfo: state.browser.serverInfo
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ showAlert: alert => dispatch(alertActions.set(alert))
+ }
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(ChangePasswordModal)
diff --git a/browser/app/js/browser/ConfirmModal.js b/browser/app/js/browser/ConfirmModal.js
new file mode 100644
index 000000000..3d7e6402f
--- /dev/null
+++ b/browser/app/js/browser/ConfirmModal.js
@@ -0,0 +1,57 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { Modal, ModalBody } from "react-bootstrap"
+
+let ConfirmModal = ({
+ baseClass,
+ icon,
+ text,
+ sub,
+ okText,
+ cancelText,
+ okHandler,
+ cancelHandler,
+ show
+}) => {
+ return (
+
+
+
+
+
+ {text}
+ {sub}
+
+
+
+ {okText}
+
+
+ {cancelText}
+
+
+
+ )
+}
+
+export default ConfirmModal
diff --git a/browser/app/js/browser/Header.js b/browser/app/js/browser/Header.js
new file mode 100644
index 000000000..f9266ff81
--- /dev/null
+++ b/browser/app/js/browser/Header.js
@@ -0,0 +1,45 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import ObjectsSearch from "../objects/ObjectsSearch"
+import Path from "../objects/Path"
+import StorageInfo from "./StorageInfo"
+import BrowserDropdown from "./BrowserDropdown"
+import web from "../web"
+import { minioBrowserPrefix } from "../constants"
+
+export const Header = () => {
+ const loggedIn = web.LoggedIn()
+ return (
+
+
+ {loggedIn && }
+ {loggedIn && }
+
+
+ )
+}
+
+export default Header
diff --git a/browser/app/js/browser/Host.js b/browser/app/js/browser/Host.js
new file mode 100644
index 000000000..010fdd4a5
--- /dev/null
+++ b/browser/app/js/browser/Host.js
@@ -0,0 +1,26 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+
+export const Host = () => (
+
+)
+
+export default Host
diff --git a/browser/app/js/browser/InputGroup.js b/browser/app/js/browser/InputGroup.js
new file mode 100644
index 000000000..3d82389d7
--- /dev/null
+++ b/browser/app/js/browser/InputGroup.js
@@ -0,0 +1,70 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+
+let InputGroup = ({
+ label,
+ id,
+ name,
+ value,
+ onChange,
+ type,
+ spellCheck,
+ required,
+ readonly,
+ autoComplete,
+ align,
+ className
+}) => {
+ var input = (
+
+ )
+ if (readonly)
+ input = (
+
+ )
+ return (
+
+ {input}
+
+ {label}
+
+ )
+}
+
+export default InputGroup
diff --git a/browser/app/js/browser/Login.js b/browser/app/js/browser/Login.js
new file mode 100644
index 000000000..39b84e446
--- /dev/null
+++ b/browser/app/js/browser/Login.js
@@ -0,0 +1,187 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import logo from "../../img/logo.svg"
+import Alert from "../alert/Alert"
+import * as actionsAlert from "../alert/actions"
+import InputGroup from "./InputGroup"
+import web from "../web"
+import { Redirect, Link } from "react-router-dom"
+import OpenIDLoginButton from './OpenIDLoginButton'
+
+export class Login extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ accessKey: "",
+ secretKey: "",
+ discoveryDoc: {},
+ clientId: ""
+ }
+ }
+
+ // Handle field changes
+ accessKeyChange(e) {
+ this.setState({
+ accessKey: e.target.value
+ })
+ }
+
+ secretKeyChange(e) {
+ this.setState({
+ secretKey: e.target.value
+ })
+ }
+
+ handleSubmit(event) {
+ event.preventDefault()
+ const { showAlert, clearAlert, history } = this.props
+ let message = ""
+ if (this.state.accessKey === "") {
+ message = "Access Key cannot be empty"
+ }
+ if (this.state.secretKey === "") {
+ message = "Secret Key cannot be empty"
+ }
+ if (message) {
+ showAlert("danger", message)
+ return
+ }
+ web
+ .Login({
+ username: this.state.accessKey,
+ password: this.state.secretKey
+ })
+ .then(res => {
+ // Clear alerts from previous login attempts
+ clearAlert()
+
+ history.push("/")
+ })
+ .catch(e => {
+ showAlert("danger", e.message)
+ })
+ }
+
+ componentWillMount() {
+ const { clearAlert } = this.props
+ // Clear out any stale message in the alert of previous page
+ clearAlert()
+ document.body.classList.add("is-guest")
+ }
+
+ componentDidMount() {
+ web.GetDiscoveryDoc().then(({ DiscoveryDoc, clientId }) => {
+ this.setState({
+ clientId,
+ discoveryDoc: DiscoveryDoc
+ })
+ })
+ }
+
+ componentWillUnmount() {
+ document.body.classList.remove("is-guest")
+ }
+
+ render() {
+ const { clearAlert, alert } = this.props
+ if (web.LoggedIn()) {
+ return
+ }
+ let alertBox =
+ // Make sure you don't show a fading out alert box on the initial web-page load.
+ if (!alert.message) alertBox = ""
+
+ const showOpenID = Boolean(this.state.discoveryDoc && this.state.discoveryDoc.authorization_endpoint)
+ return (
+
+ {alertBox}
+
+
+ {showOpenID && (
+
+
or
+ {
+ this.state.clientId ? (
+
+ Log in with OpenID
+
+ ) : (
+
+ Log in with OpenID
+
+ )
+ }
+
+ )}
+
+
+
+
+
+
{window.location.host}
+
+
+ )
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ showAlert: (type, message) =>
+ dispatch(actionsAlert.set({ type: type, message: message })),
+ clearAlert: () => dispatch(actionsAlert.clear())
+ }
+}
+
+export default connect(
+ state => state,
+ mapDispatchToProps
+)(Login)
diff --git a/browser/app/js/browser/MainActions.js b/browser/app/js/browser/MainActions.js
new file mode 100644
index 000000000..44145c3a6
--- /dev/null
+++ b/browser/app/js/browser/MainActions.js
@@ -0,0 +1,106 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Dropdown, OverlayTrigger, Tooltip } from "react-bootstrap"
+import web from "../web"
+import * as actionsBuckets from "../buckets/actions"
+import * as uploadsActions from "../uploads/actions"
+import { getPrefixWritable } from "../objects/selectors"
+
+export const MainActions = ({
+ prefixWritable,
+ uploadFile,
+ showMakeBucketModal
+}) => {
+ const uploadTooltip = Upload file
+ const makeBucketTooltip = (
+ Create bucket
+ )
+ const onFileUpload = e => {
+ e.preventDefault()
+ let files = e.target.files
+ let filesToUploadCount = files.length
+ for (let i = 0; i < filesToUploadCount; i++) {
+ uploadFile(files.item(i))
+ }
+ e.target.value = null
+ }
+
+ const loggedIn = web.LoggedIn()
+
+ if (loggedIn || prefixWritable) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {" "}
+ {" "}
+
+
+
+ {loggedIn && (
+
+ {
+ e.preventDefault()
+ showMakeBucketModal()
+ }}
+ >
+
+
+
+ )}
+
+
+ )
+ } else {
+ return
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ prefixWritable: getPrefixWritable(state)
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ uploadFile: file => dispatch(uploadsActions.uploadFile(file)),
+ showMakeBucketModal: () => dispatch(actionsBuckets.showMakeBucketModal())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(MainActions)
diff --git a/browser/app/js/browser/MainContent.js b/browser/app/js/browser/MainContent.js
new file mode 100644
index 000000000..83bb15664
--- /dev/null
+++ b/browser/app/js/browser/MainContent.js
@@ -0,0 +1,43 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import MobileHeader from "./MobileHeader"
+import Header from "./Header"
+import ObjectsSection from "../objects/ObjectsSection"
+import MainActions from "./MainActions"
+import BucketPolicyModal from "../buckets/BucketPolicyModal"
+import MakeBucketModal from "../buckets/MakeBucketModal"
+import UploadModal from "../uploads/UploadModal"
+import ObjectsBulkActions from "../objects/ObjectsBulkActions"
+import Dropzone from "../uploads/Dropzone"
+
+export const MainContent = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+)
+
+export default MainContent
diff --git a/browser/app/js/browser/MobileHeader.js b/browser/app/js/browser/MobileHeader.js
new file mode 100644
index 000000000..67e1e0926
--- /dev/null
+++ b/browser/app/js/browser/MobileHeader.js
@@ -0,0 +1,60 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import { connect } from "react-redux"
+import logo from "../../img/logo.svg"
+import * as actionsCommon from "./actions"
+
+export const MobileHeader = ({ sidebarOpen, toggleSidebar }) => (
+
+
+
+
+)
+
+const mapStateToProps = state => {
+ return {
+ sidebarOpen: state.browser.sidebarOpen
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ toggleSidebar: () => dispatch(actionsCommon.toggleSidebar())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(MobileHeader)
diff --git a/browser/app/js/browser/OpenIDLogin.js b/browser/app/js/browser/OpenIDLogin.js
new file mode 100644
index 000000000..56b199b05
--- /dev/null
+++ b/browser/app/js/browser/OpenIDLogin.js
@@ -0,0 +1,169 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import logo from "../../img/logo.svg"
+import Alert from "../alert/Alert"
+import * as actionsAlert from "../alert/actions"
+import InputGroup from "./InputGroup"
+import web from "../web"
+import { Redirect } from "react-router-dom"
+import qs from "query-string"
+import { getRandomString } from "../utils"
+import storage from "local-storage-fallback"
+import jwtDecode from "jwt-decode"
+import { buildOpenIDAuthURL, OPEN_ID_NONCE_KEY } from './utils'
+
+export class OpenIDLogin extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ clientID: "",
+ discoveryDoc: {}
+ }
+ this.clientIDChange = this.clientIDChange.bind(this)
+ this.handleSubmit = this.handleSubmit.bind(this)
+ }
+
+ clientIDChange(e) {
+ this.setState({
+ clientID: e.target.value
+ })
+ }
+
+ handleSubmit(event) {
+ event.preventDefault()
+ const { showAlert } = this.props
+ let message = ""
+ if (this.state.clientID === "") {
+ message = "Client ID cannot be empty"
+ }
+ if (message) {
+ showAlert("danger", message)
+ return
+ }
+
+ if (this.state.discoveryDoc && this.state.discoveryDoc.authorization_endpoint) {
+ const redirectURI = window.location.href.split("#")[0]
+
+ // Store nonce in localstorage to check again after the redirect
+ const nonce = getRandomString(16)
+ storage.setItem(OPEN_ID_NONCE_KEY, nonce)
+
+ const authURL = buildOpenIDAuthURL(
+ this.state.discoveryDoc.authorization_endpoint,
+ this.state.discoveryDoc.scopes_supported,
+ redirectURI,
+ this.state.clientID,
+ nonce
+ )
+ window.location = authURL
+ }
+ }
+
+ componentWillMount() {
+ const { clearAlert } = this.props
+ // Clear out any stale message in the alert of previous page
+ clearAlert()
+ document.body.classList.add("is-guest")
+
+ web.GetDiscoveryDoc().then(({ DiscoveryDoc }) => {
+ this.setState({
+ discoveryDoc: DiscoveryDoc
+ })
+ })
+ }
+
+ componentDidMount() {
+ const values = qs.parse(this.props.location.hash)
+ if (values.error) {
+ this.props.showAlert("danger", values.error_description)
+ return
+ }
+
+ if (values.id_token) {
+ // Check nonce on the token to prevent replay attacks
+ const tokenJSON = jwtDecode(values.id_token)
+ if (storage.getItem(OPEN_ID_NONCE_KEY) !== tokenJSON.nonce) {
+ this.props.showAlert("danger", "Invalid auth token")
+ return
+ }
+
+ web.LoginSTS({ token: values.id_token }).then(() => {
+ storage.removeItem(OPEN_ID_NONCE_KEY)
+ this.forceUpdate()
+ return
+ })
+ }
+ }
+
+ componentWillUnmount() {
+ document.body.classList.remove("is-guest")
+ }
+
+ render() {
+ const { clearAlert, alert } = this.props
+ if (web.LoggedIn()) {
+ return
+ }
+ let alertBox =
+ // Make sure you don't show a fading out alert box on the initial web-page load.
+ if (!alert.message) alertBox = ""
+ return (
+
+ {alertBox}
+
+
+
+
+
+
+
+
{window.location.host}
+
+
+ )
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ showAlert: (type, message) =>
+ dispatch(actionsAlert.set({ type: type, message: message })),
+ clearAlert: () => dispatch(actionsAlert.clear())
+ }
+}
+
+export default connect(
+ state => state,
+ mapDispatchToProps
+)(OpenIDLogin)
diff --git a/browser/app/js/browser/OpenIDLoginButton.js b/browser/app/js/browser/OpenIDLoginButton.js
new file mode 100644
index 000000000..30cd3abf7
--- /dev/null
+++ b/browser/app/js/browser/OpenIDLoginButton.js
@@ -0,0 +1,57 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { getRandomString } from "../utils"
+import storage from "local-storage-fallback"
+import { buildOpenIDAuthURL, OPEN_ID_NONCE_KEY } from './utils'
+
+export class OpenIDLoginButton extends React.Component {
+ constructor(props) {
+ super(props)
+ this.handleClick = this.handleClick.bind(this)
+ }
+
+ handleClick(event) {
+ event.stopPropagation()
+ const { authEp, authScopes, clientId } = this.props
+
+ let redirectURI = window.location.href.split("#")[0]
+ if (redirectURI.endsWith('/')) {
+ redirectURI += 'openid'
+ } else {
+ redirectURI += '/openid'
+ }
+
+ // Store nonce in localstorage to check again after the redirect
+ const nonce = getRandomString(16)
+ storage.setItem(OPEN_ID_NONCE_KEY, nonce)
+
+ const authURL = buildOpenIDAuthURL(authEp, authScopes, redirectURI, clientId, nonce)
+ window.location = authURL
+ }
+
+ render() {
+ const { children, className } = this.props
+ return (
+
+ {children}
+
+ )
+ }
+}
+
+export default OpenIDLoginButton
diff --git a/browser/app/js/browser/SideBar.js b/browser/app/js/browser/SideBar.js
new file mode 100644
index 000000000..2f98f60c7
--- /dev/null
+++ b/browser/app/js/browser/SideBar.js
@@ -0,0 +1,73 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import ClickOutHandler from "react-onclickout"
+import { connect } from "react-redux"
+
+import logo from "../../img/logo.svg"
+import BucketSearch from "../buckets/BucketSearch"
+import BucketList from "../buckets/BucketList"
+import Host from "./Host"
+import * as actionsCommon from "./actions"
+import web from "../web"
+
+export const SideBar = ({ sidebarOpen, clickOutside }) => {
+ const onClickOut = e => {
+ if (e.target.classList.contains("feh-trigger")) {
+ return
+ }
+ clickOutside()
+ }
+ return (
+
+
+
+
+
MinIO Browser
+
+
+ {web.LoggedIn() && }
+
+
+
+
+
+ )
+}
+
+const mapStateToProps = state => {
+ return {
+ sidebarOpen: state.browser.sidebarOpen
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ clickOutside: () => dispatch(actionsCommon.closeSidebar())
+ }
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(SideBar)
diff --git a/browser/app/js/browser/StorageInfo.js b/browser/app/js/browser/StorageInfo.js
new file mode 100644
index 000000000..9da7798aa
--- /dev/null
+++ b/browser/app/js/browser/StorageInfo.js
@@ -0,0 +1,64 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import humanize from "humanize"
+import * as actionsCommon from "./actions"
+
+export class StorageInfo extends React.Component {
+ componentWillMount() {
+ const { fetchStorageInfo } = this.props
+ fetchStorageInfo()
+ }
+ render() {
+ const { used } = this.props.storageInfo
+ if (!used || used == 0) {
+ return
+ }
+
+ return (
+
+
+
+
+ Used:
+ {humanize.filesize(used)}
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ storageInfo: state.browser.storageInfo
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ fetchStorageInfo: () => dispatch(actionsCommon.fetchStorageInfo())
+ }
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(StorageInfo)
diff --git a/browser/app/js/browser/__tests__/AboutModal.test.js b/browser/app/js/browser/__tests__/AboutModal.test.js
new file mode 100644
index 000000000..85fb316af
--- /dev/null
+++ b/browser/app/js/browser/__tests__/AboutModal.test.js
@@ -0,0 +1,40 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { AboutModal } from "../AboutModal"
+
+describe("AboutModal", () => {
+ const serverInfo = {
+ version: "test",
+ platform: "test",
+ runtime: "test"
+ }
+
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call hideAbout when close button is clicked", () => {
+ const hideAbout = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("button").simulate("click")
+ expect(hideAbout).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/browser/__tests__/Browser.test.js b/browser/app/js/browser/__tests__/Browser.test.js
new file mode 100644
index 000000000..18714085f
--- /dev/null
+++ b/browser/app/js/browser/__tests__/Browser.test.js
@@ -0,0 +1,29 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import Browser from "../Browser"
+import configureStore from "redux-mock-store"
+
+const mockStore = configureStore()
+
+describe("Browser", () => {
+ it("should render without crashing", () => {
+ const store = mockStore()
+ shallow()
+ })
+})
diff --git a/browser/app/js/browser/__tests__/BrowserDropdown.test.js b/browser/app/js/browser/__tests__/BrowserDropdown.test.js
new file mode 100644
index 000000000..449479bf4
--- /dev/null
+++ b/browser/app/js/browser/__tests__/BrowserDropdown.test.js
@@ -0,0 +1,62 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { BrowserDropdown } from "../BrowserDropdown"
+
+describe("BrowserDropdown", () => {
+ const serverInfo = {
+ version: "test",
+ platform: "test",
+ runtime: "test"
+ }
+
+ it("should render without crashing", () => {
+ shallow(
+
+ )
+ })
+
+ it("should call fetchServerInfo after its mounted", () => {
+ const fetchServerInfo = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(fetchServerInfo).toHaveBeenCalled()
+ })
+
+ it("should show AboutModal when About link is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#show-about").simulate("click", { preventDefault: jest.fn() })
+ wrapper.update()
+ expect(wrapper.state("showAboutModal")).toBeTruthy()
+ expect(wrapper.find("AboutModal").length).toBe(1)
+ })
+
+ it("should logout and redirect to /login when logout is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#logout").simulate("click", { preventDefault: jest.fn() })
+ expect(window.location.pathname.endsWith("/login")).toBeTruthy()
+ })
+})
diff --git a/browser/app/js/browser/__tests__/ChangePasswordModal.test.js b/browser/app/js/browser/__tests__/ChangePasswordModal.test.js
new file mode 100644
index 000000000..4313a8415
--- /dev/null
+++ b/browser/app/js/browser/__tests__/ChangePasswordModal.test.js
@@ -0,0 +1,131 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { ChangePasswordModal } from "../ChangePasswordModal"
+import jwtDecode from "jwt-decode"
+
+jest.mock("jwt-decode")
+
+jwtDecode.mockImplementation(() => ({ sub: "minio" }))
+
+jest.mock("../../web", () => ({
+ SetAuth: jest.fn(
+ ({ currentAccessKey, currentSecretKey, newAccessKey, newSecretKey }) => {
+ if (
+ currentAccessKey == "minio" &&
+ currentSecretKey == "minio123" &&
+ newAccessKey == "test" &&
+ newSecretKey == "test1234"
+ ) {
+ return Promise.resolve({})
+ } else {
+ return Promise.reject({
+ message: "Error"
+ })
+ }
+ }
+ ),
+ GetToken: jest.fn(() => "")
+}))
+
+jest.mock("../../utils", () => ({
+ getRandomAccessKey: () => "raccesskey",
+ getRandomSecretKey: () => "rsecretkey"
+}))
+
+describe("ChangePasswordModal", () => {
+ const serverInfo = {
+ version: "test",
+ platform: "test",
+ runtime: "test",
+ info: {},
+ userInfo: { isIAMUser: true }
+ }
+
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should not allow changing password when not IAM user", () => {
+ const newServerInfo = {
+ ...serverInfo,
+ userInfo: { isIAMUser: false }
+ }
+ const wrapper = shallow( )
+ expect(
+ wrapper
+ .find("ModalBody")
+ .childAt(0)
+ .text()
+ ).toBe("Credentials of this user cannot be updated through MinIO Browser.")
+ })
+
+ it("should not allow changing password for STS user", () => {
+ const newServerInfo = {
+ ...serverInfo,
+ userInfo: { isTempUser: true }
+ }
+ const wrapper = shallow( )
+ expect(
+ wrapper
+ .find("ModalBody")
+ .childAt(0)
+ .text()
+ ).toBe("Credentials of this user cannot be updated through MinIO Browser.")
+ })
+
+ it("should not generate accessKey for IAM User", () => {
+ const wrapper = shallow( )
+ wrapper.find("#generate-keys").simulate("click")
+ setImmediate(() => {
+ expect(wrapper.state("newAccessKey")).toBe("minio")
+ expect(wrapper.state("newSecretKey")).toBe("rsecretkey")
+ })
+ })
+
+ it("should not show new accessKey field for IAM User", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("#newAccesskey").exists()).toBeFalsy()
+ })
+
+ it("should disable Update button for secretKey", () => {
+ const showAlert = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("#currentSecretKey")
+ .simulate("change", { target: { value: "minio123" } })
+ wrapper
+ .find("#newSecretKey")
+ .simulate("change", { target: { value: "t1" } })
+ expect(wrapper.find("#update-keys").prop("disabled")).toBeTruthy()
+ })
+
+ it("should call hideChangePassword when Cancel button is clicked", () => {
+ const hideChangePassword = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#cancel-change-password").simulate("click")
+ expect(hideChangePassword).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/browser/__tests__/Header.test.js b/browser/app/js/browser/__tests__/Header.test.js
new file mode 100644
index 000000000..e7fe35dc9
--- /dev/null
+++ b/browser/app/js/browser/__tests__/Header.test.js
@@ -0,0 +1,42 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import Header from "../Header"
+
+jest.mock("../../web", () => ({
+ LoggedIn: jest
+ .fn(() => true)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(false)
+}))
+describe("Header", () => {
+ it("should render without crashing", () => {
+ shallow()
+ })
+
+ it("should render Login button when the user has not LoggedIn", () => {
+ const wrapper = shallow()
+ expect(wrapper.find("a").text()).toBe("Login")
+ })
+
+ it("should render StorageInfo and BrowserDropdown when the user has LoggedIn", () => {
+ const wrapper = shallow()
+ expect(wrapper.find("Connect(BrowserDropdown)").length).toBe(1)
+ expect(wrapper.find("Connect(StorageInfo)").length).toBe(1)
+ })
+})
diff --git a/browser/app/js/browser/__tests__/Host.test.js b/browser/app/js/browser/__tests__/Host.test.js
new file mode 100644
index 000000000..872bba131
--- /dev/null
+++ b/browser/app/js/browser/__tests__/Host.test.js
@@ -0,0 +1,25 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import Host from "../Host"
+
+describe("Host", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+})
diff --git a/browser/app/js/browser/__tests__/Login.test.js b/browser/app/js/browser/__tests__/Login.test.js
new file mode 100644
index 000000000..ecfbdb331
--- /dev/null
+++ b/browser/app/js/browser/__tests__/Login.test.js
@@ -0,0 +1,108 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { Login } from "../Login"
+import web from "../../web"
+
+jest.mock("../../web", () => ({
+ Login: jest.fn(() => {
+ return Promise.resolve({ token: "test", uiVersion: "2018-02-01T01:17:47Z" })
+ }),
+ LoggedIn: jest.fn(),
+ GetDiscoveryDoc: jest.fn(() => {
+ return Promise.resolve({ DiscoveryDoc: {"authorization_endpoint": "test"} })
+ })
+}))
+
+describe("Login", () => {
+ const dispatchMock = jest.fn()
+ const showAlertMock = jest.fn()
+ const clearAlertMock = jest.fn()
+
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should initially have the is-guest class", () => {
+ const wrapper = shallow(
+ ,
+ { attachTo: document.body }
+ )
+ expect(document.body.classList.contains("is-guest")).toBeTruthy()
+ })
+
+ it("should throw an alert if the keys are empty in login form", () => {
+ const wrapper = mount(
+
+ )
+ // case where both keys are empty - displays the second warning
+ wrapper.find("form").simulate("submit")
+ expect(showAlertMock).toHaveBeenCalledWith("danger", "Secret Key cannot be empty")
+
+ // case where access key is empty
+ wrapper.setState({
+ accessKey: "",
+ secretKey: "secretKey"
+ })
+ wrapper.find("form").simulate("submit")
+ expect(showAlertMock).toHaveBeenCalledWith("danger", "Access Key cannot be empty")
+
+ // case where secret key is empty
+ wrapper.setState({
+ accessKey: "accessKey",
+ secretKey: ""
+ })
+ wrapper.find("form").simulate("submit")
+ expect(showAlertMock).toHaveBeenCalledWith("danger", "Secret Key cannot be empty")
+ })
+
+ it("should call web.Login with correct arguments if both keys are entered", () => {
+ const wrapper = mount(
+
+ )
+ wrapper.setState({
+ accessKey: "accessKey",
+ secretKey: "secretKey"
+ })
+ wrapper.find("form").simulate("submit")
+ expect(web.Login).toHaveBeenCalledWith({
+ "username": "accessKey",
+ "password": "secretKey"
+ })
+ })
+})
diff --git a/browser/app/js/browser/__tests__/MainActions.test.js b/browser/app/js/browser/__tests__/MainActions.test.js
new file mode 100644
index 000000000..766386424
--- /dev/null
+++ b/browser/app/js/browser/__tests__/MainActions.test.js
@@ -0,0 +1,82 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { MainActions } from "../MainActions"
+
+jest.mock("../../web", () => ({
+ LoggedIn: jest
+ .fn(() => true)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(false)
+ .mockReturnValueOnce(false)
+}))
+
+describe("MainActions", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should not show any actions when user has not LoggedIn and prefixWritable is false", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("#show-make-bucket").length).toBe(0)
+ expect(wrapper.find("#file-input").length).toBe(0)
+ })
+
+ it("should show only file upload action when user has not LoggedIn and prefixWritable is true", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("#show-make-bucket").length).toBe(0)
+ expect(wrapper.find("#file-input").length).toBe(1)
+ })
+
+ it("should show make bucket upload file actions when user has LoggedIn", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("#show-make-bucket").length).toBe(1)
+ expect(wrapper.find("#file-input").length).toBe(1)
+ })
+
+ it("should call showMakeBucketModal when create bucket icon is clicked", () => {
+ const showMakeBucketModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("#show-make-bucket")
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(showMakeBucketModal).toHaveBeenCalled()
+ })
+
+ it("should call uploadFile when a file is selected for upload", () => {
+ const uploadFile = jest.fn()
+ const wrapper = shallow( )
+ const files = [new Blob(["file content"], { type: "text/plain" })]
+ const input = wrapper.find("#file-input")
+ const event = {
+ preventDefault: jest.fn(),
+ target: {
+ files: {
+ length: files.length,
+ item: function(index) {
+ return files[index]
+ }
+ }
+ }
+ }
+ input.simulate("change", event)
+ expect(uploadFile).toHaveBeenCalledWith(files[0])
+ })
+})
diff --git a/browser/app/js/browser/__tests__/MainContent.test.js b/browser/app/js/browser/__tests__/MainContent.test.js
new file mode 100644
index 000000000..0fe1d81a8
--- /dev/null
+++ b/browser/app/js/browser/__tests__/MainContent.test.js
@@ -0,0 +1,25 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import MainContent from "../MainContent"
+
+describe("MainContent", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+})
diff --git a/browser/app/js/browser/__tests__/MobileHeader.test.js b/browser/app/js/browser/__tests__/MobileHeader.test.js
new file mode 100644
index 000000000..3ab37a3f4
--- /dev/null
+++ b/browser/app/js/browser/__tests__/MobileHeader.test.js
@@ -0,0 +1,36 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { MobileHeader } from "../MobileHeader"
+
+describe("Bucket", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should toggleSidebar when trigger is clicked", () => {
+ const toggleSidebar = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("#sidebar-toggle")
+ .simulate("click", { stopPropagation: jest.fn() })
+ expect(toggleSidebar).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/browser/__tests__/SideBar.test.js b/browser/app/js/browser/__tests__/SideBar.test.js
new file mode 100644
index 000000000..e5d84f1e5
--- /dev/null
+++ b/browser/app/js/browser/__tests__/SideBar.test.js
@@ -0,0 +1,54 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { SideBar } from "../SideBar"
+
+jest.mock("../../web", () => ({
+ LoggedIn: jest.fn(() => false).mockReturnValueOnce(true)
+}))
+
+describe("SideBar", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should not render BucketSearch for non LoggedIn users", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("Connect(BucketSearch)").length).toBe(0)
+ })
+
+ it("should call clickOutside when the user clicks outside the sidebar", () => {
+ const clickOutside = jest.fn()
+ const wrapper = shallow( )
+ wrapper.simulate("clickOut", {
+ preventDefault: jest.fn(),
+ target: { classList: { contains: jest.fn(() => false) } }
+ })
+ expect(clickOutside).toHaveBeenCalled()
+ })
+
+ it("should not call clickOutside when user clicks on sidebar toggle", () => {
+ const clickOutside = jest.fn()
+ const wrapper = shallow( )
+ wrapper.simulate("clickOut", {
+ preventDefault: jest.fn(),
+ target: { classList: { contains: jest.fn(() => true) } }
+ })
+ expect(clickOutside).not.toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/browser/__tests__/StorageInfo.test.js b/browser/app/js/browser/__tests__/StorageInfo.test.js
new file mode 100644
index 000000000..2f763318d
--- /dev/null
+++ b/browser/app/js/browser/__tests__/StorageInfo.test.js
@@ -0,0 +1,49 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { StorageInfo } from "../StorageInfo"
+
+describe("StorageInfo", () => {
+ it("should render without crashing", () => {
+ shallow(
+
+ )
+ })
+
+ it("should fetchStorageInfo before component is mounted", () => {
+ const fetchStorageInfo = jest.fn()
+ shallow(
+
+ )
+ expect(fetchStorageInfo).toHaveBeenCalled()
+ })
+
+ it("should not render anything if used is null", () => {
+ const fetchStorageInfo = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.text()).toBe("")
+ })
+})
diff --git a/browser/app/js/browser/__tests__/actions.test.js b/browser/app/js/browser/__tests__/actions.test.js
new file mode 100644
index 000000000..a53acd050
--- /dev/null
+++ b/browser/app/js/browser/__tests__/actions.test.js
@@ -0,0 +1,70 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import configureStore from "redux-mock-store"
+import thunk from "redux-thunk"
+import * as actionsCommon from "../actions"
+
+jest.mock("../../web", () => ({
+ StorageInfo: jest.fn(() => {
+ return Promise.resolve({
+ used: 60
+ })
+ }),
+ ServerInfo: jest.fn(() => {
+ return Promise.resolve({
+ MinioVersion: "test",
+ MinioPlatform: "test",
+ MinioRuntime: "test",
+ MinioGlobalInfo: "test"
+ })
+ })
+}))
+
+const middlewares = [thunk]
+const mockStore = configureStore(middlewares)
+
+describe("Common actions", () => {
+ it("creates common/SET_STORAGE_INFO after fetching the storage details ", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "common/SET_STORAGE_INFO", storageInfo: { used: 60 } }
+ ]
+ return store.dispatch(actionsCommon.fetchStorageInfo()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates common/SET_SERVER_INFO after fetching the server details", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "common/SET_SERVER_INFO",
+ serverInfo: {
+ version: "test",
+ platform: "test",
+ runtime: "test",
+ info: "test"
+ }
+ }
+ ]
+ return store.dispatch(actionsCommon.fetchServerInfo()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+})
diff --git a/browser/app/js/browser/__tests__/reducer.test.js b/browser/app/js/browser/__tests__/reducer.test.js
new file mode 100644
index 000000000..456010d54
--- /dev/null
+++ b/browser/app/js/browser/__tests__/reducer.test.js
@@ -0,0 +1,87 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import reducer from "../reducer"
+import * as actionsCommon from "../actions"
+
+describe("common reducer", () => {
+ it("should return the initial state", () => {
+ expect(reducer(undefined, {})).toEqual({
+ sidebarOpen: false,
+ storageInfo: {used: 0},
+ serverInfo: {}
+ })
+ })
+
+ it("should handle TOGGLE_SIDEBAR", () => {
+ expect(
+ reducer(
+ { sidebarOpen: false },
+ {
+ type: actionsCommon.TOGGLE_SIDEBAR
+ }
+ )
+ ).toEqual({
+ sidebarOpen: true
+ })
+ })
+
+ it("should handle CLOSE_SIDEBAR", () => {
+ expect(
+ reducer(
+ { sidebarOpen: true },
+ {
+ type: actionsCommon.CLOSE_SIDEBAR
+ }
+ )
+ ).toEqual({
+ sidebarOpen: false
+ })
+ })
+
+ it("should handle SET_STORAGE_INFO", () => {
+ expect(
+ reducer(
+ {},
+ {
+ type: actionsCommon.SET_STORAGE_INFO,
+ storageInfo: { }
+ }
+ )
+ ).toEqual({
+ storageInfo: { }
+ })
+ })
+
+ it("should handle SET_SERVER_INFO", () => {
+ expect(
+ reducer(undefined, {
+ type: actionsCommon.SET_SERVER_INFO,
+ serverInfo: {
+ version: "test",
+ platform: "test",
+ runtime: "test",
+ info: "test"
+ }
+ }).serverInfo
+ ).toEqual({
+ version: "test",
+ platform: "test",
+ runtime: "test",
+ info: "test"
+ })
+ })
+})
diff --git a/browser/app/js/browser/actions.js b/browser/app/js/browser/actions.js
new file mode 100644
index 000000000..e407d8638
--- /dev/null
+++ b/browser/app/js/browser/actions.js
@@ -0,0 +1,66 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import web from "../web"
+
+export const TOGGLE_SIDEBAR = "common/TOGGLE_SIDEBAR"
+export const CLOSE_SIDEBAR = "common/CLOSE_SIDEBAR"
+export const SET_STORAGE_INFO = "common/SET_STORAGE_INFO"
+export const SET_SERVER_INFO = "common/SET_SERVER_INFO"
+
+export const toggleSidebar = () => ({
+ type: TOGGLE_SIDEBAR
+})
+
+export const closeSidebar = () => ({
+ type: CLOSE_SIDEBAR
+})
+
+export const fetchStorageInfo = () => {
+ return function(dispatch) {
+ return web.StorageInfo().then(res => {
+ const storageInfo = {
+ used: res.used
+ }
+ dispatch(setStorageInfo(storageInfo))
+ })
+ }
+}
+
+export const setStorageInfo = storageInfo => ({
+ type: SET_STORAGE_INFO,
+ storageInfo
+})
+
+export const fetchServerInfo = () => {
+ return function(dispatch) {
+ return web.ServerInfo().then(res => {
+ const serverInfo = {
+ version: res.MinioVersion,
+ platform: res.MinioPlatform,
+ runtime: res.MinioRuntime,
+ info: res.MinioGlobalInfo,
+ userInfo: res.MinioUserInfo
+ }
+ dispatch(setServerInfo(serverInfo))
+ })
+ }
+}
+
+export const setServerInfo = serverInfo => ({
+ type: SET_SERVER_INFO,
+ serverInfo
+})
diff --git a/browser/app/js/browser/reducer.js b/browser/app/js/browser/reducer.js
new file mode 100644
index 000000000..77130e432
--- /dev/null
+++ b/browser/app/js/browser/reducer.js
@@ -0,0 +1,45 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as actionsCommon from "./actions"
+
+export default (
+ state = {
+ sidebarOpen: false,
+ storageInfo: {used: 0},
+ serverInfo: {}
+ },
+ action
+) => {
+ switch (action.type) {
+ case actionsCommon.TOGGLE_SIDEBAR:
+ return Object.assign({}, state, {
+ sidebarOpen: !state.sidebarOpen
+ })
+ case actionsCommon.CLOSE_SIDEBAR:
+ return Object.assign({}, state, {
+ sidebarOpen: false
+ })
+ case actionsCommon.SET_STORAGE_INFO:
+ return Object.assign({}, state, {
+ storageInfo: action.storageInfo
+ })
+ case actionsCommon.SET_SERVER_INFO:
+ return { ...state, serverInfo: action.serverInfo }
+ default:
+ return state
+ }
+}
diff --git a/browser/app/js/browser/selectors.js b/browser/app/js/browser/selectors.js
new file mode 100644
index 000000000..da8780054
--- /dev/null
+++ b/browser/app/js/browser/selectors.js
@@ -0,0 +1,24 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createSelector } from "reselect"
+
+export const getServerInfo = state => state.browser.serverInfo
+
+export const hasServerPublicDomain = createSelector(
+ getServerInfo,
+ serverInfo => Boolean(serverInfo.info && serverInfo.info.domains && serverInfo.info.domains.length),
+)
diff --git a/browser/app/js/browser/utils.js b/browser/app/js/browser/utils.js
new file mode 100644
index 000000000..634478341
--- /dev/null
+++ b/browser/app/js/browser/utils.js
@@ -0,0 +1,16 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
diff --git a/browser/app/js/buckets/Bucket.js b/browser/app/js/buckets/Bucket.js
new file mode 100644
index 000000000..34179170a
--- /dev/null
+++ b/browser/app/js/buckets/Bucket.js
@@ -0,0 +1,45 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import BucketDropdown from "./BucketDropdown"
+
+export const Bucket = ({ bucket, isActive, selectBucket }) => {
+ return (
+ {
+ e.preventDefault()
+ selectBucket(bucket)
+ }}
+ >
+
+ {bucket}
+
+
+
+ )
+}
+
+export default Bucket
diff --git a/browser/app/js/buckets/BucketContainer.js b/browser/app/js/buckets/BucketContainer.js
new file mode 100644
index 000000000..2d09f8d05
--- /dev/null
+++ b/browser/app/js/buckets/BucketContainer.js
@@ -0,0 +1,35 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import * as actionsBuckets from "./actions"
+import { getCurrentBucket } from "./selectors"
+import Bucket from "./Bucket"
+
+const mapStateToProps = (state, ownProps) => {
+ return {
+ isActive: getCurrentBucket(state) === ownProps.bucket
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ selectBucket: bucket => dispatch(actionsBuckets.selectBucket(bucket))
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Bucket)
diff --git a/browser/app/js/buckets/BucketDropdown.js b/browser/app/js/buckets/BucketDropdown.js
new file mode 100644
index 000000000..afbb893dc
--- /dev/null
+++ b/browser/app/js/buckets/BucketDropdown.js
@@ -0,0 +1,92 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import { connect } from "react-redux"
+import * as actionsBuckets from "./actions"
+import { getCurrentBucket } from "./selectors"
+import Dropdown from "react-bootstrap/lib/Dropdown"
+
+export class BucketDropdown extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ showBucketDropdown: false
+ }
+ }
+
+ toggleDropdown() {
+ if (this.state.showBucketDropdown) {
+ this.setState({
+ showBucketDropdown: false
+ })
+ } else {
+ this.setState({
+ showBucketDropdown: true
+ })
+ }
+ }
+
+ render() {
+ const { bucket, showBucketPolicy, deleteBucket, currentBucket } = this.props
+ return (
+
+
+
+
+
+
+ {
+ e.stopPropagation()
+ this.toggleDropdown()
+ showBucketPolicy()
+ }}
+ >
+ Edit policy
+
+
+
+ {
+ e.stopPropagation()
+ this.toggleDropdown()
+ deleteBucket(bucket)
+ }}
+ >
+ Delete
+
+
+
+
+ )
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ deleteBucket: bucket => dispatch(actionsBuckets.deleteBucket(bucket)),
+ showBucketPolicy: () => dispatch(actionsBuckets.showBucketPolicy())
+ }
+}
+
+export default connect(state => state, mapDispatchToProps)(BucketDropdown)
diff --git a/browser/app/js/buckets/BucketList.js b/browser/app/js/buckets/BucketList.js
new file mode 100644
index 000000000..a915ca92a
--- /dev/null
+++ b/browser/app/js/buckets/BucketList.js
@@ -0,0 +1,109 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Scrollbars } from "react-custom-scrollbars"
+import InfiniteScroll from "react-infinite-scroller"
+import * as actionsBuckets from "./actions"
+import { getFilteredBuckets } from "./selectors"
+import BucketContainer from "./BucketContainer"
+import web from "../web"
+import history from "../history"
+import { pathSlice } from "../utils"
+
+export class BucketList extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ page: 1
+ }
+ this.loadNextPage = this.loadNextPage.bind(this)
+ }
+ componentDidUpdate(prevProps) {
+ if (this.props.filter !== prevProps.filter) {
+ this.setState({
+ page: 1
+ })
+ }
+ }
+ componentWillMount() {
+ const { fetchBuckets, setBucketList, selectBucket } = this.props
+ if (web.LoggedIn()) {
+ fetchBuckets()
+ } else {
+ const { bucket, prefix } = pathSlice(history.location.pathname)
+ if (bucket) {
+ setBucketList([bucket])
+ selectBucket(bucket, prefix)
+ } else {
+ history.replace("/login")
+ }
+ }
+ }
+ loadNextPage() {
+ this.setState({
+ page: this.state.page + 1
+ })
+ }
+ render() {
+ const { filteredBuckets } = this.props
+ const visibleBuckets = filteredBuckets.slice(0, this.state.page * 100)
+ return (
+
+
}
+ >
+ visibleBuckets.length}
+ useWindow={false}
+ element="div"
+ initialLoad={false}
+ >
+
+ {visibleBuckets.map(bucket => (
+
+ ))}
+
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ filteredBuckets: getFilteredBuckets(state),
+ filter: state.buckets.filter
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ fetchBuckets: () => dispatch(actionsBuckets.fetchBuckets()),
+ setBucketList: buckets => dispatch(actionsBuckets.setList(buckets)),
+ selectBucket: (bucket, prefix) =>
+ dispatch(actionsBuckets.selectBucket(bucket, prefix))
+ }
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(BucketList)
diff --git a/browser/app/js/buckets/BucketPolicyModal.js b/browser/app/js/buckets/BucketPolicyModal.js
new file mode 100644
index 000000000..f289eaf8b
--- /dev/null
+++ b/browser/app/js/buckets/BucketPolicyModal.js
@@ -0,0 +1,61 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Modal, ModalHeader } from "react-bootstrap"
+import * as actionsBuckets from "./actions"
+import PolicyInput from "./PolicyInput"
+import Policy from "./Policy"
+
+export const BucketPolicyModal = ({ showBucketPolicy, currentBucket, hideBucketPolicy, policies }) => {
+ return (
+
+
+ Bucket Policy (
+ { currentBucket })
+
+ ×
+
+
+
+
+ { policies.map((policy, i) =>
+ ) }
+
+
+ )
+}
+
+const mapStateToProps = state => {
+ return {
+ currentBucket: state.buckets.currentBucket,
+ showBucketPolicy: state.buckets.showBucketPolicy,
+ policies: state.buckets.policies
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ hideBucketPolicy: () => dispatch(actionsBuckets.hideBucketPolicy())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(BucketPolicyModal)
\ No newline at end of file
diff --git a/browser/app/js/buckets/BucketSearch.js b/browser/app/js/buckets/BucketSearch.js
new file mode 100644
index 000000000..21f94dab4
--- /dev/null
+++ b/browser/app/js/buckets/BucketSearch.js
@@ -0,0 +1,44 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import * as actionsBuckets from "./actions"
+
+export const BucketSearch = ({ onChange }) => (
+
+ onChange(e.target.value)}
+ placeholder="Search Buckets..."
+ />
+
+
+)
+
+const mapDispatchToProps = dispatch => {
+ return {
+ onChange: filter => {
+ dispatch(actionsBuckets.setFilter(filter))
+ }
+ }
+}
+
+export default connect(undefined, mapDispatchToProps)(BucketSearch)
diff --git a/browser/app/js/buckets/MakeBucketModal.js b/browser/app/js/buckets/MakeBucketModal.js
new file mode 100644
index 000000000..ff9b6762d
--- /dev/null
+++ b/browser/app/js/buckets/MakeBucketModal.js
@@ -0,0 +1,90 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Modal, ModalBody } from "react-bootstrap"
+import * as actionsBuckets from "./actions"
+
+export class MakeBucketModal extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ bucketName: ""
+ }
+ }
+ onSubmit(e) {
+ e.preventDefault()
+ const { makeBucket } = this.props
+ const bucket = this.state.bucketName
+ if (bucket) {
+ makeBucket(bucket)
+ this.hideModal()
+ }
+ }
+ hideModal() {
+ this.setState({
+ bucketName: ""
+ })
+ this.props.hideMakeBucketModal()
+ }
+ render() {
+ const { showMakeBucketModal } = this.props
+ return (
+
+
+ ×
+
+
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ showMakeBucketModal: state.buckets.showMakeBucketModal
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ makeBucket: bucket => dispatch(actionsBuckets.makeBucket(bucket)),
+ hideMakeBucketModal: () => dispatch(actionsBuckets.hideMakeBucketModal())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(MakeBucketModal)
diff --git a/browser/app/js/buckets/Policy.js b/browser/app/js/buckets/Policy.js
new file mode 100644
index 000000000..88b9316ab
--- /dev/null
+++ b/browser/app/js/buckets/Policy.js
@@ -0,0 +1,96 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { READ_ONLY, WRITE_ONLY, READ_WRITE, NONE } from '../constants'
+
+import React from "react"
+import { connect } from "react-redux"
+import classnames from "classnames"
+import * as actionsBuckets from "./actions"
+import * as actionsAlert from "../alert/actions"
+import web from "../web"
+
+export class Policy extends React.Component {
+ removePolicy(e) {
+ e.preventDefault()
+ const {currentBucket, prefix, fetchPolicies, showAlert} = this.props
+ web.
+ SetBucketPolicy({
+ bucketName: currentBucket,
+ prefix: prefix,
+ policy: 'none'
+ })
+ .then(() => {
+ fetchPolicies(currentBucket)
+ })
+ .catch(e => showAlert('danger', e.message))
+ }
+
+ render() {
+ const {policy, prefix} = this.props
+ let newPrefix = prefix
+ if (newPrefix === '')
+ newPrefix = '*'
+
+ if (policy === NONE) {
+ return
+ } else {
+ return (
+
+
+ { newPrefix }
+
+
+
+
+ Read Only
+
+
+ Write Only
+
+
+ Read and Write
+
+
+
+
+
+ Remove
+
+
+
+ )
+ }
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ currentBucket: state.buckets.currentBucket
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ fetchPolicies: bucket => dispatch(actionsBuckets.fetchPolicies(bucket)),
+ showAlert: (type, message) =>
+ dispatch(actionsAlert.set({ type: type, message: message }))
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(Policy)
\ No newline at end of file
diff --git a/browser/app/js/buckets/PolicyInput.js b/browser/app/js/buckets/PolicyInput.js
new file mode 100644
index 000000000..f4726f8c1
--- /dev/null
+++ b/browser/app/js/buckets/PolicyInput.js
@@ -0,0 +1,115 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { READ_ONLY, WRITE_ONLY, READ_WRITE } from '../constants'
+
+import React from "react"
+import { connect } from "react-redux"
+import classnames from "classnames"
+import * as actionsBuckets from "./actions"
+import * as actionsAlert from "../alert/actions"
+import web from "../web"
+
+export class PolicyInput extends React.Component {
+ componentDidMount() {
+ const { currentBucket, fetchPolicies } = this.props
+ fetchPolicies(currentBucket)
+ }
+
+ componentWillUnmount() {
+ const { setPolicies } = this.props
+ setPolicies([])
+ }
+
+ handlePolicySubmit(e) {
+ e.preventDefault()
+ const { currentBucket, fetchPolicies, showAlert } = this.props
+
+ if (this.prefix.value === "*")
+ this.prefix.value = ""
+
+ let policyAlreadyExists = this.props.policies.some(
+ elem => this.prefix.value === elem.prefix && this.policy.value === elem.policy
+ )
+ if (policyAlreadyExists) {
+ showAlert("danger", "Policy for this prefix already exists.")
+ return
+ }
+
+ web.
+ SetBucketPolicy({
+ bucketName: currentBucket,
+ prefix: this.prefix.value,
+ policy: this.policy.value
+ })
+ .then(() => {
+ fetchPolicies(currentBucket)
+ this.prefix.value = ''
+ })
+ .catch(e => showAlert("danger", e.message))
+ }
+
+ render() {
+ return (
+
+
+ this.prefix = prefix }
+ className="form-control"
+ placeholder="Prefix"
+ />
+
+
+ this.policy = policy } className="form-control">
+
+ Read Only
+
+
+ Write Only
+
+
+ Read and Write
+
+
+
+
+
+ Add
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ currentBucket: state.buckets.currentBucket,
+ policies: state.buckets.policies
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ fetchPolicies: bucket => dispatch(actionsBuckets.fetchPolicies(bucket)),
+ setPolicies: policies => dispatch(actionsBuckets.setPolicies(policies)),
+ showAlert: (type, message) =>
+ dispatch(actionsAlert.set({ type: type, message: message }))
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(PolicyInput)
\ No newline at end of file
diff --git a/browser/app/js/buckets/__tests__/Bucket.test.js b/browser/app/js/buckets/__tests__/Bucket.test.js
new file mode 100644
index 000000000..605312660
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/Bucket.test.js
@@ -0,0 +1,39 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { Bucket } from "../Bucket"
+
+describe("Bucket", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call selectBucket when clicked", () => {
+ const selectBucket = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("li").simulate("click", { preventDefault: jest.fn() })
+ expect(selectBucket).toHaveBeenCalledWith("test")
+ })
+
+ it("should highlight the selected bucket", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("li").hasClass("active")).toBeTruthy()
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/BucketContainer.test.js b/browser/app/js/buckets/__tests__/BucketContainer.test.js
new file mode 100644
index 000000000..53d8d057e
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/BucketContainer.test.js
@@ -0,0 +1,52 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import BucketContainer from "../BucketContainer"
+import configureStore from "redux-mock-store"
+
+const mockStore = configureStore()
+
+describe("BucketContainer", () => {
+ let store
+ beforeEach(() => {
+ store = mockStore({
+ buckets: {
+ currentBucket: "Test"
+ }
+ })
+ store.dispatch = jest.fn()
+ })
+
+ it("should render without crashing", () => {
+ shallow()
+ })
+
+ it('maps state and dispatch to props', () => {
+ const wrapper = shallow()
+ expect(wrapper.props()).toEqual(expect.objectContaining({
+ isActive: expect.any(Boolean),
+ selectBucket: expect.any(Function)
+ }))
+ })
+
+ it('maps selectBucket to dispatch action', () => {
+ const wrapper = shallow()
+ wrapper.props().selectBucket()
+ expect(store.dispatch).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/BucketDropdown.test.js b/browser/app/js/buckets/__tests__/BucketDropdown.test.js
new file mode 100644
index 000000000..83d5010e6
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/BucketDropdown.test.js
@@ -0,0 +1,62 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { BucketDropdown } from "../BucketDropdown"
+
+describe("BucketDropdown", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call toggleDropdown on dropdown toggle", () => {
+ const spy = jest.spyOn(BucketDropdown.prototype, 'toggleDropdown')
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("Uncontrolled(Dropdown)")
+ .simulate("toggle")
+ expect(spy).toHaveBeenCalled()
+ spy.mockReset()
+ spy.mockRestore()
+ })
+
+ it("should call showBucketPolicy when Edit Policy link is clicked", () => {
+ const showBucketPolicy = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("li a")
+ .at(0)
+ .simulate("click", { stopPropagation: jest.fn() })
+ expect(showBucketPolicy).toHaveBeenCalled()
+ })
+
+ it("should call deleteBucket when Delete link is clicked", () => {
+ const deleteBucket = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("li a")
+ .at(1)
+ .simulate("click", { stopPropagation: jest.fn() })
+ expect(deleteBucket).toHaveBeenCalledWith("test")
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/BucketList.test.js b/browser/app/js/buckets/__tests__/BucketList.test.js
new file mode 100644
index 000000000..baf2533a2
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/BucketList.test.js
@@ -0,0 +1,57 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import history from "../../history"
+import { BucketList } from "../BucketList"
+
+jest.mock("../../web", () => ({
+ LoggedIn: jest
+ .fn(() => false)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(true)
+}))
+
+describe("BucketList", () => {
+ it("should render without crashing", () => {
+ const fetchBuckets = jest.fn()
+ shallow( )
+ })
+
+ it("should call fetchBuckets before component is mounted", () => {
+ const fetchBuckets = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(fetchBuckets).toHaveBeenCalled()
+ })
+
+ it("should call setBucketList and selectBucket before component is mounted when the user has not loggedIn", () => {
+ const setBucketList = jest.fn()
+ const selectBucket = jest.fn()
+ history.push("/bk1/pre1")
+ const wrapper = shallow(
+
+ )
+ expect(setBucketList).toHaveBeenCalledWith(["bk1"])
+ expect(selectBucket).toHaveBeenCalledWith("bk1", "pre1")
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/BucketPolicyModal.test.js b/browser/app/js/buckets/__tests__/BucketPolicyModal.test.js
new file mode 100644
index 000000000..d7c4409e5
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/BucketPolicyModal.test.js
@@ -0,0 +1,43 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { BucketPolicyModal } from "../BucketPolicyModal"
+import { READ_ONLY, WRITE_ONLY, READ_WRITE } from "../../constants"
+
+describe("BucketPolicyModal", () => {
+ it("should render without crashing", () => {
+ shallow()
+ })
+
+ it("should call hideBucketPolicy when close button is clicked", () => {
+ const hideBucketPolicy = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("button").simulate("click")
+ expect(hideBucketPolicy).toHaveBeenCalled()
+ })
+
+ it("should include the PolicyInput and Policy components when there are any policies", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(PolicyInput)").length).toBe(1)
+ expect(wrapper.find("Connect(Policy)").length).toBe(1)
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/BucketSearch.test.js b/browser/app/js/buckets/__tests__/BucketSearch.test.js
new file mode 100644
index 000000000..a0d7c9563
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/BucketSearch.test.js
@@ -0,0 +1,32 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { BucketSearch } from "../BucketSearch"
+
+describe("BucketSearch", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call onChange with search text", () => {
+ const onChange = jest.fn()
+ const wrapper = shallow( )
+ wrapper.find("input").simulate("change", { target: { value: "test" } })
+ expect(onChange).toHaveBeenCalledWith("test")
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/MakeBucketModal.test.js b/browser/app/js/buckets/__tests__/MakeBucketModal.test.js
new file mode 100644
index 000000000..493247392
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/MakeBucketModal.test.js
@@ -0,0 +1,80 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { MakeBucketModal } from "../MakeBucketModal"
+
+describe("MakeBucketModal", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call hideMakeBucketModal when close button is clicked", () => {
+ const hideMakeBucketModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("button").simulate("click")
+ expect(hideMakeBucketModal).toHaveBeenCalled()
+ })
+
+ it("bucketName should be cleared before hiding the modal", () => {
+ const hideMakeBucketModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("input").simulate("change", {
+ target: { value: "test" }
+ })
+ expect(wrapper.state("bucketName")).toBe("test")
+ wrapper.find("button").simulate("click")
+ expect(wrapper.state("bucketName")).toBe("")
+ })
+
+ it("should call makeBucket when the form is submitted", () => {
+ const makeBucket = jest.fn()
+ const hideMakeBucketModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("input").simulate("change", {
+ target: { value: "test" }
+ })
+ wrapper.find("form").simulate("submit", { preventDefault: jest.fn() })
+ expect(makeBucket).toHaveBeenCalledWith("test")
+ })
+
+ it("should call hideMakeBucketModal and clear bucketName after the form is submited", () => {
+ const makeBucket = jest.fn()
+ const hideMakeBucketModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("input").simulate("change", {
+ target: { value: "test" }
+ })
+ wrapper.find("form").simulate("submit", { preventDefault: jest.fn() })
+ expect(hideMakeBucketModal).toHaveBeenCalled()
+ expect(wrapper.state("bucketName")).toBe("")
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/Policy.test.js b/browser/app/js/buckets/__tests__/Policy.test.js
new file mode 100644
index 000000000..12ac24d80
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/Policy.test.js
@@ -0,0 +1,68 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { Policy } from "../Policy"
+import { READ_ONLY, WRITE_ONLY, READ_WRITE, NONE } from "../../constants"
+import web from "../../web"
+
+jest.mock("../../web", () => ({
+ SetBucketPolicy: jest.fn(() => {
+ return Promise.resolve()
+ })
+}))
+
+describe("Policy", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should not render when policy is listed as 'none'", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find(".pmb-list").length).toBe(0)
+ })
+
+ it("should call web.setBucketPolicy and fetchPolicies on submit", () => {
+ const fetchPolicies = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("button").simulate("click", { preventDefault: jest.fn() })
+
+ expect(web.SetBucketPolicy).toHaveBeenCalledWith({
+ bucketName: "bucket",
+ prefix: "foo",
+ policy: "none"
+ })
+
+ setImmediate(() => {
+ expect(fetchPolicies).toHaveBeenCalledWith("bucket")
+ })
+ })
+
+ it("should change the empty string to '*' while displaying prefixes", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find(".pmbl-item").at(0).text()).toEqual("*")
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/PolicyInput.test.js b/browser/app/js/buckets/__tests__/PolicyInput.test.js
new file mode 100644
index 000000000..470506852
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/PolicyInput.test.js
@@ -0,0 +1,77 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { PolicyInput } from "../PolicyInput"
+import { READ_ONLY, WRITE_ONLY, READ_WRITE } from "../../constants"
+import web from "../../web"
+
+jest.mock("../../web", () => ({
+ SetBucketPolicy: jest.fn(() => {
+ return Promise.resolve()
+ })
+}))
+
+describe("PolicyInput", () => {
+ it("should render without crashing", () => {
+ const fetchPolicies = jest.fn()
+ shallow()
+ })
+
+ it("should call fetchPolicies after the component has mounted", () => {
+ const fetchPolicies = jest.fn()
+ const wrapper = shallow(
+
+ )
+ setImmediate(() => {
+ expect(fetchPolicies).toHaveBeenCalled()
+ })
+ })
+
+ it("should call web.setBucketPolicy and fetchPolicies on submit", () => {
+ const fetchPolicies = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.instance().prefix = { value: "baz" }
+ wrapper.instance().policy = { value: READ_ONLY }
+ wrapper.find("button").simulate("click", { preventDefault: jest.fn() })
+
+ expect(web.SetBucketPolicy).toHaveBeenCalledWith({
+ bucketName: "bucket",
+ prefix: "baz",
+ policy: READ_ONLY
+ })
+
+ setImmediate(() => {
+ expect(fetchPolicies).toHaveBeenCalledWith("bucket")
+ })
+ })
+
+ it("should change the prefix '*' to an empty string", () => {
+ const fetchPolicies = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.instance().prefix = { value: "*" }
+ wrapper.instance().policy = { value: READ_ONLY }
+
+ wrapper.find("button").simulate("click", { preventDefault: jest.fn() })
+
+ expect(wrapper.instance().prefix).toEqual({ value: "" })
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/actions.test.js b/browser/app/js/buckets/__tests__/actions.test.js
new file mode 100644
index 000000000..10230b3fa
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/actions.test.js
@@ -0,0 +1,185 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import configureStore from "redux-mock-store"
+import thunk from "redux-thunk"
+import * as actionsBuckets from "../actions"
+import * as objectActions from "../../objects/actions"
+import history from "../../history"
+
+jest.mock("../../web", () => ({
+ ListBuckets: jest.fn(() => {
+ return Promise.resolve({ buckets: [{ name: "test1" }, { name: "test2" }] })
+ }),
+ MakeBucket: jest.fn(() => {
+ return Promise.resolve()
+ }),
+ DeleteBucket: jest.fn(() => {
+ return Promise.resolve()
+ })
+}))
+
+jest.mock("../../objects/actions", () => ({
+ selectPrefix: () => dispatch => {}
+}))
+
+const middlewares = [thunk]
+const mockStore = configureStore(middlewares)
+
+describe("Buckets actions", () => {
+ it("creates buckets/SET_LIST and buckets/SET_CURRENT_BUCKET with first bucket after fetching the buckets", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SET_LIST", buckets: ["test1", "test2"] },
+ { type: "buckets/SET_CURRENT_BUCKET", bucket: "test1" }
+ ]
+ return store.dispatch(actionsBuckets.fetchBuckets()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates buckets/SET_CURRENT_BUCKET with bucket name in the url after fetching buckets", () => {
+ history.push("/test2")
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SET_LIST", buckets: ["test1", "test2"] },
+ { type: "buckets/SET_CURRENT_BUCKET", bucket: "test2" }
+ ]
+ window.location
+ return store.dispatch(actionsBuckets.fetchBuckets()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates buckets/SET_CURRENT_BUCKET with first bucket when the bucket in url is not exists after fetching buckets", () => {
+ history.push("/test3")
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SET_LIST", buckets: ["test1", "test2"] },
+ { type: "buckets/SET_CURRENT_BUCKET", bucket: "test1" }
+ ]
+ window.location
+ return store.dispatch(actionsBuckets.fetchBuckets()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates buckets/SET_CURRENT_BUCKET action when selectBucket is called", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SET_CURRENT_BUCKET", bucket: "test1" }
+ ]
+ store.dispatch(actionsBuckets.selectBucket("test1"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/SHOW_MAKE_BUCKET_MODAL for showMakeBucketModal", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SHOW_MAKE_BUCKET_MODAL", show: true }
+ ]
+ store.dispatch(actionsBuckets.showMakeBucketModal())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/SHOW_MAKE_BUCKET_MODAL for hideMakeBucketModal", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SHOW_MAKE_BUCKET_MODAL", show: false }
+ ]
+ store.dispatch(actionsBuckets.hideMakeBucketModal())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/SHOW_BUCKET_POLICY for showBucketPolicy", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SHOW_BUCKET_POLICY", show: true }
+ ]
+ store.dispatch(actionsBuckets.showBucketPolicy())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/SHOW_BUCKET_POLICY for hideBucketPolicy", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SHOW_BUCKET_POLICY", show: false }
+ ]
+ store.dispatch(actionsBuckets.hideBucketPolicy())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/SET_POLICIES action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/SET_POLICIES", policies: ["test1", "test2"] }
+ ]
+ store.dispatch(actionsBuckets.setPolicies(["test1", "test2"]))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/ADD action", () => {
+ const store = mockStore()
+ const expectedActions = [{ type: "buckets/ADD", bucket: "test" }]
+ store.dispatch(actionsBuckets.addBucket("test"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/REMOVE action", () => {
+ const store = mockStore()
+ const expectedActions = [{ type: "buckets/REMOVE", bucket: "test" }]
+ store.dispatch(actionsBuckets.removeBucket("test"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates buckets/ADD and buckets/SET_CURRENT_BUCKET after creating the bucket", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "buckets/ADD", bucket: "test1" },
+ { type: "buckets/SET_CURRENT_BUCKET", bucket: "test1" }
+ ]
+ return store.dispatch(actionsBuckets.makeBucket("test1")).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates alert/SET, buckets/REMOVE, buckets/SET_LIST and buckets/SET_CURRENT_BUCKET " +
+ "after deleting the bucket", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "alert/SET", alert: {id: 0, message: "Bucket 'test3' has been deleted.", type: "info"} },
+ { type: "buckets/REMOVE", bucket: "test3" },
+ { type: "buckets/SET_LIST", buckets: ["test1", "test2"] },
+ { type: "buckets/SET_CURRENT_BUCKET", bucket: "test1" }
+ ]
+ return store.dispatch(actionsBuckets.deleteBucket("test3")).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/reducer.test.js b/browser/app/js/buckets/__tests__/reducer.test.js
new file mode 100644
index 000000000..c59d45138
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/reducer.test.js
@@ -0,0 +1,102 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import reducer from "../reducer"
+import * as actions from "../actions"
+
+describe("buckets reducer", () => {
+ it("should return the initial state", () => {
+ const initialState = reducer(undefined, {})
+ expect(initialState).toEqual({
+ list: [],
+ policies: [],
+ filter: "",
+ currentBucket: "",
+ showBucketPolicy: false,
+ showMakeBucketModal: false
+ })
+ })
+
+ it("should handle SET_LIST", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_LIST,
+ buckets: ["bk1", "bk2"]
+ })
+ expect(newState.list).toEqual(["bk1", "bk2"])
+ })
+
+ it("should handle ADD", () => {
+ const newState = reducer(
+ { list: ["test1", "test2"] },
+ {
+ type: actions.ADD,
+ bucket: "test3"
+ }
+ )
+ expect(newState.list).toEqual(["test3", "test1", "test2"])
+ })
+
+ it("should handle REMOVE", () => {
+ const newState = reducer(
+ { list: ["test1", "test2"] },
+ {
+ type: actions.REMOVE,
+ bucket: "test2"
+ }
+ )
+ expect(newState.list).toEqual(["test1"])
+ })
+
+ it("should handle SET_FILTER", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_FILTER,
+ filter: "test"
+ })
+ expect(newState.filter).toEqual("test")
+ })
+
+ it("should handle SET_CURRENT_BUCKET", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_CURRENT_BUCKET,
+ bucket: "test"
+ })
+ expect(newState.currentBucket).toEqual("test")
+ })
+
+ it("should handle SET_POLICIES", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_POLICIES,
+ policies: ["test1", "test2"]
+ })
+ expect(newState.policies).toEqual(["test1", "test2"])
+ })
+
+ it("should handle SHOW_BUCKET_POLICY", () => {
+ const newState = reducer(undefined, {
+ type: actions.SHOW_BUCKET_POLICY,
+ show: true
+ })
+ expect(newState.showBucketPolicy).toBeTruthy()
+ })
+
+ it("should handle SHOW_MAKE_BUCKET_MODAL", () => {
+ const newState = reducer(undefined, {
+ type: actions.SHOW_MAKE_BUCKET_MODAL,
+ show: true
+ })
+ expect(newState.showMakeBucketModal).toBeTruthy()
+ })
+})
diff --git a/browser/app/js/buckets/__tests__/selectors.test.js b/browser/app/js/buckets/__tests__/selectors.test.js
new file mode 100644
index 000000000..92c2bd772
--- /dev/null
+++ b/browser/app/js/buckets/__tests__/selectors.test.js
@@ -0,0 +1,38 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { getFilteredBuckets, getCurrentBucket } from "../selectors"
+
+describe("getFilteredBuckets", () => {
+ let state
+ beforeEach(() => {
+ state = {
+ buckets: {
+ list: ["test1", "test11", "test2"]
+ }
+ }
+ })
+
+ it("should return all buckets if no filter specified", () => {
+ state.buckets.filter = ""
+ expect(getFilteredBuckets(state)).toEqual(["test1", "test11", "test2"])
+ })
+
+ it("should return all matching buckets if filter is specified", () => {
+ state.buckets.filter = "test1"
+ expect(getFilteredBuckets(state)).toEqual(["test1", "test11"])
+ })
+})
diff --git a/browser/app/js/buckets/actions.js b/browser/app/js/buckets/actions.js
new file mode 100644
index 000000000..6f2b73640
--- /dev/null
+++ b/browser/app/js/buckets/actions.js
@@ -0,0 +1,204 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import web from "../web"
+import history from "../history"
+import * as alertActions from "../alert/actions"
+import * as objectsActions from "../objects/actions"
+import { pathSlice } from "../utils"
+
+export const SET_LIST = "buckets/SET_LIST"
+export const ADD = "buckets/ADD"
+export const REMOVE = "buckets/REMOVE"
+export const SET_FILTER = "buckets/SET_FILTER"
+export const SET_CURRENT_BUCKET = "buckets/SET_CURRENT_BUCKET"
+export const SHOW_MAKE_BUCKET_MODAL = "buckets/SHOW_MAKE_BUCKET_MODAL"
+export const SHOW_BUCKET_POLICY = "buckets/SHOW_BUCKET_POLICY"
+export const SET_POLICIES = "buckets/SET_POLICIES"
+
+export const fetchBuckets = () => {
+ return function(dispatch) {
+ const { bucket, prefix } = pathSlice(history.location.pathname)
+ return web.ListBuckets().then(res => {
+ const buckets = res.buckets ? res.buckets.map(bucket => bucket.name) : []
+ if (buckets.length > 0) {
+ dispatch(setList(buckets))
+ if (bucket && buckets.indexOf(bucket) > -1) {
+ dispatch(selectBucket(bucket, prefix))
+ } else {
+ dispatch(selectBucket(buckets[0]))
+ }
+ } else {
+ if (bucket) {
+ dispatch(setList([bucket]))
+ dispatch(selectBucket(bucket, prefix))
+ } else {
+ dispatch(selectBucket(""))
+ history.replace("/")
+ }
+ }
+ })
+ .catch(err => {
+ if (bucket && err.message === "Access Denied." || err.message.indexOf('Prefix access is denied') > -1 ) {
+ dispatch(setList([bucket]))
+ dispatch(selectBucket(bucket, prefix))
+ } else {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message,
+ autoClear: true,
+ })
+ )
+ }
+ })
+ }
+}
+
+export const setList = buckets => {
+ return {
+ type: SET_LIST,
+ buckets
+ }
+}
+
+export const setFilter = filter => {
+ return {
+ type: SET_FILTER,
+ filter
+ }
+}
+
+export const selectBucket = (bucket, prefix) => {
+ return function(dispatch) {
+ dispatch(setCurrentBucket(bucket))
+ dispatch(objectsActions.selectPrefix(prefix || ""))
+ }
+}
+
+export const setCurrentBucket = bucket => {
+ return {
+ type: SET_CURRENT_BUCKET,
+ bucket
+ }
+}
+
+export const makeBucket = bucket => {
+ return function(dispatch) {
+ return web
+ .MakeBucket({
+ bucketName: bucket
+ })
+ .then(() => {
+ dispatch(addBucket(bucket))
+ dispatch(selectBucket(bucket))
+ })
+ .catch(err =>
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message
+ })
+ )
+ )
+ }
+}
+
+export const deleteBucket = bucket => {
+ return function(dispatch) {
+ return web
+ .DeleteBucket({
+ bucketName: bucket
+ })
+ .then(() => {
+ dispatch(
+ alertActions.set({
+ type: "info",
+ message: "Bucket '" + bucket + "' has been deleted."
+ })
+ )
+ dispatch(removeBucket(bucket))
+ dispatch(fetchBuckets())
+ })
+ .catch(err => {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message
+ })
+ )
+ })
+ }
+}
+
+export const addBucket = bucket => ({
+ type: ADD,
+ bucket
+})
+
+export const removeBucket = bucket => ({
+ type: REMOVE,
+ bucket
+})
+
+export const showMakeBucketModal = () => ({
+ type: SHOW_MAKE_BUCKET_MODAL,
+ show: true
+})
+
+export const hideMakeBucketModal = () => ({
+ type: SHOW_MAKE_BUCKET_MODAL,
+ show: false
+})
+
+export const fetchPolicies = bucket => {
+ return function(dispatch) {
+ return web
+ .ListAllBucketPolicies({
+ bucketName: bucket
+ })
+ .then(res => {
+ let policies = res.policies
+ if(policies)
+ dispatch(setPolicies(policies))
+ else
+ dispatch(setPolicies([]))
+ })
+ .catch(err => {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message
+ })
+ )
+ })
+ }
+}
+
+export const setPolicies = policies => ({
+ type: SET_POLICIES,
+ policies
+})
+
+export const showBucketPolicy = () => ({
+ type: SHOW_BUCKET_POLICY,
+ show: true
+})
+
+export const hideBucketPolicy = () => ({
+ type: SHOW_BUCKET_POLICY,
+ show: false
+})
\ No newline at end of file
diff --git a/browser/app/js/buckets/reducer.js b/browser/app/js/buckets/reducer.js
new file mode 100644
index 000000000..12b1ef62c
--- /dev/null
+++ b/browser/app/js/buckets/reducer.js
@@ -0,0 +1,82 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as actionsBuckets from "./actions"
+
+const removeBucket = (list, action) => {
+ const idx = list.findIndex(bucket => bucket === action.bucket)
+ if (idx == -1) {
+ return list
+ }
+ return [...list.slice(0, idx), ...list.slice(idx + 1)]
+}
+
+export default (
+ state = {
+ list: [],
+ filter: "",
+ currentBucket: "",
+ showMakeBucketModal: false,
+ policies: [],
+ showBucketPolicy: false
+ },
+ action
+) => {
+ switch (action.type) {
+ case actionsBuckets.SET_LIST:
+ return {
+ ...state,
+ list: action.buckets
+ }
+ case actionsBuckets.ADD:
+ return {
+ ...state,
+ list: [action.bucket, ...state.list]
+ }
+ case actionsBuckets.REMOVE:
+ return {
+ ...state,
+ list: removeBucket(state.list, action),
+ }
+ case actionsBuckets.SET_FILTER:
+ return {
+ ...state,
+ filter: action.filter
+ }
+ case actionsBuckets.SET_CURRENT_BUCKET:
+ return {
+ ...state,
+ currentBucket: action.bucket
+ }
+ case actionsBuckets.SHOW_MAKE_BUCKET_MODAL:
+ return {
+ ...state,
+ showMakeBucketModal: action.show
+ }
+ case actionsBuckets.SET_POLICIES:
+ return {
+ ...state,
+ policies: action.policies
+ }
+ case actionsBuckets.SHOW_BUCKET_POLICY:
+ return {
+ ...state,
+ showBucketPolicy: action.show
+ }
+ default:
+ return state
+ }
+}
diff --git a/browser/app/js/buckets/selectors.js b/browser/app/js/buckets/selectors.js
new file mode 100644
index 000000000..4048720e1
--- /dev/null
+++ b/browser/app/js/buckets/selectors.js
@@ -0,0 +1,29 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createSelector } from "reselect"
+
+const bucketsSelector = state => state.buckets.list
+const bucketsFilterSelector = state => state.buckets.filter
+
+export const getFilteredBuckets = createSelector(
+ bucketsSelector,
+ bucketsFilterSelector,
+ (buckets, filter) => buckets.filter(
+ bucket => bucket.toLowerCase().indexOf(filter.toLowerCase()) > -1)
+)
+
+export const getCurrentBucket = state => state.buckets.currentBucket
diff --git a/browser/app/js/components/BrowserUpdate.js b/browser/app/js/components/BrowserUpdate.js
new file mode 100644
index 000000000..2d4484c42
--- /dev/null
+++ b/browser/app/js/components/BrowserUpdate.js
@@ -0,0 +1,42 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from 'react'
+import connect from 'react-redux/lib/components/connect'
+
+import Tooltip from 'react-bootstrap/lib/Tooltip'
+import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger'
+
+let BrowserUpdate = ({latestUiVersion}) => {
+ // Don't show an update if we're already updated!
+ if (latestUiVersion === currentUiVersion) return ( )
+
+ return (
+
+
+
+ New update available. Click to refresh.
+ }>
+
+
+ )
+}
+
+export default connect(state => {
+ return {
+ latestUiVersion: state.latestUiVersion
+ }
+})(BrowserUpdate)
diff --git a/browser/app/js/constants.js b/browser/app/js/constants.js
new file mode 100644
index 000000000..b2877f65c
--- /dev/null
+++ b/browser/app/js/constants.js
@@ -0,0 +1,37 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var p = window.location.pathname
+export const minioBrowserPrefix = p.slice(0, p.indexOf("/", 1))
+
+export const READ_ONLY = "readonly"
+export const WRITE_ONLY = "writeonly"
+export const READ_WRITE = "readwrite"
+export const NONE = "none"
+
+export const SHARE_OBJECT_EXPIRY_DAYS = 5
+export const SHARE_OBJECT_EXPIRY_HOURS = 0
+export const SHARE_OBJECT_EXPIRY_MINUTES = 0
+
+export const ACCESS_KEY_MIN_LENGTH = 3
+export const SECRET_KEY_MIN_LENGTH = 8
+
+export const SORT_BY_NAME = "name"
+export const SORT_BY_SIZE = "size"
+export const SORT_BY_LAST_MODIFIED = "last-modified"
+
+export const SORT_ORDER_ASC = "asc"
+export const SORT_ORDER_DESC = "desc"
diff --git a/browser/app/js/history.js b/browser/app/js/history.js
new file mode 100644
index 000000000..649ed43ec
--- /dev/null
+++ b/browser/app/js/history.js
@@ -0,0 +1,24 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import createHistory from "history/createBrowserHistory"
+import { minioBrowserPrefix } from "./constants"
+
+const history = createHistory({
+ basename: minioBrowserPrefix
+})
+
+export default history
diff --git a/browser/app/js/jest/__mocks__/fileMock.js b/browser/app/js/jest/__mocks__/fileMock.js
new file mode 100644
index 000000000..d7d7cbc46
--- /dev/null
+++ b/browser/app/js/jest/__mocks__/fileMock.js
@@ -0,0 +1,17 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+module.exports = 'test-file-stub';
diff --git a/browser/app/js/jest/setup.js b/browser/app/js/jest/setup.js
new file mode 100644
index 000000000..412b7cc36
--- /dev/null
+++ b/browser/app/js/jest/setup.js
@@ -0,0 +1,21 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import "jest-enzyme"
+import { configure } from "enzyme"
+import Adapter from "enzyme-adapter-react-16"
+
+configure({ adapter: new Adapter() })
diff --git a/browser/app/js/jsonrpc.js b/browser/app/js/jsonrpc.js
new file mode 100644
index 000000000..8a9e54d2a
--- /dev/null
+++ b/browser/app/js/jsonrpc.js
@@ -0,0 +1,91 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import SuperAgent from 'superagent-es6-promise';
+import url from 'url'
+import Moment from 'moment'
+
+export default class JSONrpc {
+ constructor(params) {
+ this.endpoint = params.endpoint
+ this.namespace = params.namespace
+ this.version = '2.0';
+ const parsedUrl = url.parse(this.endpoint)
+ this.host = parsedUrl.hostname
+ this.path = parsedUrl.path
+ this.port = parsedUrl.port
+
+ switch (parsedUrl.protocol) {
+ case 'http:': {
+ this.scheme = 'http'
+ if (parsedUrl.port === 0) {
+ this.port = 80
+ }
+ break
+ }
+ case 'https:': {
+ this.scheme = 'https'
+ if (parsedUrl.port === 0) {
+ this.port = 443
+ }
+ break
+ }
+ default: {
+ throw new Error('Unknown protocol: ' + parsedUrl.protocol)
+ }
+ }
+ }
+ // call('Get', {id: NN, params: [...]}, function() {})
+ call(method, options, token) {
+ if (!options) {
+ options = {}
+ }
+ if (!options.id) {
+ options.id = 1;
+ }
+ if (!options.params) {
+ options.params = {};
+ }
+ const dataObj = {
+ id: options.id,
+ jsonrpc: this.version,
+ params: options.params ? options.params : {},
+ method: this.namespace ? this.namespace + '.' + method : method
+ }
+ let requestParams = {
+ host: this.host,
+ port: this.port,
+ path: this.path,
+ scheme: this.scheme,
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'x-amz-date': Moment().utc().format('YYYYMMDDTHHmmss') + 'Z'
+ }
+ }
+
+ if (token) {
+ requestParams.headers.Authorization = 'Bearer ' + token
+ }
+
+ let req = SuperAgent.post(this.endpoint)
+ for (let key in requestParams.headers) {
+ req.set(key, requestParams.headers[key])
+ }
+ // req.set('Access-Control-Allow-Origin', 'http://localhost:8080')
+ return req.send(JSON.stringify(dataObj)).then(res => res)
+ }
+}
diff --git a/browser/app/js/loader.js b/browser/app/js/loader.js
new file mode 100644
index 000000000..282948a95
--- /dev/null
+++ b/browser/app/js/loader.js
@@ -0,0 +1,30 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+let delay = [0, 400]
+
+function handleLoader(i) {
+ if (i < 2) {
+ setTimeout(function() {
+ document.querySelector(".page-load").classList.add("pl-" + i)
+ handleLoader(i + 1)
+ }, delay[i])
+ }
+}
+
+const hideLoader = () => handleLoader(0)
+
+export default hideLoader
diff --git a/browser/app/js/mime.js b/browser/app/js/mime.js
new file mode 100644
index 000000000..c6f17aeae
--- /dev/null
+++ b/browser/app/js/mime.js
@@ -0,0 +1,144 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import mimedb from "mime-types"
+
+const isFolder = (name, contentType) => {
+ if (name.endsWith("/")) return true
+ return false
+}
+
+const isPdf = (name, contentType) => {
+ if (contentType === "application/pdf") return true
+ return false
+}
+const isImage = (name, contentType) => {
+ if (
+ contentType === "image/jpeg" ||
+ contentType === "image/gif" ||
+ contentType === "image/x-icon" ||
+ contentType === "image/png" ||
+ contentType === "image/svg+xml" ||
+ contentType === "image/tiff" ||
+ contentType === "image/webp"
+ )
+ return true
+ return false
+}
+
+const isZip = (name, contentType) => {
+ if (!contentType || !contentType.includes("/")) return false
+ if (contentType.split("/")[1].includes("zip")) return true
+ return false
+}
+
+const isCode = (name, contentType) => {
+ const codeExt = [
+ "c",
+ "cpp",
+ "go",
+ "py",
+ "java",
+ "rb",
+ "js",
+ "pl",
+ "fs",
+ "php",
+ "css",
+ "less",
+ "scss",
+ "coffee",
+ "net",
+ "html",
+ "rs",
+ "exs",
+ "scala",
+ "hs",
+ "clj",
+ "el",
+ "scm",
+ "lisp",
+ "asp",
+ "aspx",
+ ]
+ const ext = name.split(".").reverse()[0]
+ for (var i in codeExt) {
+ if (ext === codeExt[i]) return true
+ }
+ return false
+}
+
+const isExcel = (name, contentType) => {
+ if (!contentType || !contentType.includes("/")) return false
+ const types = ["excel", "spreadsheet"]
+ const subType = contentType.split("/")[1]
+ for (var i in types) {
+ if (subType.includes(types[i])) return true
+ }
+ return false
+}
+
+const isDoc = (name, contentType) => {
+ if (!contentType || !contentType.includes("/")) return false
+ const types = ["word", ".document"]
+ const subType = contentType.split("/")[1]
+ for (var i in types) {
+ if (subType.includes(types[i])) return true
+ }
+ return false
+}
+
+const isPresentation = (name, contentType) => {
+ if (!contentType || !contentType.includes("/")) return false
+ var types = ["powerpoint", "presentation"]
+ const subType = contentType.split("/")[1]
+ for (var i in types) {
+ if (subType.includes(types[i])) return true
+ }
+ return false
+}
+
+const typeToIcon = (type) => {
+ return (name, contentType) => {
+ if (!contentType || !contentType.includes("/")) return false
+ if (contentType.split("/")[0] === type) return true
+ return false
+ }
+}
+
+export const getDataType = (name, contentType) => {
+ if (contentType === "") {
+ contentType = mimedb.lookup(name) || "application/octet-stream"
+ }
+ const check = [
+ ["folder", isFolder],
+ ["code", isCode],
+ ["audio", typeToIcon("audio")],
+ ["image", typeToIcon("image")],
+ ["video", typeToIcon("video")],
+ ["text", typeToIcon("text")],
+ ["pdf", isPdf],
+ ["image", isImage],
+ ["zip", isZip],
+ ["excel", isExcel],
+ ["doc", isDoc],
+ ["presentation", isPresentation],
+ ]
+ for (var i in check) {
+ if (check[i][1](name, contentType)) return check[i][0]
+ }
+ return "other"
+}
diff --git a/browser/app/js/objects/DeleteObjectConfirmModal.js b/browser/app/js/objects/DeleteObjectConfirmModal.js
new file mode 100644
index 000000000..118c4044d
--- /dev/null
+++ b/browser/app/js/objects/DeleteObjectConfirmModal.js
@@ -0,0 +1,36 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import ConfirmModal from "../browser/ConfirmModal"
+
+export const DeleteObjectConfirmModal = ({
+ deleteObject,
+ hideDeleteConfirmModal
+}) => (
+
+)
+
+export default DeleteObjectConfirmModal
diff --git a/browser/app/js/objects/ObjectActions.js b/browser/app/js/objects/ObjectActions.js
new file mode 100644
index 000000000..cb0062d4d
--- /dev/null
+++ b/browser/app/js/objects/ObjectActions.js
@@ -0,0 +1,162 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Dropdown } from "react-bootstrap"
+import ShareObjectModal from "./ShareObjectModal"
+import DeleteObjectConfirmModal from "./DeleteObjectConfirmModal"
+import PreviewObjectModal from "./PreviewObjectModal"
+
+import * as objectsActions from "./actions"
+import { getDataType } from "../mime.js"
+import {
+ SHARE_OBJECT_EXPIRY_DAYS,
+ SHARE_OBJECT_EXPIRY_HOURS,
+ SHARE_OBJECT_EXPIRY_MINUTES,
+} from "../constants"
+
+export class ObjectActions extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ showDeleteConfirmation: false,
+ showPreview: false,
+ }
+ }
+ shareObject(e) {
+ e.preventDefault()
+ const { object, shareObject } = this.props
+ shareObject(
+ object.name,
+ SHARE_OBJECT_EXPIRY_DAYS,
+ SHARE_OBJECT_EXPIRY_HOURS,
+ SHARE_OBJECT_EXPIRY_MINUTES
+ )
+ }
+ handleDownload(e) {
+ e.preventDefault()
+ const { object, downloadObject } = this.props
+ downloadObject(object.name)
+ }
+ deleteObject() {
+ const { object, deleteObject } = this.props
+ deleteObject(object.name)
+ }
+ showDeleteConfirmModal(e) {
+ e.preventDefault()
+ this.setState({ showDeleteConfirmation: true })
+ }
+ hideDeleteConfirmModal() {
+ this.setState({
+ showDeleteConfirmation: false,
+ })
+ }
+ getObjectURL(objectname, callback) {
+ const { getObjectURL } = this.props
+ getObjectURL(objectname, callback)
+ }
+ showPreviewModal(e) {
+ e.preventDefault()
+ this.setState({ showPreview: true })
+ }
+ hidePreviewModal() {
+ this.setState({
+ showPreview: false,
+ })
+ }
+ render() {
+ const { object, showShareObjectModal, shareObjectName } = this.props
+ return (
+
+
+
+
+
+
+ {getDataType(object.name, object.contentType) == "image" && (
+
+
+
+ )}
+
+
+
+
+
+
+
+ {showShareObjectModal && shareObjectName === object.name && (
+
+ )}
+ {this.state.showDeleteConfirmation && (
+
+ )}
+ {this.state.showPreview && (
+
+ )}
+
+ )
+ }
+}
+
+const mapStateToProps = (state, ownProps) => {
+ return {
+ object: ownProps.object,
+ showShareObjectModal: state.objects.shareObject.show,
+ shareObjectName: state.objects.shareObject.object,
+ }
+}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ downloadObject: object => dispatch(objectsActions.downloadObject(object)),
+ shareObject: (object, days, hours, minutes) =>
+ dispatch(objectsActions.shareObject(object, days, hours, minutes)),
+ deleteObject: (object) => dispatch(objectsActions.deleteObject(object)),
+ getObjectURL: (object, callback) =>
+ dispatch(objectsActions.getObjectURL(object, callback)),
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(ObjectActions)
diff --git a/browser/app/js/objects/ObjectContainer.js b/browser/app/js/objects/ObjectContainer.js
new file mode 100644
index 000000000..b7e6dc794
--- /dev/null
+++ b/browser/app/js/objects/ObjectContainer.js
@@ -0,0 +1,49 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import humanize from "humanize"
+import Moment from "moment"
+import ObjectItem from "./ObjectItem"
+import ObjectActions from "./ObjectActions"
+import * as actionsObjects from "./actions"
+import { getCheckedList } from "./selectors"
+
+export const ObjectContainer = ({
+ object,
+ checkedObjectsCount,
+ downloadObject
+}) => {
+ let props = {
+ name: object.name,
+ contentType: object.contentType,
+ size: humanize.filesize(object.size),
+ lastModified: Moment(object.lastModified).format("lll")
+ }
+ if (checkedObjectsCount == 0) {
+ props.actionButtons =
+ }
+ return
+}
+
+const mapStateToProps = state => {
+ return {
+ checkedObjectsCount: getCheckedList(state).length
+ }
+}
+
+export default connect(mapStateToProps)(ObjectContainer)
diff --git a/browser/app/js/objects/ObjectItem.js b/browser/app/js/objects/ObjectItem.js
new file mode 100644
index 000000000..1d5cadf97
--- /dev/null
+++ b/browser/app/js/objects/ObjectItem.js
@@ -0,0 +1,88 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import humanize from "humanize"
+import Moment from "moment"
+import { getDataType } from "../mime"
+import * as actions from "./actions"
+import { getCheckedList } from "./selectors"
+
+export const ObjectItem = ({
+ name,
+ contentType,
+ size,
+ lastModified,
+ checked,
+ checkObject,
+ uncheckObject,
+ actionButtons,
+ onClick
+}) => {
+ return (
+
+
+
+ {
+ checked ? uncheckObject(name) : checkObject(name)
+ }}
+ />
+
+
+
+
+
+
{size}
+
{lastModified}
+
{actionButtons}
+
+ )
+}
+
+const mapStateToProps = (state, ownProps) => {
+ return {
+ checked: getCheckedList(state).indexOf(ownProps.name) >= 0
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ checkObject: name => dispatch(actions.checkObject(name)),
+ uncheckObject: name => dispatch(actions.uncheckObject(name))
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(ObjectItem)
diff --git a/browser/app/js/objects/ObjectsBulkActions.js b/browser/app/js/objects/ObjectsBulkActions.js
new file mode 100644
index 000000000..62a519029
--- /dev/null
+++ b/browser/app/js/objects/ObjectsBulkActions.js
@@ -0,0 +1,116 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import classNames from "classnames"
+import * as actions from "./actions"
+import { getCheckedList } from "./selectors"
+import DeleteObjectConfirmModal from "./DeleteObjectConfirmModal"
+
+export class ObjectsBulkActions extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ showDeleteConfirmation: false
+ }
+ }
+ handleDownload() {
+ const { checkedObjects, clearChecked, downloadChecked, downloadObject } = this.props
+ if (checkedObjects.length === 1 && !checkedObjects[0].endsWith('/')) {
+ downloadObject(checkedObjects[0])
+ clearChecked()
+ } else {
+ downloadChecked()
+ }
+ }
+ deleteChecked() {
+ const { deleteChecked } = this.props
+ deleteChecked()
+ this.hideDeleteConfirmModal()
+ }
+ hideDeleteConfirmModal() {
+ this.setState({
+ showDeleteConfirmation: false
+ })
+ }
+ render() {
+ const { checkedObjects, clearChecked } = this.props
+ return (
+ 0
+ })
+ }
+ >
+
+ {checkedObjects.length}
+ {checkedObjects.length === 1 ? " Object " : " Objects "}
+ selected
+
+
+
+ {" "}
+ Download
+ {(checkedObjects.length === 1 && !checkedObjects[0].endsWith('/')) ?
+ " object" : " all as zip" }{" "}
+
+
+
+ this.setState({ showDeleteConfirmation: true })}
+ >
+ {" "}
+ Delete selected{" "}
+
+
+
+ {this.state.showDeleteConfirmation && (
+
+ )}
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ checkedObjects: getCheckedList(state)
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ downloadObject: object => dispatch(actions.downloadObject(object)),
+ downloadChecked: () => dispatch(actions.downloadCheckedObjects()),
+ downloadObject: object => dispatch(actions.downloadObject(object)),
+ resetCheckedList: () => dispatch(actions.resetCheckedList()),
+ clearChecked: () => dispatch(actions.resetCheckedList()),
+ deleteChecked: () => dispatch(actions.deleteCheckedObjects())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(ObjectsBulkActions)
diff --git a/browser/app/js/objects/ObjectsHeader.js b/browser/app/js/objects/ObjectsHeader.js
new file mode 100644
index 000000000..956ec7e5b
--- /dev/null
+++ b/browser/app/js/objects/ObjectsHeader.js
@@ -0,0 +1,116 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import { connect } from "react-redux"
+import * as actionsObjects from "./actions"
+import {
+ SORT_BY_NAME,
+ SORT_BY_SIZE,
+ SORT_BY_LAST_MODIFIED,
+ SORT_ORDER_DESC,
+ SORT_ORDER_ASC
+} from "../constants"
+
+export const ObjectsHeader = ({
+ sortedByName,
+ sortedBySize,
+ sortedByLastModified,
+ sortOrder,
+ sortObjects
+}) => (
+
+
+
+ sortObjects(SORT_BY_NAME)}
+ data-sort="name"
+ >
+ Name
+
+
+ sortObjects(SORT_BY_SIZE)}
+ data-sort="size"
+ >
+ Size
+
+
+ sortObjects(SORT_BY_LAST_MODIFIED)}
+ data-sort="last-modified"
+ >
+ Last Modified
+
+
+
+
+
+)
+
+const mapStateToProps = state => {
+ return {
+ sortedByName: state.objects.sortBy == SORT_BY_NAME,
+ sortedBySize: state.objects.sortBy == SORT_BY_SIZE,
+ sortedByLastModified: state.objects.sortBy == SORT_BY_LAST_MODIFIED,
+ sortOrder: state.objects.sortOrder
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ sortObjects: sortBy => dispatch(actionsObjects.sortObjects(sortBy))
+ }
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(ObjectsHeader)
diff --git a/browser/app/js/objects/ObjectsList.js b/browser/app/js/objects/ObjectsList.js
new file mode 100644
index 000000000..0e9d6ed23
--- /dev/null
+++ b/browser/app/js/objects/ObjectsList.js
@@ -0,0 +1,32 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import ObjectContainer from "./ObjectContainer"
+import PrefixContainer from "./PrefixContainer"
+
+export const ObjectsList = ({ objects }) => {
+ const list = objects.map(object => {
+ if (object.name.endsWith("/")) {
+ return
+ } else {
+ return
+ }
+ })
+ return {list}
+}
+
+export default ObjectsList
diff --git a/browser/app/js/objects/ObjectsListContainer.js b/browser/app/js/objects/ObjectsListContainer.js
new file mode 100644
index 000000000..940620334
--- /dev/null
+++ b/browser/app/js/objects/ObjectsListContainer.js
@@ -0,0 +1,89 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import InfiniteScroll from "react-infinite-scroller"
+import ObjectsList from "./ObjectsList"
+import { getFilteredObjects } from "./selectors"
+
+export class ObjectsListContainer extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ page: 1
+ }
+ this.loadNextPage = this.loadNextPage.bind(this)
+ }
+ componentWillReceiveProps(nextProps) {
+ if (
+ nextProps.currentBucket !== this.props.currentBucket ||
+ nextProps.currentPrefix !== this.props.currentPrefix ||
+ nextProps.sortBy !== this.props.sortBy ||
+ nextProps.sortOrder !== this.props.sortOrder
+ ) {
+ this.setState({
+ page: 1
+ })
+ }
+ }
+ componentDidUpdate(prevProps) {
+ if (this.props.filter !== prevProps.filter) {
+ this.setState({
+ page: 1
+ })
+ }
+ }
+ loadNextPage() {
+ this.setState(state => {
+ return { page: state.page + 1 }
+ })
+ }
+ render() {
+ const { filteredObjects, listLoading } = this.props
+
+ const visibleObjects = filteredObjects.slice(0, this.state.page * 100)
+
+ return (
+
+
visibleObjects.length}
+ useWindow={true}
+ initialLoad={false}
+ >
+
+
+ {listLoading &&
}
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ currentBucket: state.buckets.currentBucket,
+ currentPrefix: state.objects.currentPrefix,
+ filteredObjects: getFilteredObjects(state),
+ filter: state.objects.filter,
+ sortBy: state.objects.sortBy,
+ sortOrder: state.objects.sortOrder,
+ listLoading: state.objects.listLoading
+ }
+}
+
+export default connect(mapStateToProps)(ObjectsListContainer)
diff --git a/browser/app/js/objects/ObjectsSearch.js b/browser/app/js/objects/ObjectsSearch.js
new file mode 100644
index 000000000..a51ebe0e6
--- /dev/null
+++ b/browser/app/js/objects/ObjectsSearch.js
@@ -0,0 +1,43 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import * as actionsObjects from "./actions"
+
+export const ObjectsSearch = ({ onChange }) => (
+
+ onChange(e.target.value)}
+ />
+
+
+)
+
+const mapDispatchToProps = dispatch => {
+ return {
+ onChange: filter =>
+ dispatch(actionsObjects.setFilter(filter))
+ }
+}
+
+export default connect(undefined, mapDispatchToProps)(ObjectsSearch)
diff --git a/browser/app/js/objects/ObjectsSection.js b/browser/app/js/objects/ObjectsSection.js
new file mode 100644
index 000000000..4f296073f
--- /dev/null
+++ b/browser/app/js/objects/ObjectsSection.js
@@ -0,0 +1,28 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import ObjectsHeader from "./ObjectsHeader"
+import ObjectsListContainer from "./ObjectsListContainer"
+
+export const ObjectsSection = () => (
+
+
+
+
+)
+
+export default ObjectsSection
diff --git a/browser/app/js/objects/Path.js b/browser/app/js/objects/Path.js
new file mode 100644
index 000000000..fb51b0605
--- /dev/null
+++ b/browser/app/js/objects/Path.js
@@ -0,0 +1,176 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import ClickOutHandler from "react-onclickout"
+import { OverlayTrigger, Tooltip } from "react-bootstrap"
+import { getCurrentBucket } from "../buckets/selectors"
+import * as actionsObjects from "./actions"
+import * as actionsBuckets from "../buckets/actions"
+
+export class Path extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ isEditing: false,
+ path: ""
+ }
+ }
+ stopEditing() {
+ this.setState({
+ isEditing: false
+ })
+ }
+ onPrefixClick(e, prefix) {
+ e.preventDefault()
+ const { selectPrefix } = this.props
+ selectPrefix(prefix)
+ }
+ onEditClick(e) {
+ e.preventDefault()
+ const { currentBucket, currentPrefix } = this.props
+ this.setState(
+ {
+ isEditing: true,
+ path: `${currentBucket}/${currentPrefix}`
+ },
+ () => {
+ // focus on input and move cursor to the end
+ this.pathInput.focus()
+ this.pathInput.setSelectionRange(
+ this.state.path.length,
+ this.state.path.length
+ )
+ }
+ )
+ }
+ onKeyDown(e) {
+ // When Esc key is pressed
+ if (e.keyCode === 27) {
+ this.stopEditing()
+ }
+ }
+ onInputClickOut() {
+ this.stopEditing()
+ }
+ bucketExists(bucketName) {
+ const { buckets } = this.props
+ return buckets.includes(bucketName)
+ }
+ async onSubmit(e) {
+ e.preventDefault()
+ const { makeBucket, selectBucket } = this.props
+ // all paths need to end in slash to display contents properly
+ let path = this.state.path
+ if (!path.endsWith("/")) {
+ path += "/"
+ }
+ const splittedPath = path.split("/")
+ if (splittedPath.length > 0) {
+ // prevent bucket name from being empty
+ if (splittedPath[0]) {
+ const bucketName = splittedPath[0]
+ const prefix = splittedPath.slice(1).join("/")
+ if (!this.bucketExists(bucketName)) {
+ await makeBucket(bucketName)
+ }
+ // check updated buckets and don't proceed on invalid inputs
+ if (this.bucketExists(bucketName)) {
+ // then select bucket with prefix
+ selectBucket(bucketName, prefix)
+ }
+ this.stopEditing()
+ }
+ }
+ }
+ render() {
+ const pathTooltip = Choose or create new path
+ const { currentBucket, currentPrefix } = this.props
+ let dirPath = []
+ let path = ""
+ if (currentPrefix) {
+ path = currentPrefix.split("/").map((dir, i) => {
+ if (dir) {
+ dirPath.push(dir)
+ let dirPath_ = dirPath.join("/") + "/"
+ return (
+
+ this.onPrefixClick(e, dirPath_)}>
+ {dir}
+
+
+ )
+ }
+ })
+ }
+ return (
+
+ {this.state.isEditing ? (
+ this.onInputClickOut()}>
+
+
+ ) : (
+
+
+ this.onPrefixClick(e, "")}>
+ {currentBucket}
+
+
+ {path}
+
+ this.onEditClick(e)} className="fe-edit">
+
+
+
+
+ )}
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ buckets: state.buckets.list,
+ currentBucket: getCurrentBucket(state),
+ currentPrefix: state.objects.currentPrefix
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ makeBucket: bucket => dispatch(actionsBuckets.makeBucket(bucket)),
+ selectBucket: (bucket, prefix) =>
+ dispatch(actionsBuckets.selectBucket(bucket, prefix)),
+ selectPrefix: prefix => dispatch(actionsObjects.selectPrefix(prefix))
+ }
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Path)
diff --git a/browser/app/js/objects/PrefixActions.js b/browser/app/js/objects/PrefixActions.js
new file mode 100644
index 000000000..1a7420137
--- /dev/null
+++ b/browser/app/js/objects/PrefixActions.js
@@ -0,0 +1,95 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Dropdown } from "react-bootstrap"
+import DeleteObjectConfirmModal from "./DeleteObjectConfirmModal"
+import * as actions from "./actions"
+
+export class PrefixActions extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ showDeleteConfirmation: false,
+ }
+ }
+ handleDownload(e) {
+ e.preventDefault()
+ const { object, downloadPrefix } = this.props
+ downloadPrefix(object.name)
+ }
+ deleteObject() {
+ const { object, deleteObject } = this.props
+ deleteObject(object.name)
+ }
+ showDeleteConfirmModal(e) {
+ e.preventDefault()
+ this.setState({ showDeleteConfirmation: true })
+ }
+ hideDeleteConfirmModal() {
+ this.setState({
+ showDeleteConfirmation: false,
+ })
+ }
+ render() {
+ const { object, showShareObjectModal, shareObjectName } = this.props
+ return (
+
+
+
+
+
+
+
+
+
+
+ {this.state.showDeleteConfirmation && (
+
+ )}
+
+ )
+ }
+}
+
+const mapStateToProps = (state, ownProps) => {
+ return {
+ object: ownProps.object,
+ }
+}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ downloadPrefix: object => dispatch(actions.downloadPrefix(object)),
+ deleteObject: (object) => dispatch(actions.deleteObject(object)),
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(PrefixActions)
diff --git a/browser/app/js/objects/PrefixContainer.js b/browser/app/js/objects/PrefixContainer.js
new file mode 100644
index 000000000..bbc836eef
--- /dev/null
+++ b/browser/app/js/objects/PrefixContainer.js
@@ -0,0 +1,55 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import ObjectItem from "./ObjectItem"
+import PrefixActions from "./PrefixActions"
+import * as actionsObjects from "./actions"
+import { getCheckedList } from "./selectors"
+
+export const PrefixContainer = ({
+ object,
+ currentPrefix,
+ checkedObjectsCount,
+ selectPrefix
+}) => {
+ const props = {
+ name: object.name,
+ contentType: object.contentType,
+ onClick: () => selectPrefix(`${currentPrefix}${object.name}`)
+ }
+ if (checkedObjectsCount == 0) {
+ props.actionButtons =
+ }
+ return
+}
+
+const mapStateToProps = (state, ownProps) => {
+ return {
+ object: ownProps.object,
+ currentPrefix: state.objects.currentPrefix,
+ checkedObjectsCount: getCheckedList(state).length
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ selectPrefix: prefix => dispatch(actionsObjects.selectPrefix(prefix))
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(PrefixContainer)
diff --git a/browser/app/js/objects/PreviewObjectModal.js b/browser/app/js/objects/PreviewObjectModal.js
new file mode 100644
index 000000000..1dbc2ef92
--- /dev/null
+++ b/browser/app/js/objects/PreviewObjectModal.js
@@ -0,0 +1,68 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { Modal, ModalHeader, ModalBody } from "react-bootstrap"
+
+class PreviewObjectModal extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ url: "",
+ }
+ }
+
+ componentDidMount() {
+ this.props.getObjectURL(this.props.object.name, (url) => {
+ this.setState({
+ url: url,
+ })
+ })
+ }
+
+ render() {
+ const { hidePreviewModal } = this.props
+ return (
+
+ Preview
+
+
+ {this.state.url && (
+
+
+ Do not have read permissions to preview "{this.props.object.name}"
+
+
+ )}
+
+
+
+ {
+
+ Cancel
+
+ }
+
+
+ )
+ }
+}
+export default PreviewObjectModal
diff --git a/browser/app/js/objects/ShareObjectModal.js b/browser/app/js/objects/ShareObjectModal.js
new file mode 100644
index 000000000..d75056d20
--- /dev/null
+++ b/browser/app/js/objects/ShareObjectModal.js
@@ -0,0 +1,216 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import { Modal, ModalHeader, ModalBody } from "react-bootstrap"
+import CopyToClipboard from "react-copy-to-clipboard"
+import web from "../web"
+import * as objectsActions from "./actions"
+import * as alertActions from "../alert/actions"
+import {
+ SHARE_OBJECT_EXPIRY_DAYS,
+ SHARE_OBJECT_EXPIRY_HOURS,
+ SHARE_OBJECT_EXPIRY_MINUTES
+} from "../constants"
+import QRCode from "react-qr-code";
+
+export class ShareObjectModal extends React.Component {
+ constructor(props) {
+ super(props)
+ this.state = {
+ expiry: {
+ days: SHARE_OBJECT_EXPIRY_DAYS,
+ hours: SHARE_OBJECT_EXPIRY_HOURS,
+ minutes: SHARE_OBJECT_EXPIRY_MINUTES
+ }
+ }
+ this.expiryRange = {
+ days: { min: 0, max: 7 },
+ hours: { min: 0, max: 23 },
+ minutes: { min: 0, max: 59 }
+ }
+ }
+ updateExpireValue(param, inc) {
+ let expiry = Object.assign({}, this.state.expiry)
+
+ // Not allowing any increments if days is already max
+ if (expiry.days == this.expiryRange["days"].max && inc > 0) {
+ return
+ }
+
+ const { min, max } = this.expiryRange[param]
+ expiry[param] = expiry[param] + inc
+ if (expiry[param] < min || expiry[param] > max) {
+ return
+ }
+
+ if (expiry.days == this.expiryRange["days"].max) {
+ expiry.hours = 0
+ expiry.minutes = 0
+ } else if (expiry.days + expiry.hours + expiry.minutes == 0) {
+ expiry.days = this.expiryRange["days"].max
+ }
+
+ this.setState({
+ expiry
+ })
+
+ const { object, shareObject } = this.props
+ shareObject(object.name, expiry.days, expiry.hours, expiry.minutes)
+ }
+ onUrlCopied() {
+ const { showCopyAlert, hideShareObject } = this.props
+ showCopyAlert("Link copied to clipboard!")
+ hideShareObject()
+ }
+ render() {
+ const { shareObjectDetails, hideShareObject } = this.props
+ const url = `${window.location.protocol}//${shareObjectDetails.url}`
+ return (
+
+ Share Object
+
+
+
+ Shareable Link
+ (this.copyTextInput = node)}
+ readOnly="readOnly"
+ value={url}
+ onClick={() => this.copyTextInput.select()}
+ />
+
+ {shareObjectDetails.showExpiryDate && (
+
+
Expires in (Max 7 days)
+
+
+
this.updateExpireValue("days", 1)}
+ />
+ Days
+
+
+
+ this.updateExpireValue("days", -1)}
+ />
+
+
+
this.updateExpireValue("hours", 1)}
+ />
+ Hours
+
+
+
+ this.updateExpireValue("hours", -1)}
+ />
+
+
+
this.updateExpireValue("minutes", 1)}
+ />
+ Minutes
+
+
+
+ this.updateExpireValue("minutes", -1)}
+ />
+
+
+
+ )}
+
+
+
+ Copy Link
+
+
+ Cancel
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = (state, ownProps) => {
+ return {
+ object: ownProps.object,
+ shareObjectDetails: state.objects.shareObject
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ shareObject: (object, days, hours, minutes) =>
+ dispatch(objectsActions.shareObject(object, days, hours, minutes)),
+ hideShareObject: () => dispatch(objectsActions.hideShareObject()),
+ showCopyAlert: message =>
+ dispatch(alertActions.set({ type: "success", message: message }))
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(ShareObjectModal)
diff --git a/browser/app/js/objects/__tests__/DeleteObjectConfirmModal.test.js b/browser/app/js/objects/__tests__/DeleteObjectConfirmModal.test.js
new file mode 100644
index 000000000..29f1ff713
--- /dev/null
+++ b/browser/app/js/objects/__tests__/DeleteObjectConfirmModal.test.js
@@ -0,0 +1,45 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { DeleteObjectConfirmModal } from "../DeleteObjectConfirmModal"
+
+describe("DeleteObjectConfirmModal", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call deleteObject when Delete is clicked", () => {
+ const deleteObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("ConfirmModal").prop("okHandler")()
+ expect(deleteObject).toHaveBeenCalled()
+ })
+
+ it("should call hideDeleteConfirmModal when Cancel is clicked", () => {
+ const hideDeleteConfirmModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("ConfirmModal").prop("cancelHandler")()
+ expect(hideDeleteConfirmModal).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectActions.test.js b/browser/app/js/objects/__tests__/ObjectActions.test.js
new file mode 100644
index 000000000..576205d80
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectActions.test.js
@@ -0,0 +1,165 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectActions } from "../ObjectActions"
+
+describe("ObjectActions", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should show DeleteObjectConfirmModal when delete action is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .last()
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(wrapper.state("showDeleteConfirmation")).toBeTruthy()
+ expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(1)
+ })
+
+ it("should hide DeleteObjectConfirmModal when Cancel button is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .last()
+ .simulate("click", { preventDefault: jest.fn() })
+ wrapper.find("DeleteObjectConfirmModal").prop("hideDeleteConfirmModal")()
+ wrapper.update()
+ expect(wrapper.state("showDeleteConfirmation")).toBeFalsy()
+ expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(0)
+ })
+
+ it("should call deleteObject with object name", () => {
+ const deleteObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .last()
+ .simulate("click", { preventDefault: jest.fn() })
+ wrapper.find("DeleteObjectConfirmModal").prop("deleteObject")()
+ expect(deleteObject).toHaveBeenCalledWith("obj1")
+ })
+
+
+ it("should call downloadObject when single object is selected and download button is clicked", () => {
+ const downloadObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .at(1)
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(downloadObject).toHaveBeenCalled()
+ })
+
+
+ it("should show PreviewObjectModal when preview action is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .at(1)
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(wrapper.state("showPreview")).toBeTruthy()
+ expect(wrapper.find("PreviewObjectModal").length).toBe(1)
+ })
+
+ it("should hide PreviewObjectModal when cancel button is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .at(1)
+ .simulate("click", { preventDefault: jest.fn() })
+ wrapper.find("PreviewObjectModal").prop("hidePreviewModal")()
+ wrapper.update()
+ expect(wrapper.state("showPreview")).toBeFalsy()
+ expect(wrapper.find("PreviewObjectModal").length).toBe(0)
+ })
+ it("should not show PreviewObjectModal when preview action is clicked if object is not an image", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper
+ .find("a")
+ .length).toBe(3) // find only the other 2
+ })
+
+ it("should call shareObject with object and expiry", () => {
+ const shareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .first()
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(shareObject).toHaveBeenCalledWith("obj1", 5, 0, 0)
+ })
+
+ it("should render ShareObjectModal when an object is shared", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ShareObjectModal)").length).toBe(1)
+ })
+
+ it("shouldn't render ShareObjectModal when the names of the objects don't match", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ShareObjectModal)").length).toBe(0)
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectContainer.test.js b/browser/app/js/objects/__tests__/ObjectContainer.test.js
new file mode 100644
index 000000000..24bf5bfff
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectContainer.test.js
@@ -0,0 +1,49 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectContainer } from "../ObjectContainer"
+
+describe("ObjectContainer", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render ObjectItem with props", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("Connect(ObjectItem)").length).toBe(1)
+ expect(wrapper.find("Connect(ObjectItem)").prop("name")).toBe("test1.jpg")
+ })
+
+ it("should pass actions to ObjectItem", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ObjectItem)").prop("actionButtons")).not.toBe(
+ undefined
+ )
+ })
+
+ it("should pass empty actions to ObjectItem when checkedObjectCount is more than 0", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ObjectItem)").prop("actionButtons")).toBe(
+ undefined
+ )
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectItem.test.js b/browser/app/js/objects/__tests__/ObjectItem.test.js
new file mode 100644
index 000000000..4981d6482
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectItem.test.js
@@ -0,0 +1,76 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectItem } from "../ObjectItem"
+
+describe("ObjectItem", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render with content type", () => {
+ const wrapper = shallow( )
+ expect(wrapper.prop("data-type")).toBe("image")
+ })
+
+ it("shouldn't call onClick when the object isclicked", () => {
+ const onClick = jest.fn()
+ const checkObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("a").simulate("click", { preventDefault: jest.fn() })
+ expect(onClick).not.toHaveBeenCalled()
+ })
+
+ it("should call onClick when the folder isclicked", () => {
+ const onClick = jest.fn()
+ const wrapper = shallow( )
+ wrapper.find("a").simulate("click", { preventDefault: jest.fn() })
+ expect(onClick).toHaveBeenCalled()
+ })
+
+ it("should call checkObject when the object/prefix is checked", () => {
+ const checkObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("input[type='checkbox']").simulate("change")
+ expect(checkObject).toHaveBeenCalledWith("test")
+ })
+
+ it("should render checked checkbox", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("input[type='checkbox']").prop("checked")).toBeTruthy()
+ })
+
+ it("should call uncheckObject when the object/prefix is unchecked", () => {
+ const checkObject = jest.fn()
+ const uncheckObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("input[type='checkbox']").simulate("change")
+ expect(uncheckObject).toHaveBeenCalledWith("test")
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectsBulkActions.test.js b/browser/app/js/objects/__tests__/ObjectsBulkActions.test.js
new file mode 100644
index 000000000..680f9481f
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectsBulkActions.test.js
@@ -0,0 +1,100 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectsBulkActions } from "../ObjectsBulkActions"
+
+describe("ObjectsBulkActions", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should show actions when checkObjectsCount is more than 0", () => {
+ const wrapper = shallow( )
+ expect(wrapper.hasClass("list-actions-toggled")).toBeTruthy()
+ })
+
+ it("should call downloadObject when single object is selected and download button is clicked", () => {
+ const downloadObject = jest.fn()
+ const clearChecked = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#download-checked").simulate("click")
+ expect(downloadObject).toHaveBeenCalled()
+ })
+
+ it("should call downloadChecked when a folder is selected and download button is clicked", () => {
+ const downloadChecked = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#download-checked").simulate("click")
+ expect(downloadChecked).toHaveBeenCalled()
+ })
+
+ it("should call downloadChecked when multiple objects are selected and download button is clicked", () => {
+ const downloadChecked = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#download-checked").simulate("click")
+ expect(downloadChecked).toHaveBeenCalled()
+ })
+
+ it("should call clearChecked when close button is clicked", () => {
+ const clearChecked = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#close-bulk-actions").simulate("click")
+ expect(clearChecked).toHaveBeenCalled()
+ })
+
+ it("shoud show DeleteObjectConfirmModal when delete-checked button is clicked", () => {
+ const wrapper = shallow( )
+ wrapper.find("#delete-checked").simulate("click")
+ wrapper.update()
+ expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(1)
+ })
+
+ it("shoud call deleteChecked when Delete is clicked on confirmation modal", () => {
+ const deleteChecked = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("#delete-checked").simulate("click")
+ wrapper.update()
+ wrapper.find("DeleteObjectConfirmModal").prop("deleteObject")()
+ expect(deleteChecked).toHaveBeenCalled()
+ wrapper.update()
+ expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(0)
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectsHeader.test.js b/browser/app/js/objects/__tests__/ObjectsHeader.test.js
new file mode 100644
index 000000000..7361aeb9b
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectsHeader.test.js
@@ -0,0 +1,122 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectsHeader } from "../ObjectsHeader"
+import { SORT_ORDER_ASC, SORT_ORDER_DESC } from "../../constants"
+
+describe("ObjectsHeader", () => {
+ it("should render without crashing", () => {
+ const sortObjects = jest.fn()
+ shallow( )
+ })
+
+ it("should render the name column with asc class when objects are sorted by name asc", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper.find("#sort-by-name i").hasClass("fa-sort-alpha-down")
+ ).toBeTruthy()
+ })
+
+ it("should render the name column with desc class when objects are sorted by name desc", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper.find("#sort-by-name i").hasClass("fa-sort-alpha-down-alt")
+ ).toBeTruthy()
+ })
+
+ it("should render the size column with asc class when objects are sorted by size asc", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper.find("#sort-by-size i").hasClass("fa-sort-amount-down-alt")
+ ).toBeTruthy()
+ })
+
+ it("should render the size column with desc class when objects are sorted by size desc", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper.find("#sort-by-size i").hasClass("fa-sort-amount-down")
+ ).toBeTruthy()
+ })
+
+ it("should render the date column with asc class when objects are sorted by date asc", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper.find("#sort-by-last-modified i").hasClass("fa-sort-numeric-down")
+ ).toBeTruthy()
+ })
+
+ it("should render the date column with desc class when objects are sorted by date desc", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper.find("#sort-by-last-modified i").hasClass("fa-sort-numeric-down-alt")
+ ).toBeTruthy()
+ })
+
+ it("should call sortObjects when a column is clicked", () => {
+ const sortObjects = jest.fn()
+ const wrapper = shallow( )
+ wrapper.find("#sort-by-name").simulate("click")
+ expect(sortObjects).toHaveBeenCalledWith("name")
+ wrapper.find("#sort-by-size").simulate("click")
+ expect(sortObjects).toHaveBeenCalledWith("size")
+ wrapper.find("#sort-by-last-modified").simulate("click")
+ expect(sortObjects).toHaveBeenCalledWith("last-modified")
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectsList.test.js b/browser/app/js/objects/__tests__/ObjectsList.test.js
new file mode 100644
index 000000000..1d390534d
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectsList.test.js
@@ -0,0 +1,39 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectsList } from "../ObjectsList"
+
+describe("ObjectsList", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render ObjectContainer for every object", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ObjectContainer)").length).toBe(2)
+ })
+
+ it("should render PrefixContainer for every prefix", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(PrefixContainer)").length).toBe(2)
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectsListContainer.test.js b/browser/app/js/objects/__tests__/ObjectsListContainer.test.js
new file mode 100644
index 000000000..d1c396f25
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectsListContainer.test.js
@@ -0,0 +1,49 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectsListContainer } from "../ObjectsListContainer"
+
+describe("ObjectsList", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render ObjectsList with objects", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("ObjectsList").length).toBe(1)
+ expect(wrapper.find("ObjectsList").prop("objects")).toEqual([
+ { name: "test1.jpg" },
+ { name: "test2.jpg" }
+ ])
+ })
+
+ it("should show the loading indicator when the objects are being loaded", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find(".loading").exists()).toBeTruthy()
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectsSearch.test.js b/browser/app/js/objects/__tests__/ObjectsSearch.test.js
new file mode 100644
index 000000000..d4f8818ef
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectsSearch.test.js
@@ -0,0 +1,32 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectsSearch } from "../ObjectsSearch"
+
+describe("ObjectsSearch", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call onChange with search text", () => {
+ const onChange = jest.fn()
+ const wrapper = shallow( )
+ wrapper.find("input").simulate("change", { target: { value: "test" } })
+ expect(onChange).toHaveBeenCalledWith("test")
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ObjectsSection.test.js b/browser/app/js/objects/__tests__/ObjectsSection.test.js
new file mode 100644
index 000000000..d824e419b
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ObjectsSection.test.js
@@ -0,0 +1,25 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { ObjectsSection } from "../ObjectsSection"
+
+describe("ObjectsSection", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+})
diff --git a/browser/app/js/objects/__tests__/Path.test.js b/browser/app/js/objects/__tests__/Path.test.js
new file mode 100644
index 000000000..08f44cc34
--- /dev/null
+++ b/browser/app/js/objects/__tests__/Path.test.js
@@ -0,0 +1,143 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { Path } from "../Path"
+
+describe("Path", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render only bucket if there is no prefix", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("span").length).toBe(1)
+ expect(
+ wrapper
+ .find("span")
+ .at(0)
+ .text()
+ ).toBe("test1")
+ })
+
+ it("should render bucket and prefix", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("span").length).toBe(3)
+ expect(
+ wrapper
+ .find("span")
+ .at(0)
+ .text()
+ ).toBe("test1")
+ expect(
+ wrapper
+ .find("span")
+ .at(1)
+ .text()
+ ).toBe("a")
+ expect(
+ wrapper
+ .find("span")
+ .at(2)
+ .text()
+ ).toBe("b")
+ })
+
+ it("should call selectPrefix when a prefix part is clicked", () => {
+ const selectPrefix = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .at(2)
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(selectPrefix).toHaveBeenCalledWith("a/b/")
+ })
+
+ it("should switch to input mode when edit icon is clicked", () => {
+ const wrapper = mount( )
+ wrapper.find(".fe-edit").simulate("click", { preventDefault: jest.fn() })
+ expect(wrapper.find(".form-control--path").exists()).toBeTruthy()
+ })
+
+ it("should navigate to prefix when user types path for existing bucket", () => {
+ const selectBucket = jest.fn()
+ const buckets = ["test1", "test2"]
+ const wrapper = mount(
+
+ )
+ wrapper.setState({
+ isEditing: true,
+ path: "test2/dir1/"
+ })
+ wrapper.find("form").simulate("submit", { preventDefault: jest.fn() })
+ expect(selectBucket).toHaveBeenCalledWith("test2", "dir1/")
+ })
+
+ it("should create a new bucket if bucket typed in path doesn't exist", () => {
+ const makeBucket = jest.fn()
+ const buckets = ["test1", "test2"]
+ const wrapper = mount(
+
+ )
+ wrapper.setState({
+ isEditing: true,
+ path: "test3/dir1/"
+ })
+ wrapper.find("form").simulate("submit", { preventDefault: jest.fn() })
+ expect(makeBucket).toHaveBeenCalledWith("test3")
+ })
+
+ it("should not make or select bucket if path doesn't point to bucket", () => {
+ const makeBucket = jest.fn()
+ const selectBucket = jest.fn()
+ const buckets = ["test1", "test2"]
+ const wrapper = mount(
+
+ )
+ wrapper.setState({
+ isEditing: true,
+ path: "//dir1/dir2/"
+ })
+ wrapper.find("form").simulate("submit", { preventDefault: jest.fn() })
+ expect(makeBucket).not.toHaveBeenCalled()
+ expect(selectBucket).not.toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/objects/__tests__/PrefixActions.test.js b/browser/app/js/objects/__tests__/PrefixActions.test.js
new file mode 100644
index 000000000..86b04d3d5
--- /dev/null
+++ b/browser/app/js/objects/__tests__/PrefixActions.test.js
@@ -0,0 +1,84 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { PrefixActions } from "../PrefixActions"
+
+describe("PrefixActions", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should show DeleteObjectConfirmModal when delete action is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .last()
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(wrapper.state("showDeleteConfirmation")).toBeTruthy()
+ expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(1)
+ })
+
+ it("should hide DeleteObjectConfirmModal when Cancel button is clicked", () => {
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .last()
+ .simulate("click", { preventDefault: jest.fn() })
+ wrapper.find("DeleteObjectConfirmModal").prop("hideDeleteConfirmModal")()
+ wrapper.update()
+ expect(wrapper.state("showDeleteConfirmation")).toBeFalsy()
+ expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(0)
+ })
+
+ it("should call deleteObject with object name", () => {
+ const deleteObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .last()
+ .simulate("click", { preventDefault: jest.fn() })
+ wrapper.find("DeleteObjectConfirmModal").prop("deleteObject")()
+ expect(deleteObject).toHaveBeenCalledWith("abc/")
+ })
+
+
+ it("should call downloadPrefix when single object is selected and download button is clicked", () => {
+ const downloadPrefix = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("a")
+ .first()
+ .simulate("click", { preventDefault: jest.fn() })
+ expect(downloadPrefix).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/objects/__tests__/PrefixContainer.test.js b/browser/app/js/objects/__tests__/PrefixContainer.test.js
new file mode 100644
index 000000000..a2ac8e96d
--- /dev/null
+++ b/browser/app/js/objects/__tests__/PrefixContainer.test.js
@@ -0,0 +1,62 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { PrefixContainer } from "../PrefixContainer"
+
+describe("PrefixContainer", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render ObjectItem with props", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("Connect(ObjectItem)").length).toBe(1)
+ expect(wrapper.find("Connect(ObjectItem)").prop("name")).toBe("abc/")
+ })
+
+ it("should call selectPrefix when the prefix is clicked", () => {
+ const selectPrefix = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("Connect(ObjectItem)").prop("onClick")()
+ expect(selectPrefix).toHaveBeenCalledWith("xyz/abc/")
+ })
+
+ it("should pass actions to ObjectItem", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ObjectItem)").prop("actionButtons")).not.toBe(
+ undefined
+ )
+ })
+
+ it("should pass empty actions to ObjectItem when checkedObjectCount is more than 0", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("Connect(ObjectItem)").prop("actionButtons")).toBe(
+ undefined
+ )
+ })
+})
diff --git a/browser/app/js/objects/__tests__/ShareObjectModal.test.js b/browser/app/js/objects/__tests__/ShareObjectModal.test.js
new file mode 100644
index 000000000..e975cbde3
--- /dev/null
+++ b/browser/app/js/objects/__tests__/ShareObjectModal.test.js
@@ -0,0 +1,211 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow, mount } from "enzyme"
+import { ShareObjectModal } from "../ShareObjectModal"
+import {
+ SHARE_OBJECT_EXPIRY_DAYS,
+ SHARE_OBJECT_EXPIRY_HOURS,
+ SHARE_OBJECT_EXPIRY_MINUTES
+} from "../../constants"
+
+jest.mock("../../web", () => ({
+ LoggedIn: jest.fn(() => {
+ return true
+ })
+}))
+
+describe("ShareObjectModal", () => {
+ it("should render without crashing", () => {
+ shallow(
+
+ )
+ })
+
+ it("shoud call hideShareObject when Cancel is clicked", () => {
+ const hideShareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper
+ .find("button")
+ .last()
+ .simulate("click")
+ expect(hideShareObject).toHaveBeenCalled()
+ })
+
+ it("should show the shareable link", () => {
+ const wrapper = shallow(
+
+ )
+ expect(
+ wrapper
+ .find("input")
+ .first()
+ .prop("value")
+ ).toBe(`${window.location.protocol}//test`)
+ })
+
+ it("should call showCopyAlert and hideShareObject when Copy button is clicked", () => {
+ const hideShareObject = jest.fn()
+ const showCopyAlert = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("CopyToClipboard").prop("onCopy")()
+ expect(showCopyAlert).toHaveBeenCalledWith("Link copied to clipboard!")
+ expect(hideShareObject).toHaveBeenCalled()
+ })
+
+ describe("Update expiry values", () => {
+ const props = {
+ object: { name: "obj1" },
+ shareObjectDetails: { show: true, object: "obj1", url: "test", showExpiryDate: true }
+ }
+
+ it("should not show expiry values if shared with public link", () => {
+ const shareObjectDetails = { show: true, object: "obj1", url: "test", showExpiryDate: false }
+ const wrapper = shallow( )
+ expect(wrapper.find('.set-expire').exists()).toEqual(false)
+ })
+
+ it("should have default expiry values", () => {
+ const wrapper = shallow( )
+ expect(wrapper.state("expiry")).toEqual({
+ days: SHARE_OBJECT_EXPIRY_DAYS,
+ hours: SHARE_OBJECT_EXPIRY_HOURS,
+ minutes: SHARE_OBJECT_EXPIRY_MINUTES
+ })
+ })
+
+ it("should not allow any increments when days is already max", () => {
+ const shareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.setState({
+ expiry: {
+ days: 7,
+ hours: 0,
+ minutes: 0
+ }
+ })
+ wrapper.find("#increase-hours").simulate("click")
+ expect(wrapper.state("expiry")).toEqual({
+ days: 7,
+ hours: 0,
+ minutes: 0
+ })
+ expect(shareObject).not.toHaveBeenCalled()
+ })
+
+ it("should not allow expiry values less than minimum value", () => {
+ const shareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.setState({
+ expiry: {
+ days: 5,
+ hours: 0,
+ minutes: 0
+ }
+ })
+ wrapper.find("#decrease-hours").simulate("click")
+ expect(wrapper.state("expiry").hours).toBe(0)
+ wrapper.find("#decrease-minutes").simulate("click")
+ expect(wrapper.state("expiry").minutes).toBe(0)
+ expect(shareObject).not.toHaveBeenCalled()
+ })
+
+ it("should not allow expiry values more than maximum value", () => {
+ const shareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.setState({
+ expiry: {
+ days: 1,
+ hours: 23,
+ minutes: 59
+ }
+ })
+ wrapper.find("#increase-hours").simulate("click")
+ expect(wrapper.state("expiry").hours).toBe(23)
+ wrapper.find("#increase-minutes").simulate("click")
+ expect(wrapper.state("expiry").minutes).toBe(59)
+ expect(shareObject).not.toHaveBeenCalled()
+ })
+
+ it("should set hours and minutes to 0 when days reaches max", () => {
+ const shareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.setState({
+ expiry: {
+ days: 6,
+ hours: 5,
+ minutes: 30
+ }
+ })
+ wrapper.find("#increase-days").simulate("click")
+ expect(wrapper.state("expiry")).toEqual({
+ days: 7,
+ hours: 0,
+ minutes: 0
+ })
+ expect(shareObject).toHaveBeenCalled()
+ })
+
+ it("should set days to MAX when all of them becomes 0", () => {
+ const shareObject = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.setState({
+ expiry: {
+ days: 0,
+ hours: 1,
+ minutes: 0
+ }
+ })
+ wrapper.find("#decrease-hours").simulate("click")
+ expect(wrapper.state("expiry")).toEqual({
+ days: 7,
+ hours: 0,
+ minutes: 0
+ })
+ expect(shareObject).toHaveBeenCalledWith("obj1", 7, 0, 0)
+ })
+ })
+})
diff --git a/browser/app/js/objects/__tests__/actions.test.js b/browser/app/js/objects/__tests__/actions.test.js
new file mode 100644
index 000000000..b549ebf6c
--- /dev/null
+++ b/browser/app/js/objects/__tests__/actions.test.js
@@ -0,0 +1,584 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import configureStore from "redux-mock-store"
+import thunk from "redux-thunk"
+import * as actionsObjects from "../actions"
+import * as alertActions from "../../alert/actions"
+import {
+ minioBrowserPrefix,
+ SORT_BY_NAME,
+ SORT_ORDER_ASC,
+ SORT_BY_LAST_MODIFIED,
+ SORT_ORDER_DESC
+} from "../../constants"
+import history from "../../history"
+
+jest.mock("../../web", () => ({
+ LoggedIn: jest
+ .fn(() => true)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(false)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(true)
+ .mockReturnValueOnce(false),
+ ListObjects: jest.fn(({ bucketName }) => {
+ if (bucketName === "test-deny") {
+ return Promise.reject({
+ message: "listobjects is denied"
+ })
+ } else {
+ return Promise.resolve({
+ objects: [{ name: "test1" }, { name: "test2" }],
+ writable: false
+ })
+ }
+ }),
+ RemoveObject: jest.fn(({ bucketName, objects }) => {
+ if (!bucketName) {
+ return Promise.reject({ message: "Invalid bucket" })
+ }
+ return Promise.resolve({})
+ }),
+ PresignedGet: jest.fn(({ bucket, object }) => {
+ if (!bucket) {
+ return Promise.reject({ message: "Invalid bucket" })
+ }
+ return Promise.resolve({ url: "https://test.com/bk1/pre1/b.txt" })
+ }),
+ CreateURLToken: jest
+ .fn()
+ .mockImplementationOnce(() => {
+ return Promise.resolve({ token: "test" })
+ })
+ .mockImplementationOnce(() => {
+ return Promise.reject({ message: "Error in creating token" })
+ })
+ .mockImplementationOnce(() => {
+ return Promise.resolve({ token: "test" })
+ })
+ .mockImplementationOnce(() => {
+ return Promise.resolve({ token: "test" })
+ }),
+ GetBucketPolicy: jest.fn(({ bucketName, prefix }) => {
+ if (!bucketName) {
+ return Promise.reject({ message: "Invalid bucket" })
+ }
+ if (bucketName === 'test-public') return Promise.resolve({ policy: 'readonly' })
+ return Promise.resolve({})
+ })
+}))
+
+const middlewares = [thunk]
+const mockStore = configureStore(middlewares)
+
+describe("Objects actions", () => {
+ it("creates objects/SET_LIST action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/SET_LIST",
+ objects: [{ name: "test1" }, { name: "test2" }]
+ }
+ ]
+ store.dispatch(
+ actionsObjects.setList([{ name: "test1" }, { name: "test2" }])
+ )
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/SET_SORT_BY action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/SET_SORT_BY",
+ sortBy: SORT_BY_NAME
+ }
+ ]
+ store.dispatch(actionsObjects.setSortBy(SORT_BY_NAME))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/SET_SORT_ORDER action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/SET_SORT_ORDER",
+ sortOrder: SORT_ORDER_ASC
+ }
+ ]
+ store.dispatch(actionsObjects.setSortOrder(SORT_ORDER_ASC))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/SET_LIST after fetching the objects", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "" }
+ })
+ const expectedActions = [
+ {
+ type: "objects/RESET_LIST"
+ },
+ { listLoading: true, type: "objects/SET_LIST_LOADING" },
+ {
+ type: "objects/SET_SORT_BY",
+ sortBy: SORT_BY_LAST_MODIFIED
+ },
+ {
+ type: "objects/SET_SORT_ORDER",
+ sortOrder: SORT_ORDER_DESC
+ },
+ {
+ type: "objects/SET_LIST",
+ objects: [{ name: "test2" }, { name: "test1" }]
+ },
+ {
+ type: "objects/SET_PREFIX_WRITABLE",
+ prefixWritable: false
+ },
+ { listLoading: false, type: "objects/SET_LIST_LOADING" }
+ ]
+ return store.dispatch(actionsObjects.fetchObjects()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates objects/RESET_LIST after failing to fetch the objects from bucket with ListObjects denied for LoggedIn users", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "test-deny" },
+ objects: { currentPrefix: "" }
+ })
+ const expectedActions = [
+ {
+ type: "objects/RESET_LIST"
+ },
+ { listLoading: true, type: "objects/SET_LIST_LOADING" },
+ {
+ type: "alert/SET",
+ alert: {
+ type: "danger",
+ message: "listobjects is denied",
+ id: alertActions.alertId,
+ autoClear: true
+ }
+ },
+ {
+ type: "objects/RESET_LIST"
+ },
+ { listLoading: false, type: "objects/SET_LIST_LOADING" }
+ ]
+ return store.dispatch(actionsObjects.fetchObjects()).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("redirect to login after failing to fetch the objects from bucket for non-LoggedIn users", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "test-deny" },
+ objects: { currentPrefix: "" }
+ })
+ return store.dispatch(actionsObjects.fetchObjects()).then(() => {
+ expect(history.location.pathname.endsWith("/login")).toBeTruthy()
+ })
+ })
+
+ it("creates objects/SET_SORT_BY and objects/SET_SORT_ORDER when sortObjects is called", () => {
+ const store = mockStore({
+ objects: {
+ list: [],
+ sortBy: "",
+ sortOrder: SORT_ORDER_ASC
+ }
+ })
+ const expectedActions = [
+ {
+ type: "objects/SET_SORT_BY",
+ sortBy: SORT_BY_NAME
+ },
+ {
+ type: "objects/SET_SORT_ORDER",
+ sortOrder: SORT_ORDER_ASC
+ },
+ {
+ type: "objects/SET_LIST",
+ objects: []
+ }
+ ]
+ store.dispatch(actionsObjects.sortObjects(SORT_BY_NAME))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("should update browser url and creates objects/SET_CURRENT_PREFIX and objects/CHECKED_LIST_RESET actions when selectPrefix is called", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "test" },
+ objects: { currentPrefix: "" }
+ })
+ const expectedActions = [
+ { type: "objects/SET_CURRENT_PREFIX", prefix: "abc/" },
+ {
+ type: "objects/RESET_LIST"
+ },
+ { listLoading: true, type: "objects/SET_LIST_LOADING" },
+ { type: "objects/CHECKED_LIST_RESET" }
+ ]
+ store.dispatch(actionsObjects.selectPrefix("abc/"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ expect(window.location.pathname.endsWith("/test/abc/")).toBeTruthy()
+ })
+
+ it("create objects/SET_PREFIX_WRITABLE action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ { type: "objects/SET_PREFIX_WRITABLE", prefixWritable: true }
+ ]
+ store.dispatch(actionsObjects.setPrefixWritable(true))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/REMOVE action", () => {
+ const store = mockStore()
+ const expectedActions = [{ type: "objects/REMOVE", object: "obj1" }]
+ store.dispatch(actionsObjects.removeObject("obj1"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/REMOVE action when object is deleted", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "test" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ const expectedActions = [{ type: "objects/REMOVE", object: "obj1" }]
+ store.dispatch(actionsObjects.deleteObject("obj1")).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates alert/SET action when invalid bucket is provided", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ const expectedActions = [
+ {
+ type: "alert/SET",
+ alert: {
+ type: "danger",
+ message: "Invalid bucket",
+ id: alertActions.alertId
+ }
+ }
+ ]
+ return store.dispatch(actionsObjects.deleteObject("obj1")).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates objects/SET_SHARE_OBJECT action for showShareObject", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/SET_SHARE_OBJECT",
+ show: true,
+ object: "b.txt",
+ url: "test",
+ showExpiryDate: true
+ }
+ ]
+ store.dispatch(actionsObjects.showShareObject("b.txt", "test"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/SET_SHARE_OBJECT action for hideShareObject", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/SET_SHARE_OBJECT",
+ show: false,
+ object: "",
+ url: ""
+ }
+ ]
+ store.dispatch(actionsObjects.hideShareObject())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/SET_SHARE_OBJECT when object is shared", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "pre1/" },
+ browser: { serverInfo: {} },
+ })
+ const expectedActions = [
+ {
+ type: "objects/SET_SHARE_OBJECT",
+ show: true,
+ object: "a.txt",
+ url: "https://test.com/bk1/pre1/b.txt",
+ showExpiryDate: true
+ },
+ {
+ type: "alert/SET",
+ alert: {
+ type: "success",
+ message: "Object shared. Expires in 1 days 0 hours 0 minutes",
+ id: alertActions.alertId
+ }
+ }
+ ]
+ return store
+ .dispatch(actionsObjects.shareObject("a.txt", 1, 0, 0))
+ .then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates objects/SET_SHARE_OBJECT when object is shared with public link", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "test-public" },
+ objects: { currentPrefix: "pre1/" },
+ browser: { serverInfo: { info: { domains: ['public.com'] }} },
+ })
+ const expectedActions = [
+ {
+ type: "objects/SET_SHARE_OBJECT",
+ show: true,
+ object: "a.txt",
+ url: "public.com/test-public/pre1/a.txt",
+ showExpiryDate: false
+ },
+ {
+ type: "alert/SET",
+ alert: {
+ type: "success",
+ message: "Object shared.",
+ id: alertActions.alertId
+ }
+ }
+ ]
+ return store
+ .dispatch(actionsObjects.shareObject("a.txt", 1, 0, 0))
+ .then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ it("creates alert/SET when shareObject is failed", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "" },
+ objects: { currentPrefix: "pre1/" },
+ browser: { serverInfo: {} },
+ })
+ const expectedActions = [
+ {
+ type: "alert/SET",
+ alert: {
+ type: "danger",
+ message: "Invalid bucket",
+ id: alertActions.alertId
+ }
+ }
+ ]
+ return store
+ .dispatch(actionsObjects.shareObject("a.txt", 1, 0, 0))
+ .then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+
+ describe("Download object", () => {
+ it("should download the object non-LoggedIn users", () => {
+ const setLocation = jest.fn()
+ Object.defineProperty(window, "location", {
+ set(url) {
+ setLocation(url)
+ },
+ get() {
+ return {
+ origin: "http://localhost:8080"
+ }
+ }
+ })
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ store.dispatch(actionsObjects.downloadObject("obj1"))
+ const url = `${
+ window.location.origin
+ }${minioBrowserPrefix}/download/bk1/${encodeURI("pre1/obj1")}?token=`
+ expect(setLocation).toHaveBeenCalledWith(url)
+ })
+
+ it("should download the object for LoggedIn users", () => {
+ const setLocation = jest.fn()
+ Object.defineProperty(window, "location", {
+ set(url) {
+ setLocation(url)
+ },
+ get() {
+ return {
+ origin: "http://localhost:8080"
+ }
+ }
+ })
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ return store.dispatch(actionsObjects.downloadObject("obj1")).then(() => {
+ const url = `${
+ window.location.origin
+ }${minioBrowserPrefix}/download/bk1/${encodeURI(
+ "pre1/obj1"
+ )}?token=test`
+ expect(setLocation).toHaveBeenCalledWith(url)
+ })
+ })
+
+ it("create alert/SET action when CreateUrlToken fails", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ const expectedActions = [
+ {
+ type: "alert/SET",
+ alert: {
+ type: "danger",
+ message: "Error in creating token",
+ id: alertActions.alertId
+ }
+ }
+ ]
+ return store.dispatch(actionsObjects.downloadObject("obj1")).then(() => {
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+ })
+ })
+
+ it("should download prefix", () => {
+ const open = jest.fn()
+ const send = jest.fn()
+ const xhrMockClass = () => ({
+ open: open,
+ send: send
+ })
+ window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass)
+
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ return store.dispatch(actionsObjects.downloadPrefix("pre2/")).then(() => {
+ const requestUrl = `${
+ location.origin
+ }${minioBrowserPrefix}/zip?token=test`
+ expect(open).toHaveBeenCalledWith("POST", requestUrl, true)
+ expect(send).toHaveBeenCalledWith(
+ JSON.stringify({
+ bucketName: "bk1",
+ prefix: "pre1/",
+ objects: ["pre2/"]
+ })
+ )
+ })
+ })
+
+ it("creates objects/CHECKED_LIST_ADD action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/CHECKED_LIST_ADD",
+ object: "obj1"
+ }
+ ]
+ store.dispatch(actionsObjects.checkObject("obj1"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/CHECKED_LIST_REMOVE action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/CHECKED_LIST_REMOVE",
+ object: "obj1"
+ }
+ ]
+ store.dispatch(actionsObjects.uncheckObject("obj1"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates objects/CHECKED_LIST_RESET action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "objects/CHECKED_LIST_RESET"
+ }
+ ]
+ store.dispatch(actionsObjects.resetCheckedList())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("should download checked objects", () => {
+ const open = jest.fn()
+ const send = jest.fn()
+ const xhrMockClass = () => ({
+ open: open,
+ send: send
+ })
+ window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass)
+
+ const store = mockStore({
+ buckets: { currentBucket: "bk1" },
+ objects: { currentPrefix: "pre1/", checkedList: ["obj1"] }
+ })
+ return store.dispatch(actionsObjects.downloadCheckedObjects()).then(() => {
+ const requestUrl = `${
+ location.origin
+ }${minioBrowserPrefix}/zip?token=test`
+ expect(open).toHaveBeenCalledWith("POST", requestUrl, true)
+ expect(send).toHaveBeenCalledWith(
+ JSON.stringify({
+ bucketName: "bk1",
+ prefix: "pre1/",
+ objects: ["obj1"]
+ })
+ )
+ })
+ })
+})
diff --git a/browser/app/js/objects/__tests__/reducer.test.js b/browser/app/js/objects/__tests__/reducer.test.js
new file mode 100644
index 000000000..dd3ad5e68
--- /dev/null
+++ b/browser/app/js/objects/__tests__/reducer.test.js
@@ -0,0 +1,148 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import reducer from "../reducer"
+import * as actions from "../actions"
+import { SORT_ORDER_ASC, SORT_BY_NAME } from "../../constants"
+
+describe("objects reducer", () => {
+ it("should return the initial state", () => {
+ const initialState = reducer(undefined, {})
+ expect(initialState).toEqual({
+ list: [],
+ filter: "",
+ listLoading: false,
+ sortBy: "",
+ sortOrder: SORT_ORDER_ASC,
+ currentPrefix: "",
+ prefixWritable: false,
+ shareObject: {
+ show: false,
+ object: "",
+ url: ""
+ },
+ checkedList: []
+ })
+ })
+
+ it("should handle SET_LIST", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_LIST,
+ objects: [{ name: "obj1" }, { name: "obj2" }]
+ })
+ expect(newState.list).toEqual([{ name: "obj1" }, { name: "obj2" }])
+ })
+
+ it("should handle REMOVE", () => {
+ const newState = reducer(
+ { list: [{ name: "obj1" }, { name: "obj2" }] },
+ {
+ type: actions.REMOVE,
+ object: "obj1"
+ }
+ )
+ expect(newState.list).toEqual([{ name: "obj2" }])
+ })
+
+ it("should handle REMOVE with non-existent object", () => {
+ const newState = reducer(
+ { list: [{ name: "obj1" }, { name: "obj2" }] },
+ {
+ type: actions.REMOVE,
+ object: "obj3"
+ }
+ )
+ expect(newState.list).toEqual([{ name: "obj1" }, { name: "obj2" }])
+ })
+
+ it("should handle SET_SORT_BY", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_SORT_BY,
+ sortBy: SORT_BY_NAME
+ })
+ expect(newState.sortBy).toEqual(SORT_BY_NAME)
+ })
+
+ it("should handle SET_SORT_ORDER", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_SORT_ORDER,
+ sortOrder: SORT_ORDER_ASC
+ })
+ expect(newState.sortOrder).toEqual(SORT_ORDER_ASC)
+ })
+
+ it("should handle SET_CURRENT_PREFIX", () => {
+ const newState = reducer(
+ { currentPrefix: "test1/" },
+ {
+ type: actions.SET_CURRENT_PREFIX,
+ prefix: "test2/"
+ }
+ )
+ expect(newState.currentPrefix).toEqual("test2/")
+ })
+
+ it("should handle SET_PREFIX_WRITABLE", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_PREFIX_WRITABLE,
+ prefixWritable: true
+ })
+ expect(newState.prefixWritable).toBeTruthy()
+ })
+
+ it("should handle SET_SHARE_OBJECT", () => {
+ const newState = reducer(undefined, {
+ type: actions.SET_SHARE_OBJECT,
+ show: true,
+ object: "a.txt",
+ url: "test"
+ })
+ expect(newState.shareObject).toEqual({
+ show: true,
+ object: "a.txt",
+ url: "test"
+ })
+ })
+
+ it("should handle CHECKED_LIST_ADD", () => {
+ const newState = reducer(undefined, {
+ type: actions.CHECKED_LIST_ADD,
+ object: "obj1"
+ })
+ expect(newState.checkedList).toEqual(["obj1"])
+ })
+
+ it("should handle SELECTED_LIST_REMOVE", () => {
+ const newState = reducer(
+ { checkedList: ["obj1", "obj2"] },
+ {
+ type: actions.CHECKED_LIST_REMOVE,
+ object: "obj1"
+ }
+ )
+ expect(newState.checkedList).toEqual(["obj2"])
+ })
+
+ it("should handle CHECKED_LIST_RESET", () => {
+ const newState = reducer(
+ { checkedList: ["obj1", "obj2"] },
+ {
+ type: actions.CHECKED_LIST_RESET
+ }
+ )
+ expect(newState.checkedList).toEqual([])
+ })
+})
diff --git a/browser/app/js/objects/actions.js b/browser/app/js/objects/actions.js
new file mode 100644
index 000000000..d7caddcd8
--- /dev/null
+++ b/browser/app/js/objects/actions.js
@@ -0,0 +1,464 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import web from "../web"
+import history from "../history"
+import {
+ sortObjectsByName,
+ sortObjectsBySize,
+ sortObjectsByDate,
+} from "../utils"
+import { getCurrentBucket } from "../buckets/selectors"
+import { getCurrentPrefix, getCheckedList } from "./selectors"
+import * as alertActions from "../alert/actions"
+import {
+ minioBrowserPrefix,
+ SORT_BY_NAME,
+ SORT_BY_SIZE,
+ SORT_BY_LAST_MODIFIED,
+ SORT_ORDER_ASC,
+ SORT_ORDER_DESC,
+} from "../constants"
+import { getServerInfo, hasServerPublicDomain } from '../browser/selectors'
+
+export const SET_LIST = "objects/SET_LIST"
+export const RESET_LIST = "objects/RESET_LIST"
+export const SET_FILTER = "objects/SET_FILTER"
+export const APPEND_LIST = "objects/APPEND_LIST"
+export const REMOVE = "objects/REMOVE"
+export const SET_SORT_BY = "objects/SET_SORT_BY"
+export const SET_SORT_ORDER = "objects/SET_SORT_ORDER"
+export const SET_CURRENT_PREFIX = "objects/SET_CURRENT_PREFIX"
+export const SET_PREFIX_WRITABLE = "objects/SET_PREFIX_WRITABLE"
+export const SET_SHARE_OBJECT = "objects/SET_SHARE_OBJECT"
+export const CHECKED_LIST_ADD = "objects/CHECKED_LIST_ADD"
+export const CHECKED_LIST_REMOVE = "objects/CHECKED_LIST_REMOVE"
+export const CHECKED_LIST_RESET = "objects/CHECKED_LIST_RESET"
+export const SET_LIST_LOADING = "objects/SET_LIST_LOADING"
+
+export const setList = (objects) => ({
+ type: SET_LIST,
+ objects,
+})
+
+export const resetList = () => ({
+ type: RESET_LIST,
+})
+
+export const setFilter = filter => {
+ return {
+ type: SET_FILTER,
+ filter
+ }
+}
+
+export const setListLoading = (listLoading) => ({
+ type: SET_LIST_LOADING,
+ listLoading,
+})
+
+export const fetchObjects = () => {
+ return function (dispatch, getState) {
+ dispatch(resetList())
+ const {
+ buckets: { currentBucket },
+ objects: { currentPrefix },
+ } = getState()
+ if (currentBucket) {
+ dispatch(setListLoading(true))
+ return web
+ .ListObjects({
+ bucketName: currentBucket,
+ prefix: currentPrefix,
+ })
+ .then((res) => {
+ // we need to check if the bucket name and prefix are the same as
+ // when the request was made before updating the displayed objects
+ if (
+ currentBucket === getCurrentBucket(getState()) &&
+ currentPrefix === getCurrentPrefix(getState())
+ ) {
+ let objects = []
+ if (res.objects) {
+ objects = res.objects.map((object) => {
+ return {
+ ...object,
+ name: object.name.replace(currentPrefix, ""),
+ }
+ })
+ }
+
+ const sortBy = SORT_BY_LAST_MODIFIED
+ const sortOrder = SORT_ORDER_DESC
+ dispatch(setSortBy(sortBy))
+ dispatch(setSortOrder(sortOrder))
+ const sortedList = sortObjectsList(objects, sortBy, sortOrder)
+ dispatch(setList(sortedList))
+
+ dispatch(setPrefixWritable(res.writable))
+ dispatch(setListLoading(false))
+ }
+ })
+ .catch((err) => {
+ if (web.LoggedIn()) {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message,
+ autoClear: true,
+ })
+ )
+ dispatch(resetList())
+ } else {
+ history.push("/login")
+ }
+ dispatch(setListLoading(false))
+ })
+ }
+ }
+}
+
+export const sortObjects = (sortBy) => {
+ return function (dispatch, getState) {
+ const { objects } = getState()
+ let sortOrder = SORT_ORDER_ASC
+ // Reverse sort order if the list is already sorted on same field
+ if (objects.sortBy === sortBy && objects.sortOrder === SORT_ORDER_ASC) {
+ sortOrder = SORT_ORDER_DESC
+ }
+ dispatch(setSortBy(sortBy))
+ dispatch(setSortOrder(sortOrder))
+ const sortedList = sortObjectsList(objects.list, sortBy, sortOrder)
+ dispatch(setList(sortedList))
+ }
+}
+
+const sortObjectsList = (list, sortBy, sortOrder) => {
+ switch (sortBy) {
+ case SORT_BY_NAME:
+ return sortObjectsByName(list, sortOrder)
+ case SORT_BY_SIZE:
+ return sortObjectsBySize(list, sortOrder)
+ case SORT_BY_LAST_MODIFIED:
+ return sortObjectsByDate(list, sortOrder)
+ }
+}
+
+export const setSortBy = (sortBy) => ({
+ type: SET_SORT_BY,
+ sortBy,
+})
+
+export const setSortOrder = (sortOrder) => ({
+ type: SET_SORT_ORDER,
+ sortOrder,
+})
+
+export const selectPrefix = (prefix) => {
+ return function (dispatch, getState) {
+ dispatch(setCurrentPrefix(prefix))
+ dispatch(fetchObjects())
+ dispatch(resetCheckedList())
+ const currentBucket = getCurrentBucket(getState())
+ history.replace(`/${currentBucket}/${prefix}`)
+ }
+}
+
+export const setCurrentPrefix = (prefix) => {
+ return {
+ type: SET_CURRENT_PREFIX,
+ prefix,
+ }
+}
+
+export const setPrefixWritable = (prefixWritable) => ({
+ type: SET_PREFIX_WRITABLE,
+ prefixWritable,
+})
+
+export const deleteObject = (object) => {
+ return function (dispatch, getState) {
+ const currentBucket = getCurrentBucket(getState())
+ const currentPrefix = getCurrentPrefix(getState())
+ const objectName = `${currentPrefix}${object}`
+ return web
+ .RemoveObject({
+ bucketName: currentBucket,
+ objects: [objectName],
+ })
+ .then(() => {
+ dispatch(removeObject(object))
+ })
+ .catch((e) => {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: e.message,
+ })
+ )
+ })
+ }
+}
+
+export const removeObject = (object) => ({
+ type: REMOVE,
+ object,
+})
+
+export const deleteCheckedObjects = () => {
+ return function (dispatch, getState) {
+ const checkedObjects = getCheckedList(getState())
+ for (let i = 0; i < checkedObjects.length; i++) {
+ dispatch(deleteObject(checkedObjects[i]))
+ }
+ dispatch(resetCheckedList())
+ }
+}
+
+export const shareObject = (object, days, hours, minutes) => {
+ return function (dispatch, getState) {
+ const hasServerDomain = hasServerPublicDomain(getState())
+ const currentBucket = getCurrentBucket(getState())
+ const currentPrefix = getCurrentPrefix(getState())
+ const objectName = `${currentPrefix}${object}`
+ const expiry = days * 24 * 60 * 60 + hours * 60 * 60 + minutes * 60
+ if (web.LoggedIn()) {
+ return web
+ .GetBucketPolicy({ bucketName: currentBucket, prefix: currentPrefix })
+ .catch(() => ({ policy: null }))
+ .then(({ policy }) => {
+ if (hasServerDomain && ['readonly', 'readwrite'].includes(policy)) {
+ const domain = getServerInfo(getState()).info.domains[0]
+ const url = `${domain}/${currentBucket}/${encodeURI(objectName)}`
+ dispatch(showShareObject(object, url, false))
+ dispatch(
+ alertActions.set({
+ type: "success",
+ message: "Object shared."
+ })
+ )
+ } else {
+ return web
+ .PresignedGet({
+ host: location.host,
+ bucket: currentBucket,
+ object: objectName,
+ expiry: expiry
+ })
+ }
+ })
+ .then((obj) => {
+ if (!obj) return
+ dispatch(showShareObject(object, obj.url))
+ dispatch(
+ alertActions.set({
+ type: "success",
+ message: `Object shared. Expires in ${days} days ${hours} hours ${minutes} minutes`,
+ })
+ )
+ })
+ .catch((err) => {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message,
+ })
+ )
+ })
+ } else {
+ dispatch(
+ showShareObject(
+ object,
+ `${location.host}` +
+ "/" +
+ `${currentBucket}` +
+ "/" +
+ encodeURI(objectName)
+ )
+ )
+ dispatch(
+ alertActions.set({
+ type: "success",
+ message: `Object shared.`,
+ })
+ )
+ }
+ }
+}
+
+export const showShareObject = (object, url, showExpiryDate = true) => ({
+ type: SET_SHARE_OBJECT,
+ show: true,
+ object,
+ url,
+ showExpiryDate,
+})
+
+export const hideShareObject = (object, url) => ({
+ type: SET_SHARE_OBJECT,
+ show: false,
+ object: "",
+ url: "",
+})
+export const getObjectURL = (object, callback) => {
+ return function (dispatch, getState) {
+ const currentBucket = getCurrentBucket(getState())
+ const currentPrefix = getCurrentPrefix(getState())
+ const objectName = `${currentPrefix}${object}`
+ const encObjectName = encodeURI(objectName)
+ if (web.LoggedIn()) {
+ return web
+ .CreateURLToken()
+ .then((res) => {
+ const url = `${window.location.origin}${minioBrowserPrefix}/download/${currentBucket}/${encObjectName}?token=${res.token}`
+ callback(url)
+ })
+ .catch((err) => {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message,
+ })
+ )
+ })
+ } else {
+ const url = `${window.location.origin}${minioBrowserPrefix}/download/${currentBucket}/${encObjectName}?token=`
+ callback(url)
+ }
+ }
+}
+export const downloadObject = (object) => {
+ return function (dispatch, getState) {
+ const currentBucket = getCurrentBucket(getState())
+ const currentPrefix = getCurrentPrefix(getState())
+ const objectName = `${currentPrefix}${object}`
+ const encObjectName = encodeURI(objectName)
+ if (web.LoggedIn()) {
+ return web
+ .CreateURLToken()
+ .then((res) => {
+ const url = `${window.location.origin}${minioBrowserPrefix}/download/${currentBucket}/${encObjectName}?token=${res.token}`
+ window.location = url
+ })
+ .catch((err) => {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message,
+ })
+ )
+ })
+ } else {
+ const url = `${window.location.origin}${minioBrowserPrefix}/download/${currentBucket}/${encObjectName}?token=`
+ window.location = url
+ }
+ }
+}
+
+export const downloadPrefix = (object) => {
+ return function (dispatch, getState) {
+ return downloadObjects(
+ getCurrentBucket(getState()),
+ getCurrentPrefix(getState()),
+ [object],
+ `${object.slice(0, -1)}.zip`,
+ dispatch
+ )
+ }
+}
+
+
+export const checkObject = (object) => ({
+ type: CHECKED_LIST_ADD,
+ object,
+})
+
+export const uncheckObject = (object) => ({
+ type: CHECKED_LIST_REMOVE,
+ object,
+})
+
+export const resetCheckedList = () => ({
+ type: CHECKED_LIST_RESET,
+})
+
+export const downloadCheckedObjects = () => {
+ return function (dispatch, getState) {
+ return downloadObjects(
+ getCurrentBucket(getState()),
+ getCurrentPrefix(getState()),
+ getCheckedList(getState()),
+ null,
+ dispatch
+ )
+ }
+}
+
+const downloadObjects = (bucketName, prefix, objects, filename, dispatch) => {
+ const req = {
+ bucketName: bucketName,
+ prefix: prefix,
+ objects: objects,
+ }
+ if (web.LoggedIn()) {
+ return web
+ .CreateURLToken()
+ .then((res) => {
+ const requestUrl = `${location.origin}${minioBrowserPrefix}/zip?token=${res.token}`
+ downloadZip(requestUrl, req, filename, dispatch)
+ })
+ .catch((err) =>
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: err.message,
+ })
+ )
+ )
+ } else {
+ const requestUrl = `${location.origin}${minioBrowserPrefix}/zip?token=`
+ downloadZip(requestUrl, req, filename, dispatch)
+ }
+}
+
+const downloadZip = (url, req, filename, dispatch) => {
+ var anchor = document.createElement("a")
+ document.body.appendChild(anchor)
+
+ var xhr = new XMLHttpRequest()
+ xhr.open("POST", url, true)
+ xhr.responseType = "blob"
+
+ xhr.onload = function (e) {
+ if (this.status == 200) {
+ dispatch(resetCheckedList())
+ var blob = new Blob([this.response], {
+ type: "octet/stream",
+ })
+ var blobUrl = window.URL.createObjectURL(blob)
+ var separator = req.prefix.length > 1 ? "-" : ""
+
+ anchor.href = blobUrl
+ anchor.download = filename ||
+ req.bucketName + separator + req.prefix.slice(0, -1) + ".zip"
+
+ anchor.click()
+ window.URL.revokeObjectURL(blobUrl)
+ anchor.remove()
+ }
+ }
+ xhr.send(JSON.stringify(req))
+}
diff --git a/browser/app/js/objects/reducer.js b/browser/app/js/objects/reducer.js
new file mode 100644
index 000000000..3c4a9c8aa
--- /dev/null
+++ b/browser/app/js/objects/reducer.js
@@ -0,0 +1,124 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as actionsObjects from "./actions"
+import { SORT_ORDER_ASC } from "../constants"
+
+const removeObject = (list, objectToRemove, lookup) => {
+ const idx = list.findIndex(object => lookup(object) === objectToRemove)
+ if (idx == -1) {
+ return list
+ }
+ return [...list.slice(0, idx), ...list.slice(idx + 1)]
+}
+
+export default (
+ state = {
+ list: [],
+ filter: "",
+ listLoading: false,
+ sortBy: "",
+ sortOrder: SORT_ORDER_ASC,
+ currentPrefix: "",
+ prefixWritable: false,
+ shareObject: {
+ show: false,
+ object: "",
+ url: ""
+ },
+ checkedList: []
+ },
+ action
+) => {
+ switch (action.type) {
+ case actionsObjects.SET_LIST:
+ return {
+ ...state,
+ list: action.objects
+ }
+ case actionsObjects.RESET_LIST:
+ return {
+ ...state,
+ list: []
+ }
+ case actionsObjects.SET_FILTER:
+ return {
+ ...state,
+ filter: action.filter
+ }
+ case actionsObjects.SET_LIST_LOADING:
+ return {
+ ...state,
+ listLoading: action.listLoading
+ }
+ case actionsObjects.REMOVE:
+ return {
+ ...state,
+ list: removeObject(state.list, action.object, object => object.name)
+ }
+ case actionsObjects.SET_SORT_BY:
+ return {
+ ...state,
+ sortBy: action.sortBy
+ }
+ case actionsObjects.SET_SORT_ORDER:
+ return {
+ ...state,
+ sortOrder: action.sortOrder
+ }
+ case actionsObjects.SET_CURRENT_PREFIX:
+ return {
+ ...state,
+ currentPrefix: action.prefix
+ }
+ case actionsObjects.SET_PREFIX_WRITABLE:
+ return {
+ ...state,
+ prefixWritable: action.prefixWritable
+ }
+ case actionsObjects.SET_SHARE_OBJECT:
+ return {
+ ...state,
+ shareObject: {
+ show: action.show,
+ object: action.object,
+ url: action.url,
+ showExpiryDate: action.showExpiryDate
+ }
+ }
+ case actionsObjects.CHECKED_LIST_ADD:
+ return {
+ ...state,
+ checkedList: [...state.checkedList, action.object]
+ }
+ case actionsObjects.CHECKED_LIST_REMOVE:
+ return {
+ ...state,
+ checkedList: removeObject(
+ state.checkedList,
+ action.object,
+ object => object
+ )
+ }
+ case actionsObjects.CHECKED_LIST_RESET:
+ return {
+ ...state,
+ checkedList: []
+ }
+ default:
+ return state
+ }
+}
diff --git a/browser/app/js/objects/selectors.js b/browser/app/js/objects/selectors.js
new file mode 100644
index 000000000..9740176ac
--- /dev/null
+++ b/browser/app/js/objects/selectors.js
@@ -0,0 +1,33 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createSelector } from "reselect"
+
+export const getCurrentPrefix = state => state.objects.currentPrefix
+
+export const getCheckedList = state => state.objects.checkedList
+
+export const getPrefixWritable = state => state.objects.prefixWritable
+
+const objectsSelector = state => state.objects.list
+const objectsFilterSelector = state => state.objects.filter
+
+export const getFilteredObjects = createSelector(
+ objectsSelector,
+ objectsFilterSelector,
+ (objects, filter) => objects.filter(
+ object => object.name.toLowerCase().startsWith(filter.toLowerCase()))
+)
\ No newline at end of file
diff --git a/browser/app/js/reducers.js b/browser/app/js/reducers.js
new file mode 100644
index 000000000..e942a9ff0
--- /dev/null
+++ b/browser/app/js/reducers.js
@@ -0,0 +1,32 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { combineReducers } from "redux"
+import browser from "./browser/reducer"
+import alert from "./alert/reducer"
+import buckets from "./buckets/reducer"
+import objects from "./objects/reducer"
+import uploads from "./uploads/reducer"
+
+const rootReducer = combineReducers({
+ browser,
+ alert,
+ buckets,
+ objects,
+ uploads
+})
+
+export default rootReducer
diff --git a/browser/app/js/store/configure-store.js b/browser/app/js/store/configure-store.js
new file mode 100644
index 000000000..8e63fef85
--- /dev/null
+++ b/browser/app/js/store/configure-store.js
@@ -0,0 +1,26 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createStore, applyMiddleware } from "redux"
+import thunkMiddleware from "redux-thunk"
+import reducers from "../reducers"
+
+const createStoreWithMiddleware = applyMiddleware(thunkMiddleware)(createStore)
+
+export default function configureStore(initialState) {
+ const store = createStoreWithMiddleware(reducers, initialState)
+ return store
+}
diff --git a/browser/app/js/uploads/AbortConfirmModal.js b/browser/app/js/uploads/AbortConfirmModal.js
new file mode 100644
index 000000000..04c84233f
--- /dev/null
+++ b/browser/app/js/uploads/AbortConfirmModal.js
@@ -0,0 +1,75 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import classNames from "classnames"
+import { connect } from "react-redux"
+import ConfirmModal from "../browser/ConfirmModal"
+import * as uploadsActions from "./actions"
+
+export class AbortConfirmModal extends React.Component {
+ abortUploads() {
+ const { abort, uploads } = this.props
+ for (var slug in uploads) {
+ abort(slug)
+ }
+ }
+ render() {
+ const { hideAbort } = this.props
+ let baseClass = classNames({
+ "abort-upload": true
+ })
+ let okIcon = classNames({
+ fas: true,
+ "fa-times": true
+ })
+ let cancelIcon = classNames({
+ fas: true,
+ "fa-cloud-upload-alt": true
+ })
+
+ return (
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ uploads: state.uploads.files
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ abort: slug => dispatch(uploadsActions.abortUpload(slug)),
+ hideAbort: () => dispatch(uploadsActions.hideAbortModal())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(AbortConfirmModal)
diff --git a/browser/app/js/uploads/Dropzone.js b/browser/app/js/uploads/Dropzone.js
new file mode 100644
index 000000000..9cff608db
--- /dev/null
+++ b/browser/app/js/uploads/Dropzone.js
@@ -0,0 +1,85 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { connect } from "react-redux"
+import ReactDropzone from "react-dropzone"
+import * as actions from "./actions"
+
+// Dropzone is a drag-and-drop element for uploading files. It will create a
+// landing zone of sorts that automatically receives the files.
+export class Dropzone extends React.Component {
+ onDrop(files) {
+ const { uploadFile } = this.props
+ // FIXME: Currently you can upload multiple files, but only one abort
+ // modal will be shown, and progress updates will only occur for one
+ // file at a time. See #171.
+ files.forEach(file => {
+ uploadFile(file)
+ })
+ }
+
+ render() {
+ // Overwrite the default styling from react-dropzone; otherwise it
+ // won't handle child elements correctly.
+ const style = {
+ flex: "1",
+ borderWidth: "0",
+ borderStyle: "dashed",
+ borderColor: "#fff"
+ }
+ const activeStyle = {
+ borderWidth: "2px",
+ borderColor: "#777"
+ }
+ const rejectStyle = {
+ backgroundColor: "#ffdddd"
+ }
+ const getStyle = (isDragActive, isDragAccept, isDragReject) => ({
+ ...style,
+ ...(isDragActive ? activeStyle : {}),
+ ...(isDragReject ? rejectStyle : {})
+ })
+
+ // disableClick means that it won't trigger a file upload box when
+ // the user clicks on a file.
+ return (
+
+ {({getRootProps, getInputProps, isDragActive, isDragAccept, isDragReject}) => (
+ event.stopPropagation()
+ })}
+ style={getStyle(isDragActive, isDragAccept, isDragReject)}
+ >
+
+ {this.props.children}
+
+ )}
+
+ )
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ uploadFile: file => dispatch(actions.uploadFile(file))
+ }
+}
+
+export default connect(undefined, mapDispatchToProps)(Dropzone)
diff --git a/browser/app/js/uploads/UploadModal.js b/browser/app/js/uploads/UploadModal.js
new file mode 100644
index 000000000..0e41508ad
--- /dev/null
+++ b/browser/app/js/uploads/UploadModal.js
@@ -0,0 +1,91 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import humanize from "humanize"
+import classNames from "classnames"
+import { connect } from "react-redux"
+
+import { ProgressBar } from "react-bootstrap"
+import AbortConfirmModal from "./AbortConfirmModal"
+import * as uploadsActions from "./actions"
+
+export class UploadModal extends React.Component {
+ render() {
+ const { uploads, showAbort, showAbortModal } = this.props
+ if (showAbort) {
+ return
+ }
+
+ // If we don't have any files uploading, don't show anything.
+ let numberUploading = Object.keys(uploads).length
+ if (numberUploading == 0) return
+
+ let totalLoaded = 0
+ let totalSize = 0
+
+ // Iterate over each upload, adding together the total size and that
+ // which has been uploaded.
+ for (var slug in uploads) {
+ let upload = uploads[slug]
+ totalLoaded += upload.loaded
+ totalSize += upload.size
+ }
+
+ let percent = totalLoaded / totalSize * 100
+
+ // If more than one: "Uploading files (5)..."
+ // If only one: "Uploading myfile.txt..."
+ let text =
+ "Uploading " +
+ (numberUploading == 1
+ ? `'${uploads[Object.keys(uploads)[0]].name}'`
+ : `files (${numberUploading})`) +
+ "..."
+
+ return (
+
+
+ ×
+
+
+ {text}
+
+
+
+
+ {humanize.filesize(totalLoaded)} ({percent.toFixed(2)} %)
+
+
+
+ )
+ }
+}
+
+const mapStateToProps = state => {
+ return {
+ uploads: state.uploads.files,
+ showAbort: state.uploads.showAbortModal
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ showAbortModal: () => dispatch(uploadsActions.showAbortModal())
+ }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(UploadModal)
diff --git a/browser/app/js/uploads/__tests__/AbortConfirmModal.test.js b/browser/app/js/uploads/__tests__/AbortConfirmModal.test.js
new file mode 100644
index 000000000..6b34a4bcd
--- /dev/null
+++ b/browser/app/js/uploads/__tests__/AbortConfirmModal.test.js
@@ -0,0 +1,49 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { AbortConfirmModal } from "../AbortConfirmModal"
+
+describe("AbortConfirmModal", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call abort for every upload when Abort is clicked", () => {
+ const abort = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.instance().abortUploads()
+ expect(abort.mock.calls.length).toBe(2)
+ expect(abort.mock.calls[0][0]).toBe("a-b/-test1")
+ expect(abort.mock.calls[1][0]).toBe("a-b/-test2")
+ })
+
+ it("should call hideAbort when cancel is clicked", () => {
+ const hideAbort = jest.fn()
+ const wrapper = shallow( )
+ wrapper.find("ConfirmModal").prop("cancelHandler")()
+ expect(hideAbort).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/uploads/__tests__/Dropzone.test.js b/browser/app/js/uploads/__tests__/Dropzone.test.js
new file mode 100644
index 000000000..817dacf39
--- /dev/null
+++ b/browser/app/js/uploads/__tests__/Dropzone.test.js
@@ -0,0 +1,34 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { Dropzone } from "../Dropzone"
+
+describe("Dropzone", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should call uploadFile with files", () => {
+ const uploadFile = jest.fn()
+ const wrapper = shallow( )
+ const file1 = new Blob(["file content1"], { type: "text/plain" })
+ const file2 = new Blob(["file content2"], { type: "text/plain" })
+ wrapper.first().prop("onDrop")([file1, file2])
+ expect(uploadFile.mock.calls).toEqual([[file1], [file2]])
+ })
+})
diff --git a/browser/app/js/uploads/__tests__/UploadModal.test.js b/browser/app/js/uploads/__tests__/UploadModal.test.js
new file mode 100644
index 000000000..442587cdb
--- /dev/null
+++ b/browser/app/js/uploads/__tests__/UploadModal.test.js
@@ -0,0 +1,56 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react"
+import { shallow } from "enzyme"
+import { UploadModal } from "../UploadModal"
+
+describe("UploadModal", () => {
+ it("should render without crashing", () => {
+ shallow( )
+ })
+
+ it("should render AbortConfirmModal when showAbort is true", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("Connect(AbortConfirmModal)").length).toBe(1)
+ })
+
+ it("should render nothing when there are no files being uploaded", () => {
+ const wrapper = shallow( )
+ expect(wrapper.find("noscript").length).toBe(1)
+ })
+
+ it("should show upload progress when one or more files are being uploaded", () => {
+ const wrapper = shallow(
+
+ )
+ expect(wrapper.find("ProgressBar").length).toBe(1)
+ })
+
+ it("should call showAbortModal when close button is clicked", () => {
+ const showAbortModal = jest.fn()
+ const wrapper = shallow(
+
+ )
+ wrapper.find("button").simulate("click")
+ expect(showAbortModal).toHaveBeenCalled()
+ })
+})
diff --git a/browser/app/js/uploads/__tests__/actions.test.js b/browser/app/js/uploads/__tests__/actions.test.js
new file mode 100644
index 000000000..07060a995
--- /dev/null
+++ b/browser/app/js/uploads/__tests__/actions.test.js
@@ -0,0 +1,167 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import configureStore from "redux-mock-store"
+import thunk from "redux-thunk"
+import * as uploadsActions from "../actions"
+
+const middlewares = [thunk]
+const mockStore = configureStore(middlewares)
+
+describe("Uploads actions", () => {
+ it("creates uploads/ADD action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "uploads/ADD",
+ slug: "a-b-c",
+ size: 100,
+ name: "test"
+ }
+ ]
+ store.dispatch(uploadsActions.add("a-b-c", 100, "test"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates uploads/UPDATE_PROGRESS action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "uploads/UPDATE_PROGRESS",
+ slug: "a-b-c",
+ loaded: 50
+ }
+ ]
+ store.dispatch(uploadsActions.updateProgress("a-b-c", 50))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates uploads/STOP action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "uploads/STOP",
+ slug: "a-b-c"
+ }
+ ]
+ store.dispatch(uploadsActions.stop("a-b-c"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates uploads/SHOW_ABORT_MODAL action", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "uploads/SHOW_ABORT_MODAL",
+ show: true
+ }
+ ]
+ store.dispatch(uploadsActions.showAbortModal())
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ describe("uploadFile", () => {
+ const file = new Blob(["file content"], {
+ type: "text/plain"
+ })
+ file.name = "file1"
+
+ it("creates alerts/SET action when currentBucket is not present", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "" }
+ })
+ const expectedActions = [
+ {
+ type: "alert/SET",
+ alert: {
+ id: 0,
+ type: "danger",
+ message: "Please choose a bucket before trying to upload files."
+ }
+ }
+ ]
+ const file = new Blob(["file content"], { type: "text/plain" })
+ store.dispatch(uploadsActions.uploadFile(file))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("creates uploads/ADD action before uploading the file", () => {
+ const store = mockStore({
+ buckets: { currentBucket: "test1" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ const expectedActions = [
+ {
+ type: "uploads/ADD",
+ slug: "test1-pre1/-file1",
+ size: file.size,
+ name: file.name
+ }
+ ]
+ store.dispatch(uploadsActions.uploadFile(file))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+
+ it("should open and send XMLHttpRequest", () => {
+ const open = jest.fn()
+ const send = jest.fn()
+ const xhrMockClass = () => ({
+ open: open,
+ send: send,
+ setRequestHeader: jest.fn(),
+ upload: {
+ addEventListener: jest.fn()
+ }
+ })
+ window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass)
+ const store = mockStore({
+ buckets: { currentBucket: "test1" },
+ objects: { currentPrefix: "pre1/" }
+ })
+ store.dispatch(uploadsActions.uploadFile(file))
+ const objectPath = encodeURIComponent("pre1/file1")
+ expect(open).toHaveBeenCalledWith(
+ "PUT",
+ "https://localhost:8080/upload/test1/" + objectPath,
+ true
+ )
+ expect(send).toHaveBeenCalledWith(file)
+ })
+ })
+
+ it("creates uploads/STOP and uploads/SHOW_ABORT_MODAL after abortUpload", () => {
+ const store = mockStore()
+ const expectedActions = [
+ {
+ type: "uploads/STOP",
+ slug: "a-b/-c"
+ },
+ {
+ type: "uploads/SHOW_ABORT_MODAL",
+ show: false
+ }
+ ]
+ store.dispatch(uploadsActions.abortUpload("a-b/-c"))
+ const actions = store.getActions()
+ expect(actions).toEqual(expectedActions)
+ })
+})
diff --git a/browser/app/js/uploads/__tests__/reducer.test.js b/browser/app/js/uploads/__tests__/reducer.test.js
new file mode 100644
index 000000000..cf141413c
--- /dev/null
+++ b/browser/app/js/uploads/__tests__/reducer.test.js
@@ -0,0 +1,87 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import reducer from "../reducer"
+import * as actions from "../actions"
+
+describe("uploads reducer", () => {
+ it("should return the initial state", () => {
+ const initialState = reducer(undefined, {})
+ expect(initialState).toEqual({
+ files: {},
+ showAbortModal: false
+ })
+ })
+
+ it("should handle ADD", () => {
+ const newState = reducer(undefined, {
+ type: actions.ADD,
+ slug: "a-b-c",
+ size: 100,
+ name: "test"
+ })
+ expect(newState.files).toEqual({
+ "a-b-c": { loaded: 0, size: 100, name: "test" }
+ })
+ })
+
+ it("should handle UPDATE_PROGRESS", () => {
+ const newState = reducer(
+ {
+ files: { "a-b-c": { loaded: 0, size: 100, name: "test" } }
+ },
+ {
+ type: actions.UPDATE_PROGRESS,
+ slug: "a-b-c",
+ loaded: 50
+ }
+ )
+ expect(newState.files).toEqual({
+ "a-b-c": { loaded: 50, size: 100, name: "test" }
+ })
+ })
+
+ it("should handle STOP", () => {
+ const newState = reducer(
+ {
+ files: {
+ "a-b-c": { loaded: 70, size: 100, name: "test1" },
+ "x-y-z": { loaded: 50, size: 100, name: "test2" }
+ }
+ },
+ {
+ type: actions.STOP,
+ slug: "a-b-c"
+ }
+ )
+ expect(newState.files).toEqual({
+ "x-y-z": { loaded: 50, size: 100, name: "test2" }
+ })
+ })
+
+ it("should handle SHOW_ABORT_MODAL", () => {
+ const newState = reducer(
+ {
+ showAbortModal: false
+ },
+ {
+ type: actions.SHOW_ABORT_MODAL,
+ show: true
+ }
+ )
+ expect(newState.showAbortModal).toBeTruthy()
+ })
+})
diff --git a/browser/app/js/uploads/actions.js b/browser/app/js/uploads/actions.js
new file mode 100644
index 000000000..d3a3b211e
--- /dev/null
+++ b/browser/app/js/uploads/actions.js
@@ -0,0 +1,177 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import Moment from "moment"
+import storage from "local-storage-fallback"
+import * as alertActions from "../alert/actions"
+import * as objectsActions from "../objects/actions"
+import { getCurrentBucket } from "../buckets/selectors"
+import { getCurrentPrefix } from "../objects/selectors"
+import { minioBrowserPrefix } from "../constants"
+
+export const ADD = "uploads/ADD"
+export const UPDATE_PROGRESS = "uploads/UPDATE_PROGRESS"
+export const STOP = "uploads/STOP"
+export const SHOW_ABORT_MODAL = "uploads/SHOW_ABORT_MODAL"
+
+export const add = (slug, size, name) => ({
+ type: ADD,
+ slug,
+ size,
+ name
+})
+
+export const updateProgress = (slug, loaded) => ({
+ type: UPDATE_PROGRESS,
+ slug,
+ loaded
+})
+
+export const stop = slug => ({
+ type: STOP,
+ slug
+})
+
+export const showAbortModal = () => ({
+ type: SHOW_ABORT_MODAL,
+ show: true
+})
+
+export const hideAbortModal = () => ({
+ type: SHOW_ABORT_MODAL,
+ show: false
+})
+
+let requests = {}
+
+export const addUpload = (xhr, slug, size, name) => {
+ return function(dispatch) {
+ requests[slug] = xhr
+ dispatch(add(slug, size, name))
+ }
+}
+
+export const abortUpload = slug => {
+ return function(dispatch) {
+ const xhr = requests[slug]
+ if (xhr) {
+ xhr.abort()
+ }
+ dispatch(stop(slug))
+ dispatch(hideAbortModal())
+ }
+}
+
+export const uploadFile = file => {
+ return function(dispatch, getState) {
+ const state = getState()
+ const currentBucket = getCurrentBucket(state)
+ if (!currentBucket) {
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: "Please choose a bucket before trying to upload files."
+ })
+ )
+ return
+ }
+ const currentPrefix = getCurrentPrefix(state)
+ var _filePath = file.path || file.name
+ if (_filePath.charAt(0) == '/') {
+ _filePath = _filePath.substring(1)
+ }
+ const filePath = _filePath
+ const objectName = encodeURIComponent(`${currentPrefix}${filePath}`)
+ const uploadUrl = `${
+ window.location.origin
+ }${minioBrowserPrefix}/upload/${currentBucket}/${objectName}`
+ const slug = `${currentBucket}-${currentPrefix}-${filePath}`
+
+ let xhr = new XMLHttpRequest()
+ xhr.open("PUT", uploadUrl, true)
+ xhr.withCredentials = false
+ const token = storage.getItem("token")
+ if (token) {
+ xhr.setRequestHeader(
+ "Authorization",
+ "Bearer " + storage.getItem("token")
+ )
+ }
+ xhr.setRequestHeader(
+ "x-amz-date",
+ Moment()
+ .utc()
+ .format("YYYYMMDDTHHmmss") + "Z"
+ )
+
+ dispatch(addUpload(xhr, slug, file.size, file.name))
+
+ xhr.onload = function(event) {
+ if (xhr.status == 401 || xhr.status == 403) {
+ dispatch(hideAbortModal())
+ dispatch(stop(slug))
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: "Unauthorized request."
+ })
+ )
+ }
+ if (xhr.status == 500) {
+ dispatch(hideAbortModal())
+ dispatch(stop(slug))
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: xhr.responseText
+ })
+ )
+ }
+ if (xhr.status == 200) {
+ dispatch(hideAbortModal())
+ dispatch(stop(slug))
+ dispatch(
+ alertActions.set({
+ type: "success",
+ message: "File '" + filePath + "' uploaded successfully."
+ })
+ )
+ dispatch(objectsActions.selectPrefix(currentPrefix))
+ }
+ }
+
+ xhr.upload.addEventListener("error", event => {
+ dispatch(stop(slug))
+ dispatch(
+ alertActions.set({
+ type: "danger",
+ message: "Error occurred uploading '" + filePath + "'."
+ })
+ )
+ })
+
+ xhr.upload.addEventListener("progress", event => {
+ if (event.lengthComputable) {
+ let loaded = event.loaded
+ let total = event.total
+ // Update the counter
+ dispatch(updateProgress(slug, loaded))
+ }
+ })
+
+ xhr.send(file)
+ }
+}
diff --git a/browser/app/js/uploads/reducer.js b/browser/app/js/uploads/reducer.js
new file mode 100644
index 000000000..8485c22d1
--- /dev/null
+++ b/browser/app/js/uploads/reducer.js
@@ -0,0 +1,67 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as uploadsActions from "./actions"
+
+const add = (files, action) => ({
+ ...files,
+ [action.slug]: {
+ loaded: 0,
+ size: action.size,
+ name: action.name
+ }
+})
+
+const updateProgress = (files, action) => ({
+ ...files,
+ [action.slug]: {
+ ...files[action.slug],
+ loaded: action.loaded
+ }
+})
+
+const stop = (files, action) => {
+ const newFiles = Object.assign({}, files)
+ delete newFiles[action.slug]
+ return newFiles
+}
+
+export default (state = { files: {}, showAbortModal: false }, action) => {
+ switch (action.type) {
+ case uploadsActions.ADD:
+ return {
+ ...state,
+ files: add(state.files, action)
+ }
+ case uploadsActions.UPDATE_PROGRESS:
+ return {
+ ...state,
+ files: updateProgress(state.files, action)
+ }
+ case uploadsActions.STOP:
+ return {
+ ...state,
+ files: stop(state.files, action)
+ }
+ case uploadsActions.SHOW_ABORT_MODAL:
+ return {
+ ...state,
+ showAbortModal: action.show
+ }
+ default:
+ return state
+ }
+}
diff --git a/browser/app/js/utils.js b/browser/app/js/utils.js
new file mode 100644
index 000000000..6ee3317e9
--- /dev/null
+++ b/browser/app/js/utils.js
@@ -0,0 +1,119 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { minioBrowserPrefix, SORT_ORDER_DESC } from "./constants.js"
+
+export const sortObjectsByName = (objects, order) => {
+ let folders = objects.filter(object => object.name.endsWith("/"))
+ let files = objects.filter(object => !object.name.endsWith("/"))
+ folders = folders.sort((a, b) => {
+ if (a.name.toLowerCase() < b.name.toLowerCase()) return -1
+ if (a.name.toLowerCase() > b.name.toLowerCase()) return 1
+ return 0
+ })
+ files = files.sort((a, b) => {
+ if (a.name.toLowerCase() < b.name.toLowerCase()) return -1
+ if (a.name.toLowerCase() > b.name.toLowerCase()) return 1
+ return 0
+ })
+ if (order === SORT_ORDER_DESC) {
+ folders = folders.reverse()
+ files = files.reverse()
+ }
+ return [...folders, ...files]
+}
+
+export const sortObjectsBySize = (objects, order) => {
+ let folders = objects.filter(object => object.name.endsWith("/"))
+ let files = objects.filter(object => !object.name.endsWith("/"))
+ files = files.sort((a, b) => a.size - b.size)
+ if (order === SORT_ORDER_DESC) files = files.reverse()
+ return [...folders, ...files]
+}
+
+export const sortObjectsByDate = (objects, order) => {
+ let folders = objects.filter(object => object.name.endsWith("/"))
+ let files = objects.filter(object => !object.name.endsWith("/"))
+ files = files.sort(
+ (a, b) =>
+ new Date(a.lastModified).getTime() - new Date(b.lastModified).getTime()
+ )
+ if (order === SORT_ORDER_DESC) files = files.reverse()
+ return [...folders, ...files]
+}
+
+export const pathSlice = path => {
+ path = path.replace(minioBrowserPrefix, "")
+ let prefix = ""
+ let bucket = ""
+ if (!path)
+ return {
+ bucket,
+ prefix
+ }
+ let objectIndex = path.indexOf("/", 1)
+ if (objectIndex == -1) {
+ bucket = path.slice(1)
+ return {
+ bucket,
+ prefix
+ }
+ }
+ bucket = path.slice(1, objectIndex)
+ prefix = path.slice(objectIndex + 1)
+ return {
+ bucket,
+ prefix
+ }
+}
+
+export const pathJoin = (bucket, prefix) => {
+ if (!prefix) prefix = ""
+ return minioBrowserPrefix + "/" + bucket + "/" + prefix
+}
+
+export const getRandomAccessKey = () => {
+ const alphaNumericTable = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ let arr = new Uint8Array(20)
+ window.crypto.getRandomValues(arr)
+ const random = Array.prototype.map.call(arr, v => {
+ const i = v % alphaNumericTable.length
+ return alphaNumericTable.charAt(i)
+ })
+ return random.join("")
+}
+
+export const getRandomSecretKey = () => {
+ let arr = new Uint8Array(40)
+ window.crypto.getRandomValues(arr)
+ const binStr = Array.prototype.map
+ .call(arr, v => {
+ return String.fromCharCode(v)
+ })
+ .join("")
+ const base64Str = btoa(binStr)
+ return base64Str.replace(/\//g, "+").substr(0, 40)
+}
+
+export const getRandomString = length => {
+ var text = ""
+ var possible =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+ for (var i = 0; i < length; i++) {
+ text += possible.charAt(Math.floor(Math.random() * possible.length))
+ }
+ return text
+}
diff --git a/browser/app/js/web.js b/browser/app/js/web.js
new file mode 100644
index 000000000..6a9133b19
--- /dev/null
+++ b/browser/app/js/web.js
@@ -0,0 +1,138 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import JSONrpc from './jsonrpc'
+import { minioBrowserPrefix } from './constants.js'
+import Moment from 'moment'
+import storage from 'local-storage-fallback'
+
+class Web {
+ constructor(endpoint) {
+ const namespace = 'web'
+ this.JSONrpc = new JSONrpc({
+ endpoint,
+ namespace
+ })
+ }
+ makeCall(method, options) {
+ return this.JSONrpc.call(method, {
+ params: options
+ }, storage.getItem('token'))
+ .catch(err => {
+ if (err.status === 401) {
+ storage.removeItem('token')
+ location.reload()
+ throw new Error('Please re-login.')
+ }
+ if (err.status)
+ throw new Error(`Server returned error [${err.status}]`)
+ throw new Error('MinIO server is unreachable')
+ })
+ .then(res => {
+ let json = JSON.parse(res.text)
+ let result = json.result
+ let error = json.error
+ if (error) {
+ throw new Error(error.message)
+ }
+ if (!Moment(result.uiVersion).isValid()) {
+ throw new Error("Invalid UI version in the JSON-RPC response")
+ }
+ if (result.uiVersion !== currentUiVersion
+ && currentUiVersion !== 'MINIO_UI_VERSION') {
+ storage.setItem('newlyUpdated', true)
+ location.reload()
+ }
+ return result
+ })
+ }
+ LoggedIn() {
+ return !!storage.getItem('token')
+ }
+ Login(args) {
+ return this.makeCall('Login', args)
+ .then(res => {
+ storage.setItem('token', `${res.token}`)
+ return res
+ })
+ }
+ Logout() {
+ storage.removeItem('token')
+ }
+ GetToken() {
+ return storage.getItem('token')
+ }
+ GetDiscoveryDoc() {
+ return this.makeCall("GetDiscoveryDoc")
+ }
+ LoginSTS(args) {
+ return this.makeCall('LoginSTS', args)
+ .then(res => {
+ storage.setItem('token', `${res.token}`)
+ return res
+ })
+ }
+ ServerInfo() {
+ return this.makeCall('ServerInfo')
+ }
+ StorageInfo() {
+ return this.makeCall('StorageInfo')
+ }
+ ListBuckets() {
+ return this.makeCall('ListBuckets')
+ }
+ MakeBucket(args) {
+ return this.makeCall('MakeBucket', args)
+ }
+ DeleteBucket(args) {
+ return this.makeCall('DeleteBucket', args)
+ }
+ ListObjects(args) {
+ return this.makeCall('ListObjects', args)
+ }
+ PresignedGet(args) {
+ return this.makeCall('PresignedGet', args)
+ }
+ PutObjectURL(args) {
+ return this.makeCall('PutObjectURL', args)
+ }
+ RemoveObject(args) {
+ return this.makeCall('RemoveObject', args)
+ }
+ SetAuth(args) {
+ return this.makeCall('SetAuth', args)
+ .then(res => {
+ storage.setItem('token', `${res.token}`)
+ return res
+ })
+ }
+ CreateURLToken() {
+ return this.makeCall('CreateURLToken')
+ }
+ GetBucketPolicy(args) {
+ return this.makeCall('GetBucketPolicy', args)
+ }
+ SetBucketPolicy(args) {
+ return this.makeCall('SetBucketPolicy', args)
+ }
+ ListAllBucketPolicies(args) {
+ return this.makeCall('ListAllBucketPolicies', args)
+ }
+}
+
+const web = new Web(`${window.location.protocol}//${window.location.host}${minioBrowserPrefix}/webrpc`);
+
+export default web;
diff --git a/browser/app/less/inc/alert.less b/browser/app/less/inc/alert.less
new file mode 100644
index 000000000..4c60e5d65
--- /dev/null
+++ b/browser/app/less/inc/alert.less
@@ -0,0 +1,68 @@
+.alert {
+ border: 0;
+ position: fixed;
+ max-width: 500px;
+ margin: 0;
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.1);
+ color: @white;
+ width: 100%;
+ right: 20px;
+ border-radius: 3px;
+ padding: 17px 50px 17px 17px;
+ z-index: 10010;
+ .animation-duration(800ms);
+ .animation-fill-mode(both);
+
+ &:not(.progress) {
+ top: 20px;
+
+ @media(min-width: (@screen-sm-min)) {
+ left: 50%;
+ margin-left: -250px;
+ }
+ }
+
+ &.progress {
+ bottom: 20px;
+ right: 20px;
+ }
+
+ &.alert-danger {
+ background: @red;
+ }
+
+ &.alert-success {
+ background: @green;
+ }
+
+ &.alert-info {
+ background: @blue;
+ }
+
+ @media(max-width: (@screen-xs-max)) {
+ left: 20px;
+ width: ~"calc(100% - 40px)";
+ max-width: 100%;
+ }
+
+ .progress {
+ margin: 10px 10px 8px 0;
+ height: 5px;
+ box-shadow: none;
+ border-radius: 1px;
+ background-color: @blue;
+ border-radius: 2px;
+ overflow: hidden;
+ }
+
+ .progress-bar {
+ box-shadow: none;
+ background-color: @white;
+ height: 100%;
+ }
+
+ .close {
+ position: absolute;
+ top: 15px;
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/animate.less b/browser/app/less/inc/animate/animate.less
new file mode 100644
index 000000000..33c53b1ae
--- /dev/null
+++ b/browser/app/less/inc/animate/animate.less
@@ -0,0 +1,13 @@
+.animated{
+ &.infinite {
+ .animation-iteration-count(infinite);
+ }
+}
+
+@import 'fadeIn';
+@import 'fadeInDown';
+@import 'fadeInUp';
+@import 'fadeOut';
+@import 'fadeOutDown';
+@import 'fadeOutUp';
+@import 'zoomIn';
diff --git a/browser/app/less/inc/animate/fadeIn.less b/browser/app/less/inc/animate/fadeIn.less
new file mode 100644
index 000000000..50282ac98
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeIn.less
@@ -0,0 +1,26 @@
+@-webkit-keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+@-moz-keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+@-o-keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+@keyframes fadeIn {
+ 0% {opacity: 0;}
+ 100% {opacity: 1;}
+}
+
+.fadeIn {
+ -webkit-animation-name: fadeIn;
+ -moz-animation-name: fadeIn;
+ -o-animation-name: fadeIn;
+ animation-name: fadeIn;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeInDown.less b/browser/app/less/inc/animate/fadeInDown.less
new file mode 100644
index 000000000..2a959322e
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeInDown.less
@@ -0,0 +1,54 @@
+@-webkit-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+}
+
+@-moz-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+}
+
+@-o-keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ -ms-transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -ms-transform: translateY(0);
+ }
+}
+
+@keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ transform: translateY(-20px);
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fadeInDown {
+ -webkit-animation-name: fadeInDown;
+ -moz-animation-name: fadeInDown;
+ -o-animation-name: fadeInDown;
+ animation-name: fadeInDown;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeInUp.less b/browser/app/less/inc/animate/fadeInUp.less
new file mode 100644
index 000000000..54b4d26ec
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeInUp.less
@@ -0,0 +1,54 @@
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+}
+
+@-moz-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+}
+
+@-o-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -o-transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fadeInUp {
+ -webkit-animation-name: fadeInUp;
+ -moz-animation-name: fadeInUp;
+ -o-animation-name: fadeInUp;
+ animation-name: fadeInUp;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeOut.less b/browser/app/less/inc/animate/fadeOut.less
new file mode 100644
index 000000000..ba64505b9
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeOut.less
@@ -0,0 +1,26 @@
+@-webkit-keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+@-moz-keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+@-o-keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+@keyframes fadeOut {
+ 0% {opacity: 1;}
+ 100% {opacity: 0;}
+}
+
+.fadeOut {
+ -webkit-animation-name: fadeOut;
+ -moz-animation-name: fadeOut;
+ -o-animation-name: fadeOut;
+ animation-name: fadeOut;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeOutDown.less b/browser/app/less/inc/animate/fadeOutDown.less
new file mode 100644
index 000000000..214e75367
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeOutDown.less
@@ -0,0 +1,54 @@
+@-webkit-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(20px);
+ }
+}
+
+@-moz-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -moz-transform: translateY(20px);
+ }
+}
+
+@-o-keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -o-transform: translateY(20px);
+ }
+}
+
+@keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+}
+
+.fadeOutDown {
+ -webkit-animation-name: fadeOutDown;
+ -moz-animation-name: fadeOutDown;
+ -o-animation-name: fadeOutDown;
+ animation-name: fadeOutDown;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/fadeOutUp.less b/browser/app/less/inc/animate/fadeOutUp.less
new file mode 100644
index 000000000..cf6115ac0
--- /dev/null
+++ b/browser/app/less/inc/animate/fadeOutUp.less
@@ -0,0 +1,51 @@
+@-webkit-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -webkit-transform: translateY(-20px);
+ }
+}
+@-moz-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -moz-transform: translateY(-20px);
+ }
+}
+@-o-keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ -o-transform: translateY(-20px);
+ }
+}
+@keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ 100% {
+ opacity: 0;
+ transform: translateY(-20px);
+ }
+}
+
+.fadeOutUp {
+ -webkit-animation-name: fadeOutUp;
+ -moz-animation-name: fadeOutUp;
+ -o-animation-name: fadeOutUp;
+ animation-name: fadeOutUp;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/animate/zoomIn.less b/browser/app/less/inc/animate/zoomIn.less
new file mode 100644
index 000000000..34c754fef
--- /dev/null
+++ b/browser/app/less/inc/animate/zoomIn.less
@@ -0,0 +1,23 @@
+@-webkit-keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(.3, .3, .3);
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/base.less b/browser/app/less/inc/base.less
new file mode 100644
index 000000000..4f288ae82
--- /dev/null
+++ b/browser/app/less/inc/base.less
@@ -0,0 +1,31 @@
+* {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ &:focus,
+ &:active {
+ outline: 0;
+ }
+}
+
+html {
+ font-size: 10px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+html,
+body {
+ min-height: 100%;
+}
+
+a {
+ .transition(color);
+ .transition-duration(300ms);
+
+}
+
+button {
+ border: 0;
+}
+
+
diff --git a/browser/app/less/inc/buttons.less b/browser/app/less/inc/buttons.less
new file mode 100644
index 000000000..6c04a95da
--- /dev/null
+++ b/browser/app/less/inc/buttons.less
@@ -0,0 +1,57 @@
+.btn {
+ border: 0;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 2px;
+ text-align: center;
+ .transition(all);
+ .transition-duration(300ms);
+
+ &:hover,
+ &:focus {
+ .opacity(0.9);
+ }
+}
+
+/*-----------------------------------
+ Button Variants
+------------------------------------*/
+.btn-variant(@bg-color, @color) {
+ color: @color;
+ background-color: @bg-color;
+
+ &:hover,
+ &:focus {
+ color: @color;
+ background-color: darken(@bg-color, 6%);
+ }
+
+
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+}
+
+.btn-white {
+ .btn-variant(#fff, darken(@text-color, 20%));
+}
+
+.btn-link {
+ .btn-variant(#eee, #545454);
+}
+
+.btn-danger {
+ .btn-variant(@red, @white);
+}
+
+.btn-primary {
+ .btn-variant(@blue, @white);
+}
+
+.btn-success {
+ .btn-variant(@green, @white);
+}
+//-----------------------------------
\ No newline at end of file
diff --git a/browser/app/less/inc/dropdown.less b/browser/app/less/inc/dropdown.less
new file mode 100644
index 000000000..4d160464e
--- /dev/null
+++ b/browser/app/less/inc/dropdown.less
@@ -0,0 +1,26 @@
+.dropdown-menu {
+ padding: 15px 0;
+ top: 0;
+ margin-top: -1px;
+
+ & > li {
+ & > a {
+ padding: 8px 20px;
+ font-size: 15px;
+
+ & > i {
+ width: 20px;
+ position: relative;
+ top: 1px;
+ }
+ }
+ }
+}
+
+.dropdown-menu-right {
+ & > li {
+ & > a {
+ text-align: right;
+ }
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/file-explorer.less b/browser/app/less/inc/file-explorer.less
new file mode 100644
index 000000000..c8fbd04b2
--- /dev/null
+++ b/browser/app/less/inc/file-explorer.less
@@ -0,0 +1,161 @@
+/*------------------------------
+ Layout
+--------------------------------*/
+.file-explorer {
+ background-color: @white;
+ position: relative;
+ height: 100%;
+
+ &.toggled {
+ height: 100vh;
+ overflow: hidden;
+ }
+}
+
+.fe-body {
+ @media(min-width: @screen-md-min) {
+ padding: 0 0 80px @fe-sidebar-width;
+ }
+
+ @media(max-width: @screen-sm-max) {
+ padding: 75px 0 80px;
+ }
+ display: flex;
+ flex-direction: column;
+ min-height:100vh;
+ overflow: auto;
+}
+
+
+/*------------------------------
+ Create and Upload Button
+--------------------------------*/
+.feb-actions {
+ position: fixed;
+ bottom: 30px;
+ right: 30px;
+
+ .dropdown-menu {
+ min-width: 55px;
+ width: 55px;
+ text-align: center;
+ background: transparent;
+ box-shadow: none;
+ margin: 0;
+ }
+
+ &.open {
+ .feba-btn {
+ .scale(1);
+
+ &:first-child {
+ .animation-name(feba-btn-anim);
+ .animation-duration(300ms);
+ }
+
+ &:last-child {
+ .animation-name(feba-btn-anim);
+ .animation-duration(100ms);
+ }
+ }
+
+ .feba-toggle {
+ background: darken(@red, 10%);
+
+ & > span {
+ transform: translateZ(1px) rotate(135deg);
+ }
+ }
+ }
+}
+
+.feba-toggle {
+ width: 55px;
+ height: 55px;
+ line-height: 55px;
+ border-radius: 50%;
+ background: @red;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);
+ display: inline-block;
+ text-align: center;
+ border: 0;
+ padding: 0;
+
+ span {
+ display: inline-block;
+ height: 100%;
+ width: 100%;
+ }
+
+ i {
+ color: @white;
+ font-size: 17px;
+ line-height: 55px;
+ }
+}
+
+.feba-toggle,
+.feba-toggle > span {
+ .transition(all);
+ .transition-duration(250ms);
+ .backface-visibility(hidden);
+}
+
+.feba-btn {
+ width: 40px;
+ margin-top: 10px;
+ height: 40px;
+ border-radius: 50%;
+ text-align: center;
+ display: inline-block;
+ color: @white;
+ line-height: 40px;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ position: relative;
+
+ &:hover,
+ &:focus {
+ color: @white;
+ }
+
+ label {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ cursor: pointer;
+ }
+}
+
+.feba-bucket {
+ background: @orange;
+}
+
+.feba-upload {
+ background: @yellow;
+}
+
+@-webkit-keyframes feba-btn-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ }
+}
+
+@keyframes feba-btn-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ }
+}
diff --git a/browser/app/less/inc/font.less b/browser/app/less/inc/font.less
new file mode 100644
index 000000000..bdb7f98d8
--- /dev/null
+++ b/browser/app/less/inc/font.less
@@ -0,0 +1,7 @@
+@font-face {
+ font-family: Lato;
+ src: url('../../fonts/lato/lato-normal.woff2') format('woff2'),
+ url('../../fonts/lato/lato-normal.woff') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/form.less b/browser/app/less/inc/form.less
new file mode 100644
index 000000000..385dc52d9
--- /dev/null
+++ b/browser/app/less/inc/form.less
@@ -0,0 +1,291 @@
+.form-control {
+ border: 0;
+ border-bottom: 1px solid @input-border;
+ color: #32393F;
+ padding: 5px;
+ width: 100%;
+ font-size: 13px;
+ background-color: transparent;
+}
+
+.form-control--path {
+ color: @link-color;
+ padding: 5px 5px 6px 0;
+ font-size: 16px;
+ .placeholder(@text-muted-color)
+}
+
+select.form-control {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ border-radius: 0;
+ background: url(../../img/select-caret.svg) no-repeat bottom 7px right;
+
+}
+
+
+/*--------------------------
+ Input Group
+----------------------------*/
+.input-group {
+ position: relative;
+ &:not(:last-child) {
+ margin-bottom: 25px;
+ }
+
+ label:not(.ig-label) {
+ font-size: 13px;
+ display: block;
+ margin-bottom: 10px;
+ }
+}
+
+.ig-label {
+ position: absolute;
+ text-align: center;
+ bottom: 7px;
+ left: 0;
+ width: 100%;
+ .transition(all);
+ .transition-duration(250ms);
+ padding: 2px 0 3px;
+ border-radius: 2px;
+ font-weight: 400;
+}
+
+.ig-helpers {
+ z-index: 1;
+ width: 100%;
+ left: 0;
+
+ &,
+ &:before,
+ &:after {
+ position: absolute;
+ height: 2px;
+ bottom: 0;
+ }
+
+ &:before,
+ &:after {
+ content: '';
+ width: 0;
+ .transition(all);
+ .transition-duration(250ms);
+ background-color: #03A9F4;
+ }
+
+ &:before {
+ left: 50%;
+ }
+
+ &:after {
+ right: 50%;
+ }
+}
+
+.ig-text {
+ width: 100%;
+ height: 40px;
+ border: 0;
+ background: transparent !important;
+ text-align: center;
+ position: relative;
+ z-index: 1;
+ border-bottom: 1px solid #eee;
+ color: #32393F;
+ box-shadow: none;
+ font-size: 13px;
+
+
+ &:focus + .ig-helpers {
+ &:before,
+ &:after {
+ width: 50%;
+ }
+ }
+
+ &:valid,
+ &:disabled,
+ &:focus {
+ & ~ .ig-label {
+ bottom: 35px;
+ font-size: 13px;
+ z-index: 1;
+ }
+ }
+
+ &:disabled {
+ .opacity(0.5);
+ }
+}
+
+.ig-dark {
+ .ig-text {
+ color: @white !important;
+ border-color: rgba(255,255,255,0.1) !important;
+ }
+
+ .ig-helpers {
+ &:before,
+ &:after {
+ background-color: #dfdfdf;
+ height: 1px;
+ }
+ }
+}
+
+.ig-left {
+ .ig-label,
+ .ig-text {
+ text-align: left;
+ }
+}
+
+.ig-error {
+ .ig-label {
+ color: #E23F3F;
+ }
+ .ig-helpers i {
+ &:first-child,
+ &:first-child:before,
+ &:first-child:after {
+ background: rgba(226, 63, 63, 0.43);
+ }
+ &:last-child,
+ &:last-child:before,
+ &:last-child:after {
+ background: #E23F3F !important;
+ }
+ }
+ &:after {
+ content: "\f05a";
+ font-family: 'Font Awesome 5 Free';
+ position: absolute;
+ top: 17px;
+ right: 9px;
+ font-size: 20px;
+ color: #D33D3E;
+ }
+}
+
+.ig-search-dark {
+ &:before {
+ font-family: @font-family-icon;
+ font-weight: 900;
+ content: '\f002';
+ font-size: 15px;
+ position: absolute;
+ left: 2px;
+ top: 8px;
+ color: rgba(0, 0, 0, 0.5);
+ }
+
+ .ig-text {
+ padding-left: 25px;
+ .placeholder(rgba(0, 0, 0, 0.5))
+ }
+}
+
+.ig-search {
+ &:before {
+ font-family: @font-family-icon;
+ font-weight: 900;
+ content: '\f002';
+ font-size: 15px;
+ position: absolute;
+ left: 2px;
+ top: 8px;
+ color: rgba(255, 255, 255, 0.5);
+ }
+
+ .ig-text {
+ padding-left: 25px;
+ .placeholder(rgba(255, 255, 255, 0.5))
+ }
+}
+
+
+/*--------------------------
+ Share Spinners
+----------------------------*/
+.set-expire {
+ border: 1px solid @input-border;
+ margin: 35px 0 30px;
+ position: relative;
+
+ &:before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ }
+}
+
+.set-expire-item {
+ padding: 9px 5px 3px;
+ position: relative;
+ display: table-cell;
+ width: 1%;
+ text-align: center;
+ .user-select(none);
+
+ &:not(:last-child) {
+ border-right: 1px solid @input-border;
+ }
+}
+
+.set-expire-title {
+ font-size: 10px;
+ text-transform: uppercase;
+}
+
+.set-expire-value {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ left: -8px;
+
+ input {
+ .user-select(none);
+ font-size: 20px;
+ text-align: center;
+ position: relative;
+ right: -15px;
+ border: 0;
+ color: @text-strong-color;
+ padding: 0;
+ height: 25px;
+ width: 100%;
+ font-weight: normal;
+ }
+}
+
+.set-expire-decrease,
+.set-expire-increase {
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ background: url(../../img/arrow.svg) no-repeat center;
+ background-size: 85%;
+ left: 50%;
+ margin-left: -10px;
+ .opacity(0.2);
+ cursor: pointer;
+
+ &:hover {
+ .opacity(0.5);
+ }
+}
+
+.set-expire-increase {
+ top: -25px;
+}
+
+.set-expire-decrease {
+ bottom: -27px;
+ .rotate(-180deg);
+}
diff --git a/browser/app/less/inc/generics.less b/browser/app/less/inc/generics.less
new file mode 100644
index 000000000..1c46dfc60
--- /dev/null
+++ b/browser/app/less/inc/generics.less
@@ -0,0 +1,83 @@
+/*----------------------------
+ Text Alignment
+-----------------------------*/
+.text-center { text-align: center !important; }
+.text-left { text-align: left !important; }
+.text-right { text-align: right !important; }
+
+
+/*----------------------------
+ Float
+-----------------------------*/
+.clearfix { .clearfix(); }
+.pull-right { float: right !important; }
+.pull-left { float: left !important; }
+
+
+/*----------------------------
+ Position
+-----------------------------*/
+.p-relative { position: relative; }
+
+
+/*---------------------------------------------------------------------------
+ Generate Margin Class
+ margin, margin-top, margin-bottom, margin-left, margin-right
+----------------------------------------------------------------------------*/
+
+.margin (@label, @size: 1, @key:1) when (@size =< 30){
+ .m-@{key} {
+ margin: @size !important;
+ }
+
+ .m-t-@{key} {
+ margin-top: @size !important;
+ }
+
+ .m-b-@{key} {
+ margin-bottom: @size !important;
+ }
+
+ .m-l-@{key} {
+ margin-left: @size !important;
+ }
+
+ .m-r-@{key} {
+ margin-right: @size !important;
+ }
+
+ .margin(@label - 5; @size + 5; @key + 5);
+}
+
+.margin(25, 0px, 0);
+
+
+/*---------------------------------------------------------------------------
+ Generate Padding Class
+ padding, padding-top, padding-bottom, padding-left, padding-right
+----------------------------------------------------------------------------*/
+.padding (@label, @size: 1, @key:1) when (@size =< 30){
+ .p-@{key} {
+ padding: @size !important;
+ }
+
+ .p-t-@{key} {
+ padding-top: @size !important;
+ }
+
+ .p-b-@{key} {
+ padding-bottom: @size !important;
+ }
+
+ .p-l-@{key} {
+ padding-left: @size !important;
+ }
+
+ .p-r-@{key} {
+ padding-right: @size !important;
+ }
+
+ .padding(@label - 5; @size + 5; @key + 5);
+}
+
+.padding(25, 0px, 0);
\ No newline at end of file
diff --git a/browser/app/less/inc/header.less b/browser/app/less/inc/header.less
new file mode 100644
index 000000000..80a1923c9
--- /dev/null
+++ b/browser/app/less/inc/header.less
@@ -0,0 +1,264 @@
+/*--------------------------
+ Header
+----------------------------*/
+.fe-header {
+ @media(min-width: (@screen-sm-min - 100)) {
+ position: relative;
+ padding: 40px 40px 20px 45px;
+ }
+
+ @media(max-width: (@screen-xs-max - 100)) {
+ padding: 20px;
+ }
+
+ h2 {
+ font-size: 16px;
+ font-weight: normal;
+ margin: 0;
+
+ @media(min-width: (@screen-md-min)) {
+ width: calc(100% - 60px);
+ }
+
+ & > span {
+ margin-bottom: 7px;
+ display: inline-block;
+
+ &:not(:first-child) {
+ &:before {
+ content: '/';
+ margin: 0 4px;
+ color: @text-color;
+ }
+ }
+ &:last-of-type {
+ &:after {
+ content: '/';
+ margin: 0 4px;
+ color: @text-color;
+ }
+ }
+ }
+ }
+
+ p {
+ margin-top: 7px;
+ }
+}
+
+
+/*--------------------------
+ Edit path
+----------------------------*/
+.fe-edit {
+ font-size: 20px;
+ color: @link-color;
+ margin-left: 4px;
+
+ i {
+ vertical-align: middle;
+ }
+}
+
+/*--------------------------
+ Disk used
+----------------------------*/
+.feh-used {
+ margin-top: 12px;
+ max-width: 285px;
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ max-width: 100%;
+ font-size: 12px;
+ }
+
+ & > ul {
+ margin-top: 7px;
+ list-style: none;
+ padding: 0;
+
+ & > li {
+ padding-right: 0;
+ display: inline-block;
+ }
+ }
+}
+
+.fehu-chart {
+ height: 5px;
+ background: #eee;
+ position: relative;
+ border-radius: 2px;
+ overflow: hidden;
+
+ & > div {
+ position: absolute;
+ left: 0;
+ height: 100%;
+ background: @link-color;
+ }
+}
+
+/*--------------------------
+ Header Actions
+----------------------------*/
+.feh-actions {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ right: 35px;
+ top: 30px;
+ z-index: 11;
+
+ @media(max-width: (@screen-sm-max)) {
+ top: 7px;
+ right: 10px;
+ position: fixed;
+ }
+
+ & > li {
+ display: inline-block;
+ text-align: right;
+ vertical-align: top;
+ line-height: 100%;
+
+ & > a,
+ & > .btn-group > button {
+ display: block;
+ height: 45px;
+ min-width: 45px;
+ text-align: center;
+ border-radius: 50%;
+ padding: 0;
+ border: 0;
+ background: none;
+
+ @media(min-width: @screen-md-min) {
+ color: #7B7B7B;
+ font-size: 21px;
+ line-height: 45px;
+ .transition(all);
+ .transition-duration(300ms);
+
+ &:hover {
+ background: rgba(0,0,0,0.09);
+ }
+ }
+
+ @media(max-width: (@screen-sm-max)) {
+ background: url(../../img/more-h-light.svg) no-repeat center;
+
+ .fa-bars {
+ display: none;
+ }
+ }
+
+ }
+ }
+}
+
+
+/*--------------------------
+ Mobile Header
+----------------------------*/
+@media(max-width: @screen-sm-max) {
+ .fe-header-mobile {
+ background-color: @dark-gray;
+ padding: 10px 50px 9px 12px;
+ text-align: center;
+ position: fixed;
+ z-index: 10;
+ box-shadow: 0 0 10px rgba(0,0,0,0.3);
+ left: 0;
+ top: 0;
+ width: 100%;
+
+ .mh-logo {
+ height: 35px;
+ position: relative;
+ top: 4px;
+ }
+ }
+
+ .feh-trigger {
+ width: 41px;
+ height: 41px;
+ cursor: pointer;
+ float: left;
+ position: relative;
+ text-align: center;
+
+ &:before,
+ &:after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+
+ }
+
+ &:after {
+ z-index: 1;
+ }
+
+ &:before {
+ background: rgba(255, 255, 255, 0.1);
+ .transition(all);
+ .transition-duration(300ms);
+ .scale(0);
+ }
+ }
+
+ .feht-toggled {
+ &:before {
+ .scale(1);
+ }
+
+ .feht-lines {
+ .rotate(180deg);
+
+ & > div {
+ &.top {
+ width: 12px;
+ transform: translateX(8px) translateY(1px) rotate(45deg);
+ -webkit-transform: translateX(8px) translateY(1px) rotate(45deg);
+ }
+
+ &.bottom {
+ width: 12px;
+ transform: translateX(8px) translateY(-1px) rotate(-45deg);
+ -webkit-transform: translateX(8px) translateY(-1px) rotate(-45deg);
+ }
+ }
+ }
+ }
+
+ .feht-lines,
+ .feht-lines > div {
+ .transition(all);
+ .transition-duration(300ms);
+ }
+
+ .feht-lines {
+ width: 18px;
+ height: 12px;
+ display: inline-block;
+ margin-top: 14px;
+
+ & > div {
+ background-color: #EAEAEA;
+ width: 18px;
+ height: 2px;
+
+ &.center {
+ margin: 3px 0;
+ }
+ }
+ }
+}
+
+
diff --git a/browser/app/less/inc/ie-warning.less b/browser/app/less/inc/ie-warning.less
new file mode 100644
index 000000000..c4bcc0a50
--- /dev/null
+++ b/browser/app/less/inc/ie-warning.less
@@ -0,0 +1,81 @@
+.ie-warning {
+ background-color: #ff5252;
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ left: 0;
+ top: 0;
+ text-align: center;
+
+ &:before {
+ width: 1px;
+ content: '';
+ height: 100%;
+ }
+
+ &:before,
+ .iw-inner {
+ display: inline-block;
+ vertical-align: middle;
+ }
+}
+
+.iw-inner {
+ width: 470px;
+ height: 300px;
+ background-color: @white;
+ border-radius: 5px;
+ padding: 40px;
+ position: relative;
+
+ ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ width: 230px;
+ margin-left: 80px;
+ margin-top: 16px;
+
+ & > li {
+ float: left;
+
+ & > a {
+ display: block;
+ padding: 10px 15px 7px;
+ font-size: 14px;
+ margin: 0 1px;
+ border-radius: 3px;
+
+ &:hover {
+ background: #eee;
+ }
+
+ img {
+ height: 40px;
+ margin-bottom: 5px;
+ }
+ }
+ }
+ }
+}
+
+.iwi-icon {
+ color: #ff5252;
+ font-size: 40px;
+ display: block;
+ line-height: 100%;
+ margin-bottom: 15px;
+}
+
+.iwi-skip {
+ position: absolute;
+ left: 0;
+ bottom: -35px;
+ width: 100%;
+ color: rgba(255, 255, 255, 0.6);
+ cursor: pointer;
+
+ &:hover {
+ color: @white;
+ }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/list.less b/browser/app/less/inc/list.less
new file mode 100644
index 000000000..2414b2cd7
--- /dev/null
+++ b/browser/app/less/inc/list.less
@@ -0,0 +1,499 @@
+/*--------------------------
+ Row
+----------------------------*/
+.fesl-row {
+ position: relative;
+
+ @media (min-width: (@screen-sm-min - 100px)) {
+ padding: 5px 20px 5px 40px;
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ }
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ padding: 5px 20px;
+ }
+
+ .clearfix();
+}
+
+header.fesl-row {
+ @media (min-width:(@screen-sm-min - 100px)) {
+ margin-bottom: 20px;
+ border-bottom: 1px solid lighten(@text-muted-color, 20%);
+ padding-left: 30px;
+
+ .fesl-item,
+ .fesli-sort {
+ .transition(all);
+ .transition-duration(300ms);
+ }
+
+ .fesl-item {
+ cursor: pointer;
+ color: @text-color;
+ font-weight: 500;
+ margin-bottom: -5px;
+
+ & > .fesli-sort {
+ float: right;
+ margin: 4px 0 0;
+ .opacity(0);
+ color: @dark-gray;
+ font-size: 14px;
+ }
+ & > .fesli-sort--active {
+ .opacity(0.5);
+ }
+
+ &:hover:not(.fesl-item-actions) {
+ background: lighten(@text-muted-color, 22%);
+ color: @dark-gray;
+
+ & > .fesli-sort {
+ .opacity(0.5);
+ }
+ }
+ }
+ }
+
+ @media (max-width:(@screen-xs-max - 100px)) {
+ display: none;
+ }
+}
+
+.list-type(@background, @icon) {
+ .fis-icon {
+ background-color: @background;
+
+ &:before {
+ content: @icon;
+ }
+ }
+}
+
+div.fesl-row {
+ border-bottom: 1px solid transparent;
+ cursor: default;
+ .transition(background-color);
+ .transition-duration(500ms);
+
+ @media (max-width: (@screen-xs-max - 100px)) {
+ padding: 5px 20px;
+ }
+
+ &:not(.fesl-row-selected) {
+ &:nth-child(even) {
+ background-color: @list-row-even-bg;
+ }
+ }
+
+ &:hover {
+ .fis-icon {
+ &:before {
+ .opacity(0)
+ }
+ }
+
+ .fis-helper {
+ &:before {
+ .opacity(1);
+ }
+ }
+ }
+
+ .fesl-item-name {
+ a {
+ cursor: pointer;
+ }
+ }
+
+ /*--------------------------
+ Icons
+ ----------------------------*/
+ &[data-type=folder] {
+ .list-type(#a1d6dd, '\f07b');
+ }
+ &[data-type=pdf] {.list-type(#fa7775, '\f1c1'); }
+ &[data-type=zip] { .list-type(#427089, '\f1c6'); }
+ &[data-type=audio] { .list-type(#009688, '\f1c7'); }
+ &[data-type=code] { .list-type(#997867, "\f1c9"); }
+ &[data-type=excel] { .list-type(#64c866, '\f1c3'); }
+ &[data-type=image] { .list-type(#f06292, '\f1c5'); }
+ &[data-type=video] { .list-type(#f8c363, '\f1c8'); }
+ &[data-type=other] { .list-type(#afafaf, '\f15b'); }
+ &[data-type=text] { .list-type(#8a8a8a, '\f15c'); }
+ &[data-type=doc] { .list-type(#2196f5, '\f1c2'); }
+ &[data-type=presentation] { .list-type(#896ea6, '\f1c4'); }
+
+ &.fesl-loading{
+ &:before {
+ content: '';
+ }
+
+ &:after {
+ .list-loader(20px, 20px, rgba(255, 255, 255, 0.5), @white);
+ left: 57px;
+ top: 17px;
+
+ @media (max-width: (@screen-xs-max - 100px)) {
+ left: 27px;
+ }
+ }
+
+ }
+}
+
+.fesl-row-selected {
+ background-color: @list-row-selected-bg;
+
+ &, .fesl-item a {
+ color: darken(@text-color, 10%);
+ }
+}
+
+.fi-select {
+ float: left;
+ position: relative;
+ width: 35px;
+ height: 35px;
+ margin: 3px 0;
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ margin-right: 15px;
+ }
+
+ input {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 35px;
+ height: 35px;
+ z-index: 8;
+ opacity: 0;
+ cursor: pointer;
+
+ &:checked {
+ & ~ .fis-icon {
+ background-color: #32393F;
+
+ &:before {
+ opacity: 0;
+ }
+ }
+
+ & ~ .fis-helper {
+ &:before {
+ .scale(0);
+ }
+
+ &:after {
+ .scale(1);
+ }
+ }
+ }
+ }
+}
+
+.fis-icon {
+ display: inline-block;
+ vertical-align: top;
+ border-radius: 50%;
+ width: 35px;
+ height: 35px;
+ .transition(background-color);
+ .transition-duration(250ms);
+
+ &:before {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ position: absolute;
+ border-radius: 50%;
+ font-family: @font-family-icon;
+ line-height: 35px;
+ font-size: 16px;
+ color: @white;
+ .transition(all);
+ .transition-duration(300ms);
+ font-style: normal;
+ }
+}
+
+.fis-helper {
+ &:before,
+ &:after {
+ position: absolute;
+ .transition(all);
+ .transition-duration(250ms);
+ }
+
+ &:before {
+ content: '';
+ width: 15px;
+ height: 15px;
+ border: 2px solid @white;
+ z-index: 7;
+ border-radius: 2px;
+ top: 10px;
+ left: 10px;
+ opacity: 0;
+ }
+
+ &:after {
+ font-family: @font-family-icon;
+ font-weight: 900;
+ content: '\f00c';
+ top: 8px;
+ left: 9px;
+ color: @white;
+ font-size: 14px;
+ .scale(0);
+ }
+}
+
+
+/*--------------------------
+ Files and Folders
+----------------------------*/
+.fesl-item {
+ display: block;
+
+ a {
+ color: darken(@text-color, 5%);
+ }
+
+ @media(min-width: (@screen-sm-min - 100px)) {
+ &:not(.fesl-item-actions):not(.fesl-item-icon) {
+ text-overflow: ellipsis;
+ padding: 10px 15px;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+
+ &.fesl-item-name {
+ flex: 3;
+ }
+
+ &.fesl-item-size {
+ width: 140px;
+ }
+
+ &.fesl-item-modified {
+ width: 190px;
+ }
+
+ &.fesl-item-actions {
+ width: 40px;
+ }
+ }
+
+ @media(max-width: (@screen-xs-max - 100px)) {
+ padding: 0;
+
+ &.fesl-item-name {
+ width: 100%;
+ margin-bottom: 3px;
+ }
+
+ &.fesl-item-size,
+ &.fesl-item-modified {
+ font-size: 12px;
+ color: #B5B5B5;
+ float: left;
+ }
+
+ &.fesl-item-modified {
+ max-width: 72px;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+
+ &.fesl-item-size {
+ margin-right: 10px;
+ }
+
+ &.fesl-item-actions {
+ position: absolute;
+ top: 5px;
+ right: 10px;
+ }
+ }
+}
+
+
+/*--------------------------
+ Action buttons
+----------------------------*/
+.fia-toggle {
+ height: 36px;
+ width: 36px;
+ background: transparent url(../../img/more-h.svg) no-repeat center;
+ position: relative;
+ top: 3px;
+ .opacity(0.4);
+
+ &:hover {
+ .opacity(0.7);
+ }
+}
+
+.fesl-item-actions {
+ .dropdown-menu {
+ background-color: transparent;
+ box-shadow: none;
+ padding: 0;
+ right: 38px;
+ left: auto;
+ margin: 0;
+ height: 100%;
+ text-align: right;
+ white-space: nowrap;
+ }
+
+ .dropdown {
+ &.open {
+ .dropdown-menu {
+ .fiad-action {
+ right: 0;
+ }
+ }
+ }
+ }
+}
+
+.fiad-action {
+ height: 35px;
+ width: 35px;
+ background: @amber;
+ display: inline-block;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 35px;
+ font-weight: normal;
+ position: relative;
+ top: 4px;
+ margin-left: 5px;
+ .animation-name(fiad-action-anim);
+ .transform-origin(center center);
+ .backface-visibility(none);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+
+ &:nth-child(2) {
+ .animation-duration(100ms);
+ }
+
+ &:nth-child(1) {
+ .animation-duration(250ms);
+ }
+
+ & > i {
+ font-size: 14px;
+ color: @white;
+ }
+
+ &:hover {
+ background-color: darken(@amber, 3%);
+ }
+}
+
+.list-actions {
+ position: fixed;
+ .translate3d(0, -100%, 0);
+ .opacity(0);
+ .transition(all);
+ .transition-duration(200ms);
+ padding: 20px 70px 20px 25px;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background-color: @brand-primary;
+ z-index: 20;
+ box-shadow: 0 0 10px rgba(0,0,0,0.3);
+ text-align: center;
+
+ &.list-actions-toggled {
+ .translate3d(0, 0, 0);
+ .opacity(1);
+ }
+}
+
+.la-close {
+ position: absolute;
+ right: 20px;
+ top: 0;
+ color: #fff;
+ width: 30px;
+ height: 30px;
+ border-radius: 50%;
+ text-align: center;
+ line-height: 30px !important;
+ background: rgba(255, 255, 255, 0.1);
+ font-weight: normal;
+ bottom: 0;
+ margin: auto;
+ cursor: pointer;
+
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.2);
+ }
+}
+
+.la-label {
+ color: @white;
+ float: left;
+ padding: 4px 0;
+
+ .fas {
+ font-size: 22px;
+ vertical-align: top;
+ margin-right: 10px;
+ margin-top: -1px;
+ }
+}
+
+.la-actions {
+ button {
+ background-color: transparent;
+ border: 2px solid rgba(255,255,255,0.9);
+ color: @white;
+ border-radius: 2px;
+ padding: 5px 10px;
+ font-size: 13px;
+ .transition(all);
+ .transition-duration(300ms);
+ margin-left: 10px;
+
+ &:hover {
+ background-color: @white;
+ color: @brand-primary;
+ }
+ }
+}
+
+@-webkit-keyframes fiad-action-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ right: -20px;
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ right: 0;
+ }
+}
+
+@keyframes fiad-action-anim {
+ from {
+ .scale(0);
+ .opacity(0);
+ right: -20px;
+ }
+ to {
+ .scale(1);
+ .opacity(1);
+ right: 0;
+ }
+}
diff --git a/browser/app/less/inc/login.less b/browser/app/less/inc/login.less
new file mode 100644
index 000000000..0a5ace5ab
--- /dev/null
+++ b/browser/app/less/inc/login.less
@@ -0,0 +1,140 @@
+.login {
+ height: 100vh;
+ min-height: 500px;
+ background: #002a37;
+
+ text-align: center;
+ &:before {
+ height: ~"calc(100% - 110px)";
+ width: 1px;
+ content: "";
+ }
+}
+
+.l-wrap,
+.login:before {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.l-wrap {
+ width: 80%;
+ max-width: 500px;
+ margin-top: -50px;
+ &.toggled {
+ display: inline-block;
+ }
+
+ .input-group:not(:last-child) {
+ margin-bottom: 40px;
+ }
+}
+
+.l-footer {
+ height: 110px;
+ padding: 0 50px;
+}
+
+.lf-logo {
+ float: right;
+ img {
+ width: 40px;
+ }
+}
+
+.lf-server {
+ float: left;
+ color: rgba(255, 255, 255, 0.4);
+ font-size: 20px;
+ font-weight: 400;
+ padding-top: 40px;
+}
+
+@media (max-width: @screen-sm-min) {
+ .lf-logo,
+ .lf-server {
+ float: none;
+ display: block;
+ text-align: center;
+ width: 100%;
+ }
+
+ .lf-logo {
+ margin-bottom: 5px;
+ }
+
+ .lf-server {
+ font-size: 15px;
+ }
+}
+
+.lw-btn {
+ width: 50px;
+ height: 50px;
+ border: 1px solid @white;
+ display: inline-block;
+ border-radius: 50%;
+ font-size: 22px;
+ color: @white;
+ .transition(all);
+ .transition-duration(300ms);
+ opacity: 0.3;
+ background-color: transparent;
+ line-height: 45px;
+ padding: 0;
+ &:hover {
+ color: @white;
+ opacity: 0.8;
+ border-color: @white;
+ }
+
+ i {
+ display: block;
+ width: 100%;
+ padding-left: 3px;
+ }
+}
+
+.openid-login {
+ margin-top: 30px;
+}
+
+.openid-btn {
+ display: inline-block;
+ color: @link-color;
+ margin-top: 30px;
+ border-width: 1px;
+ border-style: solid;
+ opacity: 0.6;
+ font-size: 14px;
+ &:hover {
+ opacity: 1;
+ cursor: pointer;
+ }
+}
+
+.or {
+ display:flex;
+ justify-content:center;
+ align-items: center;
+ color:grey;
+ }
+
+.or:after,
+.or:before {
+ content: "";
+ display: block;
+ background: grey;
+ width: 10px;
+ height: 1px;
+ margin: 0 10px;
+}
+
+/*------------------------------
+ Chrome autofill fix
+-------------------------------*/
+input:-webkit-autofill {
+ -webkit-box-shadow:0 0 0 50px #002a37 inset !important;
+ -webkit-text-fill-color: @white !important;
+ caret-color: white;
+}
diff --git a/browser/app/less/inc/misc.less b/browser/app/less/inc/misc.less
new file mode 100644
index 000000000..cddfddf89
--- /dev/null
+++ b/browser/app/less/inc/misc.less
@@ -0,0 +1,158 @@
+/*--------------------------
+ Close
+----------------------------*/
+.close-variant(@color, @bg-color, @color-hover, @bg-color-hover) {
+ span {
+ background-color: @bg-color;
+ color: @color;
+ }
+
+ &:hover,
+ &:focus {
+ span {
+ background-color: @bg-color-hover;
+ color: @color-hover;
+ }
+ }
+}
+
+.close {
+ right: 15px;
+ font-weight: normal;
+ opacity: 1;
+ font-size: 18px;
+ position: absolute;
+ text-align: center;
+ top: 16px;
+ z-index: 1;
+ padding: 0;
+ border: 0;
+ background-color: transparent;
+
+ span {
+ width: 25px;
+ height: 25px;
+ display: block;
+ border-radius: 50%;
+ line-height: 24px;
+ text-shadow: none;
+ }
+
+ &:not(.close-alt) {
+ .close-variant(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.1), @white, rgba(255, 255, 255, 0.2));
+ }
+}
+
+.close-alt {
+ .close-variant(#989898, #efefef, #7b7b7b, #e8e8e8);
+}
+
+
+/*--------------------------
+ Hidden
+----------------------------*/
+.hidden {
+ display: none !important;
+}
+
+
+/*--------------------------
+ Copy text
+----------------------------*/
+.copy-text {
+ input {
+ width: 100%;
+ border-radius: 1px;
+ border: 1px solid @input-border;
+ padding: 7px 12px;
+ font-size: 13px;
+ line-height: 100%;
+ cursor: text;
+ .transition(border-color);
+ .transition-duration(300ms);
+
+ &:hover {
+ border-color: darken(@input-border, 5%);
+ }
+ }
+
+ svg {
+ display: block;
+ margin: 0 auto 5px;
+ }
+}
+
+/*--------------------------
+ Sharing
+----------------------------*/
+.share-availability {
+ margin-bottom: 40px;
+
+ &:before,
+ &:after {
+ position: absolute;
+ bottom: -30px;
+ font-size: 10px;
+ }
+
+ &:before {
+ content: '01 Sec';
+ left: 0;
+ }
+
+ &:after {
+ content: '7 days';
+ right: 0;
+ }
+}
+
+
+.modal-aheader {
+ height: 100px;
+
+ &:before {
+ height: 0 !important;
+ }
+
+ .modal-dialog {
+ margin: 0;
+ vertical-align: top;
+ }
+}
+
+.loading {
+ position: absolute;
+ margin: auto;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ border-top: 1px solid @loading-track-bg;
+ border-right: 1px solid @loading-track-bg;
+ border-bottom: 1px solid @loading-track-bg;
+ border-left: 1px solid @loading-point-bg;
+ transform: translateZ(0);
+ animation: loading 1.1s infinite linear;
+ border-radius: 50%;
+ width: 35px;
+ height: 35px;
+ margin-top: 30px;
+}
+
+@-webkit-keyframes loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes loading {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
diff --git a/browser/app/less/inc/mixin.less b/browser/app/less/inc/mixin.less
new file mode 100644
index 000000000..0ba2a5e97
--- /dev/null
+++ b/browser/app/less/inc/mixin.less
@@ -0,0 +1,61 @@
+/*--------------------------
+ User Select
+----------------------------*/
+.user-select(@value) {
+ -webkit-user-select: @value;
+ -moz-user-select: @value;
+ -ms-user-select: @value;
+ user-select: @value;
+}
+
+
+/*----------------------------------------
+ CSS Animations based on animate.css
+-----------------------------------------*/
+.animated(@name, @duration) {
+ -webkit-animation-name: @name;
+ animation-name: @name;
+ -webkit-animation-duration: @duration;
+ animation-duration: @duration;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+/*-------------------------------------------------
+ For loop mixin for generate custom classes
+--------------------------------------------------*/
+.for(@i, @n) {.-each(@i)}
+.for(@n) when (isnumber(@n)) {.for(1, @n)}
+.for(@i, @n) when not (@i = @n) {
+ .for((@i + (@n - @i) / abs(@n - @i)), @n);
+}
+
+.for(@array) when (default()) {.for-impl_(length(@array))}
+.for-impl_(@i) when (@i > 1) {.for-impl_((@i - 1))}
+.for-impl_(@i) when (@i > 0) {.-each(extract(@array, @i))}
+
+/*----------------------------------------
+ List Loader
+-----------------------------------------*/
+.list-loader(@width, @height, @borderColor, @borderColorBottom) {
+ content: '';
+ width: @width;
+ height: @height;
+ border-radius: 50%;
+ .animated(zoomIn, 500ms);
+ border: 2px solid @borderColor;
+ border-bottom-color: @borderColorBottom;
+ position: absolute;
+ z-index: 1;
+ -webkit-animation: zoomIn 250ms, spin 700ms 250ms infinite linear;
+ animation: zoomIn 250ms, spin 700ms 250ms infinite linear;
+}
+
+/*----------------------------------------
+ Placeholder
+-----------------------------------------*/
+.placeholder(@color) {
+ ::-webkit-input-placeholder { color: @color }
+ ::-moz-placeholder { color: @color }
+ :-ms-input-placeholder { color: @color }
+}
\ No newline at end of file
diff --git a/browser/app/less/inc/modal.less b/browser/app/less/inc/modal.less
new file mode 100644
index 000000000..93265a7bc
--- /dev/null
+++ b/browser/app/less/inc/modal.less
@@ -0,0 +1,298 @@
+/*--------------------------
+ Modal
+----------------------------*/
+.modal {
+ @media(min-width: @screen-sm-min) {
+ text-align: center;
+
+ &:before {
+ content: '';
+ height: 100%;
+ width: 1px;
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ .modal-dialog {
+ text-align: left;
+ margin: 10px auto;
+ display: inline-block;
+ vertical-align: middle;
+ }
+ }
+}
+
+.modal-dark {
+ .modal-header {
+ color: rgba(255, 255, 255, 0.4);
+
+ small {
+ color: rgba(255, 255, 255, 0.2);
+ }
+ }
+
+ .modal-content {
+ background-color: #00303f;
+ }
+}
+
+.modal-backdrop {
+ .animated(fadeIn, 200ms);
+}
+
+.modal-dialog {
+ .animated(zoomIn, 200ms);
+}
+
+.modal-header {
+ color: @text-strong-color;
+ position: relative;
+
+ small {
+ display: block;
+ text-transform: none;
+ font-size: 12px;
+ margin-top: 5px;
+ color: #a8a8a8;
+ }
+}
+
+.modal-content {
+ border-radius: 3px;
+ box-shadow: none;
+}
+
+.modal-footer {
+ padding: 0 30px 30px;
+ text-align: center;
+}
+
+
+/*--------------------------
+ Dialog
+----------------------------*/
+.modal-confirm {
+ .modal-dialog {
+ text-align: center;
+ }
+}
+
+.mc-icon {
+ margin: 0 0 10px;
+
+ & > i {
+ font-size: 60px;
+ }
+}
+
+.mci-red {
+ color: #ff8f8f;
+}
+
+.mci-amber {
+ color: @amber;
+}
+
+.mci-green {
+ color: #64e096;
+}
+
+.mc-text {
+ color: @text-strong-color;
+}
+
+.mc-sub {
+ color: @text-muted-color;
+ margin-top: 5px;
+ font-size: 13px;
+}
+//--------------------------
+
+
+/*--------------------------
+ About
+----------------------------*/
+.modal-about {
+ @media (max-width: @screen-xs-max) {
+ text-align: center;
+
+ .modal-dialog {
+ max-width: 400px;
+ width: 90%;
+ margin: 20px auto 0;
+ }
+ }
+}
+
+.ma-inner {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ min-height: 350px;
+ position: relative;
+
+ @media (min-width: @screen-sm-min) {
+ &:before {
+ content: '';
+ width: 150px;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ border-radius: 3px 0 0 3px;
+ background-color: #022631;
+ }
+ }
+}
+
+.mai-item {
+ &:first-child {
+ width: 150px;
+ text-align: center;
+ }
+
+ &:last-child {
+ flex: 4;
+ padding: 30px;
+ }
+}
+
+.maii-logo {
+ width: 70px;
+ position: relative;
+
+}
+
+.maii-list {
+ list-style: none;
+ padding: 0;
+
+ & > li {
+ margin-bottom: 15px;
+
+ div {
+ color: rgba(255, 255, 255, 0.8);
+ text-transform: uppercase;
+ font-size: 14px;
+ }
+
+ small {
+ font-size: 13px;
+ color: rgba(255, 255, 255, 0.4);
+ }
+ }
+}
+//--------------------------
+
+
+/*--------------------------
+ Preferences
+----------------------------*/
+.toggle-password {
+ position: absolute;
+ bottom: 0 ;
+ right: 0;
+ width: 30px;
+ height: 30px;
+ border: 1px solid #eee;
+ border-radius: 0;
+ text-align: center;
+ cursor: pointer;
+ z-index: 10;
+ background-color: @white;
+ padding-top: 5px;
+
+ &.toggled {
+ background: #eee;
+ }
+}
+
+.has-toggle-password {
+ position: relative;
+}
+//--------------------------
+
+
+/*--------------------------
+ Policy
+----------------------------*/
+.pm-body {
+ padding-bottom: 30px;
+}
+
+.pmb-header {
+ margin-bottom: 35px;
+}
+
+.pmb-list {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ padding: 10px 35px;
+
+ &:nth-child(even) {
+ background-color: #F7F7F7;
+ }
+
+ .form-control {
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+header.pmb-list {
+ margin: 20px 0 10px;
+}
+
+.pmbl-item {
+ display: block;
+ font-size: 13px;
+
+ &:nth-child(1) {
+ flex: 2;
+ }
+
+ &:nth-child(2) {
+ margin: 0 25px;
+ width: 150px;
+ }
+
+ &:nth-child(3) {
+ width: 70px;
+ }
+}
+
+div.pmb-list {
+ select {
+ border: 0;
+ }
+
+ .pml-item {
+ &:not(:last-child) {
+ padding: 0 5px;
+ }
+ }
+}
+//--------------------------
+
+
+/*--------------------------
+ Create Bucket
+----------------------------*/
+.modal-create-bucket {
+ .modal-dialog {
+ position: fixed;
+ right: 25px;
+ bottom: 95px;
+ margin: 0;
+ height: 110px;
+ }
+
+ .modal-content {
+ width: 100%;
+ height: 100%;
+ }
+}
+//--------------------------
+
diff --git a/browser/app/less/inc/sidebar.less b/browser/app/less/inc/sidebar.less
new file mode 100644
index 000000000..62df6fd5e
--- /dev/null
+++ b/browser/app/less/inc/sidebar.less
@@ -0,0 +1,211 @@
+/*--------------------------
+ Sidebar
+----------------------------*/
+.fe-sidebar {
+ width: @fe-sidebar-width;
+ background-color: @fe-sidebar-bg;
+ position: fixed;
+ height: 100%;
+ overflow: hidden;
+ padding: 25px;
+
+ @media(min-width: @screen-md-min) {
+ .translate3d(0, 0, 0);
+ }
+
+ @media(max-width: @screen-sm-max) {
+ padding-top: 85px;
+ z-index: 9;
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.65);
+ .transition(all);
+ .transition-duration(300ms);
+ .translate3d((-@fe-sidebar-width - 15px), 0, 0);
+
+ &.toggled {
+ .translate3d(0, 0, 0);
+ }
+ }
+
+ a {
+ color: rgba(255, 255, 255, 0.75);
+
+ &:hover {
+ color: @white;
+ }
+ }
+}
+
+/*--------------------------
+ Header
+----------------------------*/
+.fes-header {
+ margin-bottom: 40px;
+
+ img,
+ h2 {
+ float: left;
+ }
+
+ h2 {
+ margin: 6px 0 0 13px;
+ font-weight: normal;
+ color: @white;
+ font-size: 20px;
+ }
+
+ img {
+ width: 20px;
+ }
+}
+
+/*--------------------------
+ List
+----------------------------*/
+.fesl-inner {
+ height: ~"calc(100vh - 260px)";
+ overflow: auto;
+ padding: 0;
+ margin: 0 -25px;
+
+ & li {
+ position: relative;
+
+ & > a {
+ display: block;
+ padding: 10px 45px 12px 55px;
+ word-wrap: break-word;
+
+ &:before {
+ font-family: 'Font Awesome 5 Free';
+ content: '\f0a0';
+ font-size: 17px;
+ position: absolute;
+ top: 10px;
+ left: 25px;
+ .opacity(0.8);
+ }
+
+ &.fesli-loading {
+ &:before {
+ .list-loader(20px, 20px, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.5));
+ left: 32px;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ }
+ }
+ }
+
+ &.active {
+ background-color: rgba(0,0,0,0.1);
+
+ & > a {
+ color: @white;
+ }
+ }
+
+ &:not(.active):hover {
+ background-color: rgba(0, 0, 0, 0.05);
+
+ & > a {
+ color: @white;
+ }
+ }
+
+ &:hover {
+ .bucket-dropdown .dropdown-toggle {
+ .opacity(0.6);
+
+ &:hover {
+ .opacity(1);
+ }
+ }
+ }
+ }
+
+ ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ }
+
+ &:hover .scrollbar-vertical {
+ opacity: 1;
+ }
+}
+
+/* Dropdown */
+.bucket-dropdown {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ width: 35px;
+ height: 100%;
+ cursor: pointer;
+ color: @white;
+
+ .dropdown-toggle {
+ .opacity(0);
+ .transition(all);
+ .transition-duration(200ms);
+ font-size: 20px;
+ background-color: transparent;
+ }
+
+ .dropdown-menu-right {
+ padding: 15px 0;
+ margin-top: -1px;
+ & li {
+ a:before {
+ content: none;
+ -webkit-box-shadow: @dropdown-shadow;
+ box-shadow: @dropdown-shadow;
+ }
+ &:not(.active):hover {
+ & > a {
+ color: @dropdown-link-hover-color;
+ }
+ }
+ }
+ }
+}
+
+/* Scrollbar */
+.scrollbar-vertical {
+ position: absolute;
+ right: 5px;
+ width: 4px;
+ height: 100%;
+ opacity: 0;
+ .transition(opacity);
+ .transition-duration(300ms);
+
+ div {
+ border-radius: 1px !important;
+ background-color: #6a6a6a !important;
+ }
+}
+
+/*--------------------------
+ Host
+----------------------------*/
+.fes-host {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ z-index: 1;
+ background-color: rgba(0,0,0,0.1);
+ font-size: 15px;
+ font-weight: 400;
+ width: @fe-sidebar-width;
+ padding: 20px;
+ .text-overflow();
+
+ & > i {
+ margin-right: 10px;
+ }
+}
+
+
+
+
diff --git a/browser/app/less/inc/variables.less b/browser/app/less/inc/variables.less
new file mode 100644
index 000000000..79756f1cc
--- /dev/null
+++ b/browser/app/less/inc/variables.less
@@ -0,0 +1,109 @@
+/*--------------------------
+ Base
+----------------------------*/
+@font-family-sans-serif : 'Lato', sans-serif;
+@font-family-icon : 'Font Awesome 5 Free';
+@body-bg : #edecec;
+@text-color : #8e8e8e;
+@font-size-base : 15px;
+@link-color : #46a5e0;
+@link-hover-decoration : none;
+
+
+/*--------------------------
+ File Explorer
+----------------------------*/
+@fe-sidebar-width : 320px;
+@fe-sidebar-bg : #00303f;
+@text-muted-color : #BDBDBD;
+@text-strong-color : #333;
+
+
+/*--------------------------
+ Colors
+----------------------------*/
+@cyan : #2ED2FF;
+@amber : #ffc107;
+@red : #ff726f;
+@grey : #f5f5f5;
+@dark-blue : #0084d3;
+@blue : #00a6f7;
+@white : #ffffff;
+@black : #1b1e25;
+@blue : #50b2ff;
+@light-blue : #c1d1e8;
+@green : #33d46f;
+@yellow : #FFC107;
+@orange : #ffc155;
+@purple : #9C27B0;
+@teal : #009688;
+@brown : #795548;
+@blue-gray : #374952;
+@dark-gray : #32393F;
+
+
+/*--------------------------
+ Dropdown
+----------------------------*/
+@dropdown-fallback-border : transparent;
+@dropdown-border : transparent;
+@dropdown-divider-bg : '';
+@dropdown-link-hover-bg : rgba(0,0,0,0.05);
+@dropdown-link-color : @text-color;
+@dropdown-link-hover-color : #333;
+@dropdown-link-disabled-color : #e4e4e4;
+@dropdown-divider-bg : rgba(0,0,0,0.08);
+@dropdown-link-active-color : #333;
+@dropdown-link-active-bg : rgba(0, 0, 0, 0.075);
+@dropdown-shadow : 0 2px 10px rgba(0, 0, 0, 0.2);
+
+
+/*--------------------------
+ Modal
+----------------------------*/
+@modal-content-fallback-border-color: transparent;
+@modal-content-border-color: transparent;
+@modal-backdrop-bg: rgba(0,0,0,0.1);
+@modal-header-border-color: transparent;
+@modal-title-line-height: transparent;
+@modal-footer-border-color: transparent;
+@modal-inner-padding: 30px 35px;
+@modal-title-padding: 30px 35px 0px;
+@modal-sm: 400px;
+
+
+/*-------------------------
+ Buttons
+--------------------------*/
+@btn-border-radius-large: 2px;
+@btn-border-radius-small: 2px;
+@btn-border-radius-base: 2px;
+
+
+/*-------------------------
+ Colors
+--------------------------*/
+@brand-primary: #2298f7;
+@brand-success: #4CAF50;
+@brand-info: #00BCD4;
+@brand-warning: #FF9800;
+@brand-danger: #FF5722;
+
+
+/*-------------------------
+ Form
+--------------------------*/
+@input-border: #eee;
+
+
+/*-------------------------
+ List
+--------------------------*/
+@list-row-selected-bg: #fbf2bf;
+@list-row-even-bg: #fafafa;
+
+/*--------------------------
+ Loading
+---------------------------*/
+@loading-track-bg: #eeeeee;
+@loading-point-bg: #00303f;
\ No newline at end of file
diff --git a/browser/app/less/main.less b/browser/app/less/main.less
new file mode 100644
index 000000000..29aa50772
--- /dev/null
+++ b/browser/app/less/main.less
@@ -0,0 +1,39 @@
+/*----------------------------
+ Bootstrap
+-----------------------------*/
+@import "../../node_modules/bootstrap/less/scaffolding.less";
+@import "../../node_modules/bootstrap/less/variables.less";
+@import "../../node_modules/bootstrap/less/grid.less";
+@import "../../node_modules/bootstrap/less/mixins.less";
+@import "../../node_modules/bootstrap/less/normalize.less";
+@import "../../node_modules/bootstrap/less/dropdowns.less";
+@import "../../node_modules/bootstrap/less/modals.less";
+@import "../../node_modules/bootstrap/less/tooltip.less";
+@import "../../node_modules/bootstrap/less/responsive-utilities.less";
+
+
+/*----------------------------
+ App
+-----------------------------*/
+@import 'inc/mixin';
+@import 'inc/variables';
+@import 'inc/base';
+@import 'inc/animate/animate';
+@import 'inc/generics';
+@import 'inc/font';
+@import 'inc/form';
+@import 'inc/buttons';
+@import 'inc/misc';
+@import 'inc/login';
+@import 'inc/header';
+@import 'inc/sidebar';
+@import 'inc/list';
+@import 'inc/file-explorer';
+@import 'inc/ie-warning';
+
+/*----------------------------
+ Boostrap
+-----------------------------*/
+@import 'inc/dropdown';
+@import 'inc/alert';
+@import 'inc/modal';
diff --git a/browser/assets.go b/browser/assets.go
new file mode 100644
index 000000000..afcbc04d2
--- /dev/null
+++ b/browser/assets.go
@@ -0,0 +1,11 @@
+package browser
+
+import "embed"
+
+//go:embed release/*
+var fs embed.FS
+
+// GetStaticAssets returns assets
+func GetStaticAssets() embed.FS {
+ return fs
+}
diff --git a/browser/build.js b/browser/build.js
new file mode 100644
index 000000000..95be40cdc
--- /dev/null
+++ b/browser/build.js
@@ -0,0 +1,50 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var async = require('async')
+var exec = require('child_process').exec
+var fs = require('fs')
+
+var isProduction = process.env.NODE_ENV == 'production' ? true : false
+
+rmDir = function(dirPath) {
+ try { var files = fs.readdirSync(dirPath); }
+ catch(e) { return; }
+ if (files.length > 0)
+ for (var i = 0; i < files.length; i++) {
+ var filePath = dirPath + '/' + files[i];
+ if (fs.statSync(filePath).isFile())
+ fs.unlinkSync(filePath);
+ else
+ rmDir(filePath);
+ }
+ fs.rmdirSync(dirPath);
+};
+
+async.waterfall([
+ function(cb) {
+ rmDir('release');
+ rmDir('dev');
+ var cmd = 'webpack -p --config webpack.production.config.js'
+ if (!isProduction) {
+ cmd = 'webpack';
+ }
+ console.log('Running', cmd)
+ exec(cmd, cb)
+ },
+ ], function(err) {
+ if (err) return console.log(err)
+ })
diff --git a/browser/karma.conf.js b/browser/karma.conf.js
new file mode 100644
index 000000000..19ef7bb9b
--- /dev/null
+++ b/browser/karma.conf.js
@@ -0,0 +1,56 @@
+/*
+ * MinIO Object Storage (c) 2021 MinIO, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var webpack = require('webpack');
+
+module.exports = function (config) {
+ config.set({
+ browsers: [ process.env.CONTINUOUS_INTEGRATION ? 'Firefox' : 'Chrome' ],
+ singleRun: true,
+ frameworks: [ 'mocha' ],
+ files: [
+ 'tests.webpack.js'
+ ],
+ preprocessors: {
+ 'tests.webpack.js': [ 'webpack' ]
+ },
+ reporters: [ 'dots' ],
+ webpack: {
+ module: {
+ loaders: [{
+ test: /\.js$/,
+ exclude: /(node_modules|bower_components)/,
+ loader: 'babel',
+ query: {
+ presets: ['react', 'es2015']
+ }
+ }, {
+ test: /\.less$/,
+ loader: 'style!css!less'
+ }, {
+ test: /\.css$/,
+ loader: 'style!css'
+ }, {
+ test: /\.(eot|woff|woff2|ttf|svg|png)/,
+ loader: 'url'
+ }]
+ }
+ },
+ webpackServer: {
+ noInfo: true
+ }
+ });
+};
diff --git a/browser/package-lock.json b/browser/package-lock.json
new file mode 100644
index 000000000..db6ebd12f
--- /dev/null
+++ b/browser/package-lock.json
@@ -0,0 +1,17665 @@
+{
+ "name": "browser",
+ "version": "0.0.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+ "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+ "requires": {
+ "@babel/highlight": "^7.12.13"
+ }
+ },
+ "@babel/core": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz",
+ "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.9.6",
+ "@babel/helper-module-transforms": "^7.9.0",
+ "@babel/helpers": "^7.9.6",
+ "@babel/parser": "^7.9.6",
+ "@babel/template": "^7.8.6",
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.13.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
+ "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
+ "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.12.13",
+ "@babel/template": "^7.12.13",
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
+ "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz",
+ "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz",
+ "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz",
+ "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-replace-supers": "^7.13.0",
+ "@babel/helper-simple-access": "^7.12.13",
+ "@babel/helper-split-export-declaration": "^7.12.13",
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.13.0",
+ "@babel/types": "^7.13.0",
+ "lodash": "^4.17.19"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
+ "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz",
+ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==",
+ "dev": true
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz",
+ "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.13.0",
+ "@babel/helper-optimise-call-expression": "^7.12.13",
+ "@babel/traverse": "^7.13.0",
+ "@babel/types": "^7.13.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz",
+ "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
+ "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+ "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+ },
+ "@babel/helpers": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz",
+ "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.9.6",
+ "@babel/types": "^7.9.6"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.13.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
+ "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.13.10",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.10.tgz",
+ "integrity": "sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ==",
+ "dev": true
+ },
+ "@babel/runtime": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz",
+ "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+ }
+ }
+ },
+ "@babel/runtime-corejs2": {
+ "version": "7.9.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.6.tgz",
+ "integrity": "sha512-TcdM3xc7weMrwTawuG3BTjtVE3mQLXUPQ9CxTbSKOrhn3QAcqCJ2fz+IIv25wztzUnhNZat7hr655YJa61F3zg==",
+ "requires": {
+ "core-js": "^2.6.5",
+ "regenerator-runtime": "^0.13.4"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+ }
+ }
+ },
+ "@babel/template": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
+ "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/parser": "^7.12.13",
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz",
+ "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/generator": "^7.13.0",
+ "@babel/helper-function-name": "^7.12.13",
+ "@babel/helper-split-export-declaration": "^7.12.13",
+ "@babel/parser": "^7.13.0",
+ "@babel/types": "^7.13.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.19"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.13.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz",
+ "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "@cnakazawa/watch": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
+ "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.3.2",
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "exec-sh": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
+ "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
+ "dev": true
+ }
+ }
+ },
+ "@fortawesome/fontawesome-free": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz",
+ "integrity": "sha512-xKOeQEl5O47GPZYIMToj6uuA2syyFlq9EMSl2ui0uytjY9xbe8XS0pexNWmxrdcCyNGyDmLyYw5FtKsalBUeOg=="
+ },
+ "@jest/console": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
+ "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
+ "dev": true,
+ "requires": {
+ "@jest/source-map": "^24.9.0",
+ "chalk": "^2.0.1",
+ "slash": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@jest/environment": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
+ "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
+ "dev": true,
+ "requires": {
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "jest-mock": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+ "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0"
+ }
+ }
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
+ "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-mock": "^24.9.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "jest-message-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
+ "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/stack-utils": "^1.0.1",
+ "chalk": "^2.0.1",
+ "micromatch": "^3.1.10",
+ "slash": "^2.0.0",
+ "stack-utils": "^1.0.1"
+ }
+ },
+ "jest-mock": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+ "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@jest/source-map": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
+ "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.1.15",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "@jest/test-result": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
+ "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/istanbul-lib-coverage": "^2.0.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
+ }
+ },
+ "@jest/transform": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
+ "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^24.9.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.15",
+ "jest-haste-map": "^24.9.0",
+ "jest-regex-util": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "pirates": "^4.0.1",
+ "realpath-native": "^1.1.0",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "2.4.1"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
+ "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "find-up": "^3.0.0",
+ "istanbul-lib-instrument": "^3.3.0",
+ "test-exclude": "^5.2.3"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "capture-exit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+ "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+ "dev": true,
+ "requires": {
+ "rsvp": "^4.8.4"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "exec-sh": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
+ "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
+ "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
+ "dev": true,
+ "requires": {
+ "@babel/generator": "^7.4.0",
+ "@babel/parser": "^7.4.3",
+ "@babel/template": "^7.4.0",
+ "@babel/traverse": "^7.4.3",
+ "@babel/types": "^7.4.0",
+ "istanbul-lib-coverage": "^2.0.5",
+ "semver": "^6.0.0"
+ }
+ },
+ "jest-haste-map": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
+ "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "anymatch": "^2.0.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.7",
+ "graceful-fs": "^4.1.15",
+ "invariant": "^2.2.4",
+ "jest-serializer": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-worker": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
+ }
+ },
+ "jest-regex-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
+ "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
+ "dev": true
+ },
+ "jest-serializer": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
+ "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
+ "dev": true
+ },
+ "jest-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
+ "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/source-map": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "callsites": "^3.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.15",
+ "is-ci": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "jest-worker": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
+ "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^2.0.0",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
+ "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "rsvp": {
+ "version": "4.8.5",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
+ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
+ "dev": true
+ },
+ "sane": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+ "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+ "dev": true,
+ "requires": {
+ "@cnakazawa/watch": "^1.0.3",
+ "anymatch": "^2.0.0",
+ "capture-exit": "^2.0.0",
+ "exec-sh": "^0.3.2",
+ "execa": "^1.0.0",
+ "fb-watchman": "^2.0.0",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "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==",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "test-exclude": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
+ "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3",
+ "minimatch": "^3.0.4",
+ "read-pkg-up": "^4.0.0",
+ "require-main-filename": "^2.0.0"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
+ "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
+ "@jest/types": {
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.0.1.tgz",
+ "integrity": "sha512-IbtjvqI9+eS1qFnOIEL7ggWmT+iK/U+Vde9cGWtYb/b6XgKb3X44ZAe/z9YZzoAAZ/E92m0DqrilF934IGNnQA==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
+ "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+ "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.3",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+ "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.3",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@react-native-community/art": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@react-native-community/art/-/art-1.2.0.tgz",
+ "integrity": "sha512-a+ZcRGl/BzLa89yi33Mbn5SHavsEXqKUMdbfLf3U8MDLElndPqUetoJyGkv63+BcPO49UMWiQRP1YUz6/zfJ+A==",
+ "requires": {
+ "art": "^0.10.3",
+ "invariant": "^2.2.4",
+ "prop-types": "^15.7.2"
+ }
+ },
+ "@types/anymatch": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
+ "dev": true
+ },
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
+ },
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/html-minifier-terser": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz",
+ "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==",
+ "dev": true
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz",
+ "integrity": "sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w=="
+ },
+ "@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
+ "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "*",
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "12.0.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.7.tgz",
+ "integrity": "sha512-1YKeT4JitGgE4SOzyB9eMwO0nGVNkNEsm9qlIt1Lqm/tG2QEiSMTD4kS3aO6L+w5SClLVxALmIBESK6Mk5wX0A==",
+ "dev": true
+ },
+ "@types/source-list-map": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+ "dev": true
+ },
+ "@types/stack-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
+ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw=="
+ },
+ "@types/tapable": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz",
+ "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==",
+ "dev": true
+ },
+ "@types/uglify-js": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz",
+ "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==",
+ "dev": true,
+ "requires": {
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "@types/webpack": {
+ "version": "4.41.13",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.13.tgz",
+ "integrity": "sha512-RYmIHOWSxnTTa765N6jJBVE45pd2SYNblEYshVDduLw6RhocazNmRzE5/ytvBD8IkDMH6DI+bcrqxh8NILimBA==",
+ "dev": true,
+ "requires": {
+ "@types/anymatch": "*",
+ "@types/node": "*",
+ "@types/tapable": "*",
+ "@types/uglify-js": "*",
+ "@types/webpack-sources": "*",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "@types/webpack-sources": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz",
+ "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/source-list-map": "*",
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "@types/yargs": {
+ "version": "15.0.5",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz",
+ "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==",
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
+ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw=="
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+ },
+ "abab": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
+ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ }
+ }
+ },
+ "acorn": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
+ },
+ "acorn-globals": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
+ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.1",
+ "acorn-walk": "^6.0.1"
+ }
+ },
+ "acorn-to-esprima": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz",
+ "integrity": "sha1-AD8MZC65ITL0F9NwjxStqCrfLrE=",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
+ "dev": true
+ },
+ "add-px-to-style": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-px-to-style/-/add-px-to-style-1.0.0.tgz",
+ "integrity": "sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo="
+ },
+ "aggregate-error": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+ "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "airbnb-prop-types": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz",
+ "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==",
+ "dev": true,
+ "requires": {
+ "array.prototype.find": "^2.1.0",
+ "function.prototype.name": "^1.1.1",
+ "has": "^1.0.3",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object.assign": "^4.1.0",
+ "object.entries": "^1.1.0",
+ "prop-types": "^15.7.2",
+ "prop-types-exact": "^1.2.0",
+ "react-is": "^16.9.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ },
+ "dependencies": {
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ }
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.entries": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
+ "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.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"
+ }
+ }
+ }
+ },
+ "ajv": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz",
+ "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+ },
+ "ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ }
+ },
+ "append-transform": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "^1.0.0"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "array.prototype.find": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz",
+ "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.4"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "array.prototype.flat": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
+ "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "art": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/art/-/art-0.10.3.tgz",
+ "integrity": "sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true,
+ "optional": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "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.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="
+ },
+ "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": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "attr-accept": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.1.0.tgz",
+ "integrity": "sha512-sLzVM3zCCmmDtDNhI0i96k6PUztkotSOXqE4kDGQt/6iDi5M+H0srjeF+QC6jN581l4X/Zq3Zu/tgcErEssavg=="
+ },
+ "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=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
+ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==",
+ "dev": true
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "chokidar": "^1.6.1",
+ "commander": "^2.11.0",
+ "convert-source-map": "^1.5.0",
+ "fs-readdir-recursive": "^1.0.0",
+ "glob": "^7.1.2",
+ "lodash": "^4.17.4",
+ "output-file-sync": "^1.1.2",
+ "path-is-absolute": "^1.0.1",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.6",
+ "v8flags": "^2.1.1"
+ },
+ "dependencies": {
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.3",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz",
+ "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-istanbul": "^4.1.6",
+ "babel-preset-jest": "^23.2.0"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz",
+ "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^1.0.0",
+ "loader-utils": "^1.0.2",
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+ "find-up": "^2.1.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "test-exclude": "^4.2.1"
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz",
+ "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=",
+ "dev": true
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "^6.24.1",
+ "babel-helper-function-name": "^6.24.1",
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-types": "^6.26.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "^6.24.1",
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-flow": "^6.18.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+ "babel-runtime": "^6.26.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.10.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+ "babel-plugin-transform-es2015-classes": "^6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.24.1",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+ "babel-plugin-transform-es2015-object-super": "^6.24.1",
+ "babel-plugin-transform-es2015-parameters": "^6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+ "babel-plugin-transform-regenerator": "^6.24.1"
+ }
+ },
+ "babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-flow-strip-types": "^6.22.0"
+ }
+ },
+ "babel-preset-jest": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz",
+ "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-jest-hoist": "^23.2.0",
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0"
+ }
+ },
+ "babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-jsx": "^6.3.13",
+ "babel-plugin-transform-react-display-name": "^6.23.0",
+ "babel-plugin-transform-react-jsx": "^6.24.1",
+ "babel-plugin-transform-react-jsx-self": "^6.22.0",
+ "babel-plugin-transform-react-jsx-source": "^6.22.0",
+ "babel-preset-flow": "^6.23.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz",
+ "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.10.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
+ "dev": true
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "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.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==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "bootstrap": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz",
+ "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA=="
+ },
+ "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"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ }
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browser-process-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "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=",
+ "dev": true
+ }
+ }
+ },
+ "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": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "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-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "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.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "15.0.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.3.tgz",
+ "integrity": "sha512-bc3jKYjqv7k4pWh7I/ixIjfcjPul4V4jme/WbjvwGS5LzoPL/GzXr4C5EgPNLO/QEZl9Oi61iGitYEdwcrwLCQ==",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "move-file": "^2.0.0",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.0",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
+ "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
+ "dev": true,
+ "requires": {
+ "pascal-case": "^3.1.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "capture-exit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz",
+ "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
+ "dev": true,
+ "requires": {
+ "rsvp": "^3.3.3"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "cheerio": {
+ "version": "1.0.0-rc.3",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
+ "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
+ "dev": true,
+ "requires": {
+ "css-select": "~1.2.0",
+ "dom-serializer": "~0.1.1",
+ "entities": "~1.1.1",
+ "htmlparser2": "^3.9.1",
+ "lodash": "^4.15.0",
+ "parse5": "^3.0.1"
+ }
+ },
+ "chokidar": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
+ "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+ "optional": true,
+ "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.5.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "optional": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "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==",
+ "optional": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "optional": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "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==",
+ "optional": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "optional": true
+ },
+ "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==",
+ "optional": true,
+ "requires": {
+ "is-glob": "^4.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==",
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "optional": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "optional": true,
+ "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==",
+ "optional": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "optional": true
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "optional": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "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==",
+ "optional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ },
+ "chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "circular-json-es6": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/circular-json-es6/-/circular-json-es6-2.0.2.tgz",
+ "integrity": "sha512-ODYONMMNb3p658Zv+Pp+/XPa5s6q7afhz3Tzyvo+VRh9WIrJ64J76ZC4GQxnlye/NesTn09jvOiuE8+xxfpwhQ==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "classnames": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ },
+ "clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.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="
+ },
+ "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.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true
+ }
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ }
+ },
+ "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"
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
+ },
+ "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-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "copy-to-clipboard": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
+ "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+ "requires": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
+ "copy-webpack-plugin": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.1.tgz",
+ "integrity": "sha512-tcbZnGtQ70b4vtYGUNg8uUYri/80H1On3AC+wPsVOKSj7xbDinYuxAZPAeI3/3hxjjuwoGTHN5BeSksQ4kGUTw==",
+ "dev": true,
+ "requires": {
+ "cacache": "^15.0.3",
+ "fast-glob": "^3.2.2",
+ "find-cache-dir": "^3.3.1",
+ "glob-parent": "^5.1.1",
+ "globby": "^11.0.0",
+ "loader-utils": "^2.0.0",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^2.3.0",
+ "schema-utils": "^2.6.6",
+ "serialize-javascript": "^3.0.0",
+ "webpack-sources": "^1.4.3"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
+ "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "core-js": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+ },
+ "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="
+ },
+ "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.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"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "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-loader": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.3.tgz",
+ "integrity": "sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.27",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.2.0",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.0.3",
+ "schema-utils": "^2.6.6",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
+ "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
+ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
+ "dev": true,
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "data-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "whatwg-mimetype": "^2.2.0",
+ "whatwg-url": "^7.0.0"
+ },
+ "dependencies": {
+ "whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "deep-equal-ident": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal-ident/-/deep-equal-ident-1.1.1.tgz",
+ "integrity": "sha1-BvS4nlNxDNbOpKd4HHqVZkLejck=",
+ "dev": true,
+ "requires": {
+ "lodash.isequal": "^3.0"
+ },
+ "dependencies": {
+ "lodash.isequal": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-3.0.4.tgz",
+ "integrity": "sha1-HDXrO27wzR/1F0Pj6jz3/f/ay2Q=",
+ "dev": true,
+ "requires": {
+ "lodash._baseisequal": "^3.0.0",
+ "lodash._bindcallback": "^3.0.0"
+ }
+ }
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ }
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "diff-sequences": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.0.0.tgz",
+ "integrity": "sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg=="
+ },
+ "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=="
+ }
+ }
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ }
+ }
+ },
+ "discontinuous-range": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
+ "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
+ "dev": true
+ },
+ "disparity": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/disparity/-/disparity-3.0.0.tgz",
+ "integrity": "sha512-n94Rzbv2ambRaFzrnBf34IEiyOdIci7maRpMkoQWB6xFYGA7Nbs0Z5YQzMfTeyQeelv23nayqOcssBoc6rKrgw==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "diff": "^4.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "dev": true,
+ "requires": {
+ "utila": "~0.4"
+ }
+ },
+ "dom-css": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/dom-css/-/dom-css-2.1.0.tgz",
+ "integrity": "sha1-/bwtWgFdCj4YcuEUcrvQ57nmogI=",
+ "requires": {
+ "add-px-to-style": "1.0.0",
+ "prefix-style": "2.0.1",
+ "to-camel-case": "1.0.0"
+ }
+ },
+ "dom-helpers": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+ "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+ "requires": {
+ "@babel/runtime": "^7.1.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+ "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "entities": "^1.1.1"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "domexception": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "dev": true,
+ "requires": {
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz",
+ "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "editorconfig": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz",
+ "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.0.5",
+ "commander": "^2.9.0",
+ "lru-cache": "^3.2.0",
+ "semver": "^5.1.0",
+ "sigmund": "^1.0.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz",
+ "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.1"
+ }
+ }
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "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=="
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
+ "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "enzyme": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
+ "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==",
+ "dev": true,
+ "requires": {
+ "array.prototype.flat": "^1.2.3",
+ "cheerio": "^1.0.0-rc.3",
+ "enzyme-shallow-equal": "^1.0.1",
+ "function.prototype.name": "^1.1.2",
+ "has": "^1.0.3",
+ "html-element-map": "^1.2.0",
+ "is-boolean-object": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-number-object": "^1.0.4",
+ "is-regex": "^1.0.5",
+ "is-string": "^1.0.5",
+ "is-subset": "^0.1.1",
+ "lodash.escape": "^4.0.1",
+ "lodash.isequal": "^4.5.0",
+ "object-inspect": "^1.7.0",
+ "object-is": "^1.0.2",
+ "object.assign": "^4.1.0",
+ "object.entries": "^1.1.1",
+ "object.values": "^1.1.1",
+ "raf": "^3.4.1",
+ "rst-selector-parser": "^2.2.3",
+ "string.prototype.trim": "^1.2.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-boolean-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz",
+ "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-number-object": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
+ "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.entries": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
+ "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ }
+ }
+ },
+ "enzyme-adapter-react-16": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz",
+ "integrity": "sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==",
+ "dev": true,
+ "requires": {
+ "enzyme-adapter-utils": "^1.13.0",
+ "enzyme-shallow-equal": "^1.0.1",
+ "has": "^1.0.3",
+ "object.assign": "^4.1.0",
+ "object.values": "^1.1.1",
+ "prop-types": "^15.7.2",
+ "react-is": "^16.12.0",
+ "react-test-renderer": "^16.0.0-0",
+ "semver": "^5.7.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "enzyme-adapter-utils": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz",
+ "integrity": "sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==",
+ "dev": true,
+ "requires": {
+ "airbnb-prop-types": "^2.15.0",
+ "function.prototype.name": "^1.1.2",
+ "object.assign": "^4.1.0",
+ "object.fromentries": "^2.0.2",
+ "prop-types": "^15.7.2",
+ "semver": "^5.7.1"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "enzyme-matchers": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/enzyme-matchers/-/enzyme-matchers-7.1.2.tgz",
+ "integrity": "sha512-03WqAg2XDl7id9rARIO97HQ1JIw9F2heJ3R4meGu/13hx0ULTDEgl0E67MGl2Uq1jq1DyRnJfto1/VSzskdV5A==",
+ "dev": true,
+ "requires": {
+ "circular-json-es6": "^2.0.1",
+ "deep-equal-ident": "^1.1.1"
+ }
+ },
+ "enzyme-shallow-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz",
+ "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3",
+ "object-is": "^1.0.2"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "enzyme-to-json": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.4.4.tgz",
+ "integrity": "sha512-50LELP/SCPJJGic5rAARvU7pgE3m1YaNj7JLM+Qkhl5t7PAs6fiyc8xzc50RnkKPFQCv0EeFVjEWdIFRGPWMsA==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.15",
+ "react-is": "^16.12.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ }
+ }
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "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==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz",
+ "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.0",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "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="
+ },
+ "escodegen": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
+ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
+ "dev": true,
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "esformatter": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/esformatter/-/esformatter-0.11.3.tgz",
+ "integrity": "sha512-7nf4RjxjuQ1JtRTajmYdso3MWax3CGk7jOwHeM0l23V7u22wHvpkzu/ByJVwhZRxmXAjLaojJlbdOZVa5xvd2A==",
+ "dev": true,
+ "requires": {
+ "acorn-to-esprima": "^2.0.6",
+ "babel-traverse": "^6.4.5",
+ "debug": "^4.1.1",
+ "disparity": "^3.0.0",
+ "esformatter-parser": "^1.0.0",
+ "glob": "^7.1.6",
+ "minimatch": "^3.0.2",
+ "minimist": "^1.2.5",
+ "mout": "^1.2.2",
+ "npm-run": "^5.0.1",
+ "resolve": "^1.15.1",
+ "rocambole": ">=0.7 <2.0",
+ "rocambole-indent": "^2.0.4",
+ "rocambole-linebreak": "^1.0.2",
+ "rocambole-node": "~1.0",
+ "rocambole-token": "^1.1.2",
+ "rocambole-whitespace": "^1.0.0",
+ "stdin": "*",
+ "strip-json-comments": "^3.0.1",
+ "supports-color": "^7.1.0",
+ "user-home": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ }
+ }
+ },
+ "esformatter-ignore": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/esformatter-ignore/-/esformatter-ignore-0.1.3.tgz",
+ "integrity": "sha1-BNO4db+knd4ATMWN9va7w8BWfx4=",
+ "dev": true
+ },
+ "esformatter-jsx": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/esformatter-jsx/-/esformatter-jsx-8.0.1.tgz",
+ "integrity": "sha1-O31zxrdecrl3scZsullnu0ktbPk=",
+ "dev": true,
+ "requires": {
+ "babylon": "6.14.1",
+ "esformatter-ignore": "^0.1.3",
+ "extend": "3.0.0",
+ "js-beautify": "1.6.12",
+ "js-beautify-ejsx": "1.6.12"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.14.1.tgz",
+ "integrity": "sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU=",
+ "dev": true
+ },
+ "extend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
+ "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=",
+ "dev": true
+ },
+ "js-beautify": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.12.tgz",
+ "integrity": "sha1-eLdZM1BdN22m5aKOm3iH4AlNuLU=",
+ "dev": true,
+ "requires": {
+ "config-chain": "~1.1.5",
+ "editorconfig": "^0.13.2",
+ "mkdirp": "~0.5.0",
+ "nopt": "~3.0.1"
+ }
+ }
+ }
+ },
+ "esformatter-jsx-ignore": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/esformatter-jsx-ignore/-/esformatter-jsx-ignore-1.0.6.tgz",
+ "integrity": "sha1-5ZT2t322+F2MEXmubcRldW1CJIk=",
+ "dev": true,
+ "requires": {
+ "esprima-fb": "^12001.1.0-dev-harmony-fb",
+ "fresh-falafel": "^0.2.6"
+ },
+ "dependencies": {
+ "esprima-fb": {
+ "version": "12001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-12001.1.0-dev-harmony-fb.tgz",
+ "integrity": "sha1-2EQAOEupXOJnjGF60kp/QICNqRU=",
+ "dev": true
+ }
+ }
+ },
+ "esformatter-parser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esformatter-parser/-/esformatter-parser-1.0.0.tgz",
+ "integrity": "sha1-CFQHLQSHU57TnK442KVDLBfsEdM=",
+ "dev": true,
+ "requires": {
+ "acorn-to-esprima": "^2.0.8",
+ "babel-traverse": "^6.9.0",
+ "babylon": "^6.8.0",
+ "rocambole": "^0.7.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
+ "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==",
+ "dev": true
+ },
+ "events": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
+ },
+ "eventsource": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "exec-sh": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz",
+ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
+ "dev": true,
+ "requires": {
+ "merge": "^1.2.0"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ },
+ "dependencies": {
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "expect": {
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-26.0.1.tgz",
+ "integrity": "sha512-QcCy4nygHeqmbw564YxNbHTJlXh47dVID2BUP52cZFpLU9zHViMFK6h07cC1wf7GYCTIigTdAXhVua8Yl1FkKg==",
+ "requires": {
+ "@jest/types": "^26.0.1",
+ "ansi-styles": "^4.0.0",
+ "jest-get-type": "^26.0.0",
+ "jest-matcher-utils": "^26.0.1",
+ "jest-message-util": "^26.0.1",
+ "jest-regex-util": "^26.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.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"
+ }
+ },
+ "chalk": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
+ "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
+ },
+ "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"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "jest-diff": {
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.0.1.tgz",
+ "integrity": "sha512-odTcHyl5X+U+QsczJmOjWw5tPvww+y9Yim5xzqxVl/R1j4z71+fHW4g8qu1ugMmKdFdxw+AtQgs5mupPnzcIBQ==",
+ "requires": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^26.0.0",
+ "jest-get-type": "^26.0.0",
+ "pretty-format": "^26.0.1"
+ }
+ },
+ "jest-get-type": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.0.0.tgz",
+ "integrity": "sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg=="
+ },
+ "jest-matcher-utils": {
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.0.1.tgz",
+ "integrity": "sha512-PUMlsLth0Azen8Q2WFTwnSkGh2JZ8FYuwijC8NR47vXKpsrKmA1wWvgcj1CquuVfcYiDEdj985u5Wmg7COEARw==",
+ "requires": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^26.0.1",
+ "jest-get-type": "^26.0.0",
+ "pretty-format": "^26.0.1"
+ }
+ },
+ "jest-message-util": {
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.0.1.tgz",
+ "integrity": "sha512-CbK8uQREZ8umUfo8+zgIfEt+W7HAHjQCoRaNs4WxKGhAYBGwEyvxuK81FXa7VeB9pwDEXeeKOB2qcsNVCAvB7Q==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@jest/types": "^26.0.1",
+ "@types/stack-utils": "^1.0.1",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.4",
+ "micromatch": "^4.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.2"
+ }
+ },
+ "jest-regex-util": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
+ "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A=="
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "pretty-format": {
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.0.1.tgz",
+ "integrity": "sha512-SWxz6MbupT3ZSlL0Po4WF/KujhQaVehijR2blyRDCzk9e45EaYMVhMBn49fnRuHxtkSpXTes1GxNpVmH86Bxfw==",
+ "requires": {
+ "@jest/types": "^26.0.1",
+ "ansi-regex": "^5.0.0",
+ "ansi-styles": "^4.0.0",
+ "react-is": "^16.12.0"
+ }
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+ },
+ "stack-utils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz",
+ "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==",
+ "requires": {
+ "escape-string-regexp": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "fast-glob": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz",
+ "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "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=="
+ },
+ "fastq": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
+ "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fb-watchman": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
+ "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "dev": true,
+ "requires": {
+ "bser": "2.1.1"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
+ },
+ "file-selector": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.1.12.tgz",
+ "integrity": "sha512-Kx7RTzxyQipHuiqyZGf+Nz4vY9R1XGxuQl/hLoJwq+J4avk/9wxxgZyHKtbyIPJmbD4A66DWGYfyykWNpcYutQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fileset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.3",
+ "minimatch": "^3.0.3"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^1.0.0",
+ "pkg-dir": "^2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz",
+ "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formidable": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
+ "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fresh-falafel": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/fresh-falafel/-/fresh-falafel-0.2.6.tgz",
+ "integrity": "sha1-N3W5ggVf3/sfSMsXdVFk+PxSIzk=",
+ "dev": true,
+ "requires": {
+ "esprima": "^2.0.0"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+ "dev": true
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+ "optional": true,
+ "requires": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.12.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "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"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.3.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.12.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "function.prototype.name": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz",
+ "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "functions-have-names": "^1.2.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz",
+ "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "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-all": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz",
+ "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==",
+ "requires": {
+ "glob": "^7.1.2",
+ "yargs": "^15.3.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "yargs": {
+ "version": "15.3.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
+ "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^3.0.0"
+ },
+ "dependencies": {
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz",
+ "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.7.6",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
+ "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "harmony-reflect": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz",
+ "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "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": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "history": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
+ "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "loose-envify": "^1.2.0",
+ "resolve-pathname": "^3.0.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0",
+ "value-equal": "^1.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "html-element-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz",
+ "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==",
+ "dev": true,
+ "requires": {
+ "array-filter": "^1.0.0"
+ }
+ },
+ "html-encoding-sniffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "dev": true,
+ "requires": {
+ "whatwg-encoding": "^1.0.1"
+ }
+ },
+ "html-entities": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
+ "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==",
+ "dev": true
+ },
+ "html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "dev": true,
+ "requires": {
+ "camel-case": "^4.1.1",
+ "clean-css": "^4.2.3",
+ "commander": "^4.1.1",
+ "he": "^1.2.0",
+ "param-case": "^3.0.3",
+ "relateurl": "^0.2.7",
+ "terser": "^4.6.3"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true
+ }
+ }
+ },
+ "html-webpack-plugin": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz",
+ "integrity": "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==",
+ "dev": true,
+ "requires": {
+ "@types/html-minifier-terser": "^5.0.0",
+ "@types/tapable": "^1.0.5",
+ "@types/webpack": "^4.41.8",
+ "html-minifier-terser": "^5.0.1",
+ "loader-utils": "^1.2.3",
+ "lodash": "^4.17.15",
+ "pretty-error": "^2.1.1",
+ "tapable": "^1.1.3",
+ "util.promisify": "1.0.0"
+ },
+ "dependencies": {
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "dev": true
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.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="
+ },
+ "humanize": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/humanize/-/humanize-0.0.9.tgz",
+ "integrity": "sha1-GZT/rs3+nEQe0r2sdFK3u0yeQaQ="
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "identity-obj-proxy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
+ "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
+ "requires": {
+ "harmony-reflect": "^1.4.6"
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
+ "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
+ "dev": true
+ },
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true,
+ "optional": true
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^2.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+ },
+ "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.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ }
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^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.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-generator-fn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz",
+ "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-api": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+ "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.1.4",
+ "fileset": "^2.0.2",
+ "istanbul-lib-coverage": "^1.2.1",
+ "istanbul-lib-hook": "^1.2.2",
+ "istanbul-lib-instrument": "^1.10.2",
+ "istanbul-lib-report": "^1.1.5",
+ "istanbul-lib-source-maps": "^1.2.6",
+ "istanbul-reports": "^1.5.1",
+ "js-yaml": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "once": "^1.4.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+ "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+ "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^0.4.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
+ "dev": true,
+ "requires": {
+ "babel-generator": "^6.18.0",
+ "babel-template": "^6.16.0",
+ "babel-traverse": "^6.18.0",
+ "babel-types": "^6.18.0",
+ "babylon": "^6.18.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "semver": "^5.3.0"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+ "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "path-parse": "^1.0.5",
+ "supports-color": "^3.1.2"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+ "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.1",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+ "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.0.3"
+ }
+ },
+ "jest": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz",
+ "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==",
+ "dev": true,
+ "requires": {
+ "import-local": "^1.0.0",
+ "jest-cli": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "jest-cli": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz",
+ "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "import-local": "^1.0.0",
+ "is-ci": "^1.0.10",
+ "istanbul-api": "^1.3.1",
+ "istanbul-lib-coverage": "^1.2.0",
+ "istanbul-lib-instrument": "^1.10.1",
+ "istanbul-lib-source-maps": "^1.2.4",
+ "jest-changed-files": "^23.4.2",
+ "jest-config": "^23.6.0",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve-dependencies": "^23.6.0",
+ "jest-runner": "^23.6.0",
+ "jest-runtime": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "jest-watcher": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "node-notifier": "^5.2.1",
+ "prompts": "^0.1.9",
+ "realpath-native": "^1.0.0",
+ "rimraf": "^2.5.4",
+ "slash": "^1.0.0",
+ "string-length": "^2.0.0",
+ "strip-ansi": "^4.0.0",
+ "which": "^1.2.12",
+ "yargs": "^11.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-changed-files": {
+ "version": "23.4.2",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz",
+ "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==",
+ "dev": true,
+ "requires": {
+ "throat": "^4.0.0"
+ }
+ },
+ "jest-config": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz",
+ "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-jest": "^23.6.0",
+ "chalk": "^2.0.1",
+ "glob": "^7.1.1",
+ "jest-environment-jsdom": "^23.4.0",
+ "jest-environment-node": "^23.4.0",
+ "jest-get-type": "^22.1.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-diff": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz",
+ "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "diff": "^3.2.0",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-docblock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz",
+ "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^2.1.0"
+ }
+ },
+ "jest-each": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz",
+ "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-environment-enzyme": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/jest-environment-enzyme/-/jest-environment-enzyme-7.1.2.tgz",
+ "integrity": "sha512-3tfaYAzO7qZSRrv+srQnfK16Vu5XwH/pHi8FpoqSHjKKngbHzXf7aBCBuWh8y3w0OtknHRfDMFrC60Khj+g1hA==",
+ "dev": true,
+ "requires": {
+ "jest-environment-jsdom": "^24.0.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "13.0.9",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
+ "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
+ "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jsdom": "^11.5.1"
+ }
+ },
+ "jest-mock": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+ "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0"
+ }
+ },
+ "jest-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
+ "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/source-map": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "callsites": "^3.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.15",
+ "is-ci": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "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==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-environment-jsdom": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz",
+ "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0",
+ "jsdom": "^11.5.1"
+ }
+ },
+ "jest-environment-node": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz",
+ "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=",
+ "dev": true,
+ "requires": {
+ "jest-mock": "^23.2.0",
+ "jest-util": "^23.4.0"
+ }
+ },
+ "jest-enzyme": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/jest-enzyme/-/jest-enzyme-7.1.2.tgz",
+ "integrity": "sha512-j+jkph3t5hGBS12eOldpfsnERYRCHi4c/0KWPMnqRPoJJXvCpLIc5th1MHl0xDznQDXVU0AHUXg3rqMrf8vGpA==",
+ "dev": true,
+ "requires": {
+ "enzyme-matchers": "^7.1.2",
+ "enzyme-to-json": "^3.3.0",
+ "jest-environment-enzyme": "^7.1.2"
+ }
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "jest-haste-map": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz",
+ "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==",
+ "dev": true,
+ "requires": {
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "invariant": "^2.2.4",
+ "jest-docblock": "^23.2.0",
+ "jest-serializer": "^23.0.1",
+ "jest-worker": "^23.2.0",
+ "micromatch": "^2.3.11",
+ "sane": "^2.0.0"
+ }
+ },
+ "jest-jasmine2": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz",
+ "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==",
+ "dev": true,
+ "requires": {
+ "babel-traverse": "^6.0.0",
+ "chalk": "^2.0.1",
+ "co": "^4.6.0",
+ "expect": "^23.6.0",
+ "is-generator-fn": "^1.0.0",
+ "jest-diff": "^23.6.0",
+ "jest-each": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "expect": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz",
+ "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "jest-diff": "^23.6.0",
+ "jest-get-type": "^22.1.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-leak-detector": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz",
+ "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==",
+ "dev": true,
+ "requires": {
+ "pretty-format": "^23.6.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz",
+ "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-message-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz",
+ "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0-beta.35",
+ "chalk": "^2.0.1",
+ "micromatch": "^2.3.11",
+ "slash": "^1.0.0",
+ "stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-mock": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz",
+ "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=",
+ "dev": true
+ },
+ "jest-regex-util": {
+ "version": "23.3.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz",
+ "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz",
+ "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "^1.11.3",
+ "chalk": "^2.0.1",
+ "realpath-native": "^1.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz",
+ "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "^23.3.0",
+ "jest-snapshot": "^23.6.0"
+ }
+ },
+ "jest-runner": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz",
+ "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==",
+ "dev": true,
+ "requires": {
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-docblock": "^23.2.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-jasmine2": "^23.6.0",
+ "jest-leak-detector": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-runtime": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-worker": "^23.2.0",
+ "source-map-support": "^0.5.6",
+ "throat": "^4.0.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ }
+ }
+ },
+ "jest-runtime": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz",
+ "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.0.0",
+ "babel-plugin-istanbul": "^4.1.6",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "exit": "^0.1.2",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.11",
+ "jest-config": "^23.6.0",
+ "jest-haste-map": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-regex-util": "^23.3.0",
+ "jest-resolve": "^23.6.0",
+ "jest-snapshot": "^23.6.0",
+ "jest-util": "^23.4.0",
+ "jest-validate": "^23.6.0",
+ "micromatch": "^2.3.11",
+ "realpath-native": "^1.0.0",
+ "slash": "^1.0.0",
+ "strip-bom": "3.0.0",
+ "write-file-atomic": "^2.1.0",
+ "yargs": "^11.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-serializer": {
+ "version": "23.0.1",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz",
+ "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=",
+ "dev": true
+ },
+ "jest-snapshot": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz",
+ "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==",
+ "dev": true,
+ "requires": {
+ "babel-types": "^6.0.0",
+ "chalk": "^2.0.1",
+ "jest-diff": "^23.6.0",
+ "jest-matcher-utils": "^23.6.0",
+ "jest-message-util": "^23.4.0",
+ "jest-resolve": "^23.6.0",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^23.6.0",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-util": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz",
+ "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.11",
+ "is-ci": "^1.0.10",
+ "jest-message-util": "^23.4.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-validate": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-watcher": {
+ "version": "23.4.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz",
+ "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.1",
+ "string-length": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-worker": {
+ "version": "23.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz",
+ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^1.0.1"
+ }
+ },
+ "js-beautify-ejsx": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/js-beautify-ejsx/-/js-beautify-ejsx-1.6.12.tgz",
+ "integrity": "sha1-L4h1PqNRfPTnZcO/aeieWB7hH9E=",
+ "dev": true,
+ "requires": {
+ "config-chain": "~1.1.5",
+ "editorconfig": "^0.13.2",
+ "mkdirp": "~0.5.0",
+ "nopt": "~3.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz",
+ "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsdom": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+ "dev": true,
+ "requires": {
+ "abab": "^2.0.0",
+ "acorn": "^5.5.3",
+ "acorn-globals": "^4.1.0",
+ "array-equal": "^1.0.0",
+ "cssom": ">= 0.3.2 < 0.4.0",
+ "cssstyle": "^1.0.0",
+ "data-urls": "^1.0.0",
+ "domexception": "^1.0.1",
+ "escodegen": "^1.9.1",
+ "html-encoding-sniffer": "^1.0.2",
+ "left-pad": "^1.3.0",
+ "nwsapi": "^2.0.7",
+ "parse5": "4.0.0",
+ "pn": "^1.1.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "sax": "^1.2.4",
+ "symbol-tree": "^3.2.2",
+ "tough-cookie": "^2.3.4",
+ "w3c-hr-time": "^1.0.1",
+ "webidl-conversions": "^4.0.2",
+ "whatwg-encoding": "^1.0.3",
+ "whatwg-mimetype": "^2.1.0",
+ "whatwg-url": "^6.4.1",
+ "ws": "^5.2.0",
+ "xml-name-validator": "^3.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
+ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
+ "dev": true
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "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=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jwt-decode": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz",
+ "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk="
+ },
+ "keycode": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz",
+ "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ="
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "kleur": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz",
+ "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "left-pad": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
+ "dev": true
+ },
+ "less": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/less/-/less-3.11.1.tgz",
+ "integrity": "sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.2",
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "mime": "^1.4.1",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
+ "request": "^2.83.0",
+ "source-map": "~0.6.0",
+ "tslib": "^1.10.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "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==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "less-loader": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.1.0.tgz",
+ "integrity": "sha512-/jLzOwLyqJ7Kt3xg5sHHkXtOyShWwFj410K9Si9WO+/h8rmYxxkSR0A3/hFEntWudE20zZnWMtpMYnLzqTVdUA==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.2",
+ "less": "^3.11.1",
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^2.6.6"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "schema-utils": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
+ "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ }
+ }
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
+ }
+ },
+ "local-storage-fallback": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/local-storage-fallback/-/local-storage-fallback-4.1.1.tgz",
+ "integrity": "sha512-Ka4rem1FOgvIaPMokxXTP8DgW8gjfAQSdJC8TGrplDug7vh3b0PZnY/9euG3O3cIGAvJLp33mMU6MJ13x6S+Pw==",
+ "requires": {
+ "cookie": "^0.3.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ },
+ "lodash._baseisequal": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz",
+ "integrity": "sha1-2AJfdjOdKTQnZ9zIh85cuVpbUfE=",
+ "dev": true,
+ "requires": {
+ "lodash.isarray": "^3.0.0",
+ "lodash.istypedarray": "^3.0.0",
+ "lodash.keys": "^3.0.0"
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
+ "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
+ "dev": true
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.istypedarray": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz",
+ "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ }
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loglevel": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
+ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
+ "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "dev": true,
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "material-design-iconic-font": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/material-design-iconic-font/-/material-design-iconic-font-2.2.0.tgz",
+ "integrity": "sha1-ZsOxyIDvDLh8AsoqD5AP8P5/SA0="
+ },
+ "math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz",
+ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==",
+ "dev": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
+ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ }
+ }
+ },
+ "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": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "mini-create-react-context": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz",
+ "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "tiny-warning": "^1.0.3"
+ }
+ },
+ "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=="
+ },
+ "minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz",
+ "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz",
+ "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "moment": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz",
+ "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw=="
+ },
+ "moo": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz",
+ "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==",
+ "dev": true
+ },
+ "mout": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.2.tgz",
+ "integrity": "sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA==",
+ "dev": true
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "move-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/move-file/-/move-file-2.0.0.tgz",
+ "integrity": "sha512-cdkdhNCgbP5dvS4tlGxZbD+nloio9GIimP57EjqFhwLcMjnU+XJKAZzlmg/TN/AK1LuNAdTSvm3CPPP4Xkv0iQ==",
+ "dev": true,
+ "requires": {
+ "path-exists": "^4.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "nearley": {
+ "version": "2.19.3",
+ "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.3.tgz",
+ "integrity": "sha512-FpAy1PmTsUpOtgxr23g4jRNvJHYzZEW2PixXeSzksLR/ykPfwKhAodc2+9wQhY+JneWLcvkDw6q7FJIsIdF/aQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "moo": "^0.5.0",
+ "railroad-diagrams": "^1.0.0",
+ "randexp": "0.4.6",
+ "semver": "^5.4.1"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "no-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
+ "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^2.0.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ }
+ },
+ "node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "dev": true
+ },
+ "node-notifier": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
+ "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
+ "dev": true,
+ "requires": {
+ "growly": "^1.3.0",
+ "is-wsl": "^1.1.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-path": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.10"
+ }
+ },
+ "npm-run": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-5.0.1.tgz",
+ "integrity": "sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0",
+ "npm-path": "^2.0.4",
+ "npm-which": "^3.0.1",
+ "serializerr": "^1.0.3"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npm-which": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.9.0",
+ "npm-path": "^2.0.2",
+ "which": "^1.2.10"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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=",
+ "dev": true
+ },
+ "nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": 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-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ }
+ }
+ },
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
+ "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.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==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "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-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.4",
+ "mkdirp": "^0.5.1",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "param-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz",
+ "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==",
+ "dev": true,
+ "requires": {
+ "dot-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "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-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascal-case": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
+ "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
+ "dev": true,
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "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-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "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-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "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=="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pirates": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "dev": true,
+ "requires": {
+ "node-modules-regexp": "^1.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
+ "dev": true
+ },
+ "portfinder": {
+ "version": "1.0.26",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
+ "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postcss": {
+ "version": "7.0.30",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
+ "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+ "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.16",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.0"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "prefix-style": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/prefix-style/-/prefix-style-2.0.1.tgz",
+ "integrity": "sha1-ZrupqHDP2jCKXcIOhekSCTLJWgY="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "dev": true,
+ "requires": {
+ "renderkid": "^2.0.1",
+ "utila": "~0.4"
+ }
+ },
+ "pretty-format": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ }
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "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.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "prompts": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz",
+ "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
+ "dev": true,
+ "requires": {
+ "kleur": "^2.0.1",
+ "sisteransi": "^0.1.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==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ },
+ "prop-types-exact": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
+ "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3",
+ "object.assign": "^4.1.0",
+ "reflect.ownkeys": "^0.2.0"
+ }
+ },
+ "prop-types-extra": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz",
+ "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==",
+ "requires": {
+ "react-is": "^16.3.2",
+ "warning": "^4.0.0"
+ },
+ "dependencies": {
+ "warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ }
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "protochain": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz",
+ "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "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="
+ },
+ "purgecss": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.2.1.tgz",
+ "integrity": "sha512-wngRSLW1dpNr8kr3TL9nTJMyTFI5BiRiaUUEys5M1CA4zEHLF25fRHoshEeDqmhstaNTOddmpYM34zRrUtEGbQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^5.0.0",
+ "glob": "^7.0.0",
+ "postcss": "7.0.28",
+ "postcss-selector-parser": "^6.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "commander": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.28",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz",
+ "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "purgecss-webpack-plugin": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/purgecss-webpack-plugin/-/purgecss-webpack-plugin-2.2.0.tgz",
+ "integrity": "sha512-wYMkVDcoUFAaRKtk3zlX41lOiEk/mxQcyHp/hl9IvYqVilopNctn9wknr5z/+hfmQyIY80yJLE4ovF/iRpxUcg==",
+ "dev": true,
+ "requires": {
+ "purgecss": "^2.2.0",
+ "webpack": "^4.42.1",
+ "webpack-sources": "^1.4.3"
+ }
+ },
+ "qr.js": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz",
+ "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "query-string": {
+ "version": "6.12.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.12.1.tgz",
+ "integrity": "sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA==",
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ }
+ },
+ "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="
+ },
+ "querystringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+ "dev": true
+ },
+ "raf": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+ "requires": {
+ "performance-now": "^2.1.0"
+ }
+ },
+ "railroad-diagrams": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
+ "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
+ "dev": true
+ },
+ "randexp": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
+ "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
+ "dev": true,
+ "requires": {
+ "discontinuous-range": "1.0.0",
+ "ret": "~0.1.10"
+ }
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ }
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ }
+ }
+ },
+ "react": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
+ "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "react-addons-test-utils": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz",
+ "integrity": "sha1-wStu/cIkfBDae4dw0YUICnsEcVY="
+ },
+ "react-bootstrap": {
+ "version": "0.32.4",
+ "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.32.4.tgz",
+ "integrity": "sha512-xj+JfaPOvnvr3ow0aHC7Y3HaBKZNR1mm361hVxVzVX3fcdJNIrfiodbQ0m9nLBpNxiKG6FTU2lq/SbTDYT2vew==",
+ "requires": {
+ "@babel/runtime-corejs2": "^7.0.0",
+ "classnames": "^2.2.5",
+ "dom-helpers": "^3.2.0",
+ "invariant": "^2.2.4",
+ "keycode": "^2.2.0",
+ "prop-types": "^15.6.1",
+ "prop-types-extra": "^1.0.1",
+ "react-overlays": "^0.8.0",
+ "react-prop-types": "^0.4.0",
+ "react-transition-group": "^2.0.0",
+ "uncontrollable": "^5.0.0",
+ "warning": "^3.0.0"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "react-copy-to-clipboard": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz",
+ "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==",
+ "requires": {
+ "copy-to-clipboard": "^3",
+ "prop-types": "^15.5.8"
+ }
+ },
+ "react-custom-scrollbars": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/react-custom-scrollbars/-/react-custom-scrollbars-4.2.1.tgz",
+ "integrity": "sha1-gw/ZUCkn6X6KeMIIaBOJmyqLZts=",
+ "requires": {
+ "dom-css": "^2.0.0",
+ "prop-types": "^15.5.10",
+ "raf": "^3.1.0"
+ }
+ },
+ "react-dom": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
+ "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.19.1"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ },
+ "scheduler": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
+ "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
+ }
+ },
+ "react-dropzone": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-11.0.1.tgz",
+ "integrity": "sha512-x/6wqRHaR8jsrNiu/boVMIPYuoxb83Vyfv77hO7/3ZRn8Pr+KH5onsCsB8MLBa3zdJl410C5FXPUINbu16XIzw==",
+ "requires": {
+ "attr-accept": "^2.0.0",
+ "file-selector": "^0.1.12",
+ "prop-types": "^15.7.2"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ }
+ }
+ },
+ "react-infinite-scroller": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz",
+ "integrity": "sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw==",
+ "requires": {
+ "prop-types": "^15.5.8"
+ }
+ },
+ "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=="
+ },
+ "react-lifecycles-compat": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+ },
+ "react-onclickout": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/react-onclickout/-/react-onclickout-2.0.8.tgz",
+ "integrity": "sha1-0XixP7h6SBNWdhtFSqYN9wabLaQ="
+ },
+ "react-overlays": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz",
+ "integrity": "sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA==",
+ "requires": {
+ "classnames": "^2.2.5",
+ "dom-helpers": "^3.2.1",
+ "prop-types": "^15.5.10",
+ "prop-types-extra": "^1.0.1",
+ "react-transition-group": "^2.2.0",
+ "warning": "^3.0.0"
+ }
+ },
+ "react-prop-types": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz",
+ "integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=",
+ "requires": {
+ "warning": "^3.0.0"
+ }
+ },
+ "react-qr-code": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-1.1.1.tgz",
+ "integrity": "sha512-d6nbjkI9GknmyoIJU2aQCbFojMG5sg2vl5zTH9X+KmzE/RDeXz1MYyeH4Vo0YQkGxhMvXATt6uYku86hQ8GXxw==",
+ "requires": {
+ "@react-native-community/art": "^1.2.0",
+ "prop-types": "^15.7.2",
+ "qr.js": "0.0.0"
+ }
+ },
+ "react-redux": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz",
+ "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "hoist-non-react-statics": "^3.3.0",
+ "invariant": "^2.2.4",
+ "loose-envify": "^1.1.0",
+ "prop-types": "^15.6.1",
+ "react-is": "^16.6.0",
+ "react-lifecycles-compat": "^3.0.0"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "react-router": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
+ "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "history": "^4.9.0",
+ "hoist-non-react-statics": "^3.1.0",
+ "loose-envify": "^1.3.1",
+ "mini-create-react-context": "^0.4.0",
+ "path-to-regexp": "^1.7.0",
+ "prop-types": "^15.6.2",
+ "react-is": "^16.6.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "requires": {
+ "isarray": "0.0.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==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "react-router-dom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz",
+ "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "history": "^4.9.0",
+ "loose-envify": "^1.3.1",
+ "prop-types": "^15.6.2",
+ "react-router": "5.2.0",
+ "tiny-invariant": "^1.0.2",
+ "tiny-warning": "^1.0.0"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "react-test-renderer": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz",
+ "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "react-is": "^16.8.6",
+ "scheduler": "^0.19.1"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "react-transition-group": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+ "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+ "requires": {
+ "dom-helpers": "^3.4.0",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2",
+ "react-lifecycles-compat": "^3.0.4"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "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": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "realpath-native": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
+ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
+ "dev": true,
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "redux": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
+ "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "symbol-observable": "^1.2.0"
+ },
+ "dependencies": {
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ }
+ }
+ },
+ "redux-mock-store": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.4.tgz",
+ "integrity": "sha512-xmcA0O/tjCLXhh9Fuiq6pMrJCwFRaouA8436zcikdIpYWWCjU76CRk+i2bHx8EeiSiMGnB85/lZdU3wIJVXHTA==",
+ "requires": {
+ "lodash.isplainobject": "^4.0.6"
+ }
+ },
+ "redux-thunk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
+ "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+ },
+ "reflect.ownkeys": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
+ "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=",
+ "dev": true
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "renderkid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+ "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+ "dev": true,
+ "requires": {
+ "css-select": "^1.1.0",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.3.0",
+ "strip-ansi": "^3.0.0",
+ "utila": "^0.4.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
+ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.15"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ }
+ }
+ },
+ "request-promise-native": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
+ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
+ "dev": true,
+ "requires": {
+ "request-promise-core": "1.1.3",
+ "stealthy-require": "^1.1.1",
+ "tough-cookie": "^2.3.3"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "reselect": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz",
+ "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-pathname": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
+ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "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"
+ }
+ },
+ "rocambole": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.7.0.tgz",
+ "integrity": "sha1-9seVBVF9xCtvuECEK4uVOw+WhYU=",
+ "dev": true,
+ "requires": {
+ "esprima": "^2.1"
+ }
+ },
+ "rocambole-indent": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/rocambole-indent/-/rocambole-indent-2.0.4.tgz",
+ "integrity": "sha1-oYokl3ygQAuGHapGMehh3LUtCFw=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.1.3",
+ "mout": "^0.11.0",
+ "rocambole-token": "^1.2.1"
+ },
+ "dependencies": {
+ "mout": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz",
+ "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=",
+ "dev": true
+ }
+ }
+ },
+ "rocambole-linebreak": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/rocambole-linebreak/-/rocambole-linebreak-1.0.2.tgz",
+ "integrity": "sha1-A2IVFbQ7RyHJflocG8paA2Y2jy8=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.1.3",
+ "rocambole-token": "^1.2.1",
+ "semver": "^4.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "rocambole-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rocambole-node/-/rocambole-node-1.0.0.tgz",
+ "integrity": "sha1-21tJ3nQHsAgN1RSHLyjjk9D3/z8=",
+ "dev": true
+ },
+ "rocambole-token": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/rocambole-token/-/rocambole-token-1.2.1.tgz",
+ "integrity": "sha1-x4XfdCjcPLJ614lwR71SOMwHDTU=",
+ "dev": true
+ },
+ "rocambole-whitespace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rocambole-whitespace/-/rocambole-whitespace-1.0.0.tgz",
+ "integrity": "sha1-YzMJSSVrKZQfWbGQRZ+ZnGsdO/k=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.1.3",
+ "repeat-string": "^1.5.0",
+ "rocambole-token": "^1.2.1"
+ }
+ },
+ "rst-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
+ "dev": true,
+ "requires": {
+ "lodash.flattendeep": "^4.4.0",
+ "nearley": "^2.7.10"
+ }
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "dev": true
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "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=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sane": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz",
+ "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "capture-exit": "^1.2.0",
+ "exec-sh": "^0.2.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.3",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5",
+ "watch": "~0.18.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "scheduler": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
+ "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.8",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz",
+ "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==",
+ "dev": true,
+ "requires": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
+ "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "serializerr": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz",
+ "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=",
+ "dev": true,
+ "requires": {
+ "protochain": "^1.0.5"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sisteransi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz",
+ "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "sockjs": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
+ "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.10.0",
+ "uuid": "^3.4.0",
+ "websocket-driver": "0.6.5"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ }
+ }
+ },
+ "sockjs-client": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.5",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "~0.11.1",
+ "inherits": "^2.0.3",
+ "json3": "^3.3.2",
+ "url-parse": "^1.4.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
+ },
+ "spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-on-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
+ "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stdin": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz",
+ "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=",
+ "dev": true
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "dev": true
+ },
+ "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-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "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-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
+ "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "dev": true,
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz",
+ "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ },
+ "dependencies": {
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
+ "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
+ "dev": true
+ },
+ "style-loader": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz",
+ "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^2.6.6"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "schema-utils": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
+ "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ }
+ }
+ },
+ "superagent": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz",
+ "integrity": "sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==",
+ "requires": {
+ "component-emitter": "^1.3.0",
+ "cookiejar": "^2.1.2",
+ "debug": "^4.1.1",
+ "fast-safe-stringify": "^2.0.7",
+ "form-data": "^3.0.0",
+ "formidable": "^1.2.1",
+ "methods": "^1.1.2",
+ "mime": "^2.4.4",
+ "qs": "^6.9.1",
+ "readable-stream": "^3.4.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "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"
+ }
+ },
+ "form-data": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
+ "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "mime": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
+ "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "qs": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
+ "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
+ },
+ "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"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "superagent-es6-promise": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/superagent-es6-promise/-/superagent-es6-promise-1.0.0.tgz",
+ "integrity": "sha1-9QcwhD1GmKhLHWEl561X8YzC/aQ="
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+ },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
+ },
+ "tapable": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA=="
+ },
+ "tar": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz",
+ "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.0",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "terser": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz",
+ "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
+ "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^4.0.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+ "requires": {
+ "randombytes": "^2.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=="
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz",
+ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "micromatch": "^2.3.11",
+ "object-assign": "^4.1.0",
+ "read-pkg-up": "^1.0.1",
+ "require-main-filename": "^1.0.1"
+ }
+ },
+ "throat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+ "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "tiny-invariant": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz",
+ "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw=="
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-camel-case": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz",
+ "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=",
+ "requires": {
+ "to-space-case": "^1.0.0"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-no-case": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz",
+ "integrity": "sha1-xyKQcWTvaxeBMsjmmTAhLRtKoWo="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "to-space-case": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz",
+ "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=",
+ "requires": {
+ "to-no-case": "^1.0.0"
+ }
+ },
+ "toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ },
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "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=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.44.0"
+ }
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "uglify-js": {
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.3.tgz",
+ "integrity": "sha512-r5ImcL6QyzQGVimQoov3aL2ZScywrOgBXGndbWrdehKoSvGe/RmiE5Jpw/v+GvxODt6l2tpBXwA7n+qZVlHBMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "commander": "~2.20.3"
+ },
+ "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==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "uncontrollable": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-5.1.0.tgz",
+ "integrity": "sha512-5FXYaFANKaafg4IVZXUNtGyzsnYEvqlr9wQ3WpZxFpEUxl29A3H6Q4G1Dnnorvq9TGOGATBApWR4YpLAh+F5hw==",
+ "requires": {
+ "invariant": "^2.2.4"
+ }
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
+ "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=="
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "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="
+ }
+ }
+ },
+ "url-loader": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.0.tgz",
+ "integrity": "sha512-IzgAAIC8wRrg6NYkFIJY09vtktQcsvU8V6HhtQj9PTefbYImzLB1hufqo4m+RyM5N3mLx5BqJKccgxJS+W3kqw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "mime-types": "^2.1.26",
+ "schema-utils": "^2.6.5"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "schema-utils": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
+ "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "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.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "^1.1.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "value-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
+ "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "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=="
+ },
+ "w3c-hr-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "dev": true,
+ "requires": {
+ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "warning": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+ "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "watch": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz",
+ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.2.0",
+ "minimist": "^1.2.0"
+ }
+ },
+ "watchpack": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
+ "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
+ "requires": {
+ "chokidar": "^3.4.1",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.1"
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
+ "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "optional": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "optional": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "optional": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "optional": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "optional": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "optional": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "optional": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "optional": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "optional": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "optional": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "optional": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "optional": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "optional": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "optional": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "optional": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "optional": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "optional": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "optional": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "optional": true
+ }
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webpack": {
+ "version": "4.44.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
+ "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.4.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.3.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.3",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.7.4",
+ "webpack-sources": "^1.4.1"
+ },
+ "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"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "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=="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
+ }
+ }
+ },
+ "webpack-cli": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz",
+ "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.2",
+ "cross-spawn": "6.0.5",
+ "enhanced-resolve": "4.1.0",
+ "findup-sync": "3.0.0",
+ "global-modules": "2.0.0",
+ "import-local": "2.0.0",
+ "interpret": "1.2.0",
+ "loader-utils": "1.2.3",
+ "supports-color": "6.1.0",
+ "v8-compile-cache": "2.0.3",
+ "yargs": "13.2.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "yargs": {
+ "version": "13.2.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+ "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
+ "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
+ "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.3.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.7",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "0.3.20",
+ "sockjs-client": "1.4.0",
+ "spdy": "^4.0.2",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "^13.3.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "websocket-driver": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
+ "dev": true,
+ "requires": {
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "dev": true
+ },
+ "whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.24"
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xml-name-validator": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "yargs": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz",
+ "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^9.0.2"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/browser/package.json b/browser/package.json
new file mode 100644
index 000000000..c9bdc073f
--- /dev/null
+++ b/browser/package.json
@@ -0,0 +1,97 @@
+{
+ "name": "browser",
+ "version": "0.0.1",
+ "description": "MinIO Browser",
+ "scripts": {
+ "test": "jest",
+ "dev": "NODE_ENV=dev webpack-dev-server --devtool cheap-module-eval-source-map --progress --colors --hot --content-base dev",
+ "build": "NODE_ENV=dev node build.js",
+ "release": "NODE_ENV=production node build.js",
+ "format": "esformatter -i 'app/**/*.js'"
+ },
+ "jest": {
+ "setupTestFrameworkScriptFile": "./app/js/jest/setup.js",
+ "testURL": "https://localhost:8080",
+ "moduleNameMapper": {
+ "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/app/js/jest/__mocks__/fileMock.js",
+ "\\.(css|scss)$": "identity-obj-proxy"
+ }
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/minio/minio"
+ },
+ "author": "MinIO, Inc.",
+ "bugs": {
+ "url": "https://github.com/minio/minio/issues"
+ },
+ "homepage": "https://github.com/minio/minio",
+ "devDependencies": {
+ "async": "^3.2.0",
+ "babel-cli": "^6.26.0",
+ "babel-core": "^6.26.3",
+ "babel-jest": "^23.6.0",
+ "babel-loader": "^7.1.2",
+ "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+ "babel-plugin-transform-object-rest-spread": "^6.26.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-preset-es2015": "^6.14.0",
+ "babel-preset-react": "^6.11.1",
+ "babel-register": "^6.26.0",
+ "copy-webpack-plugin": "^6.0.1",
+ "css-loader": "^3.5.3",
+ "enzyme": "^3.11.0",
+ "enzyme-adapter-react-16": "^1.15.2",
+ "esformatter": "^0.11.3",
+ "esformatter-jsx": "^8.0.1",
+ "esformatter-jsx-ignore": "^1.0.6",
+ "html-webpack-plugin": "^4.3.0",
+ "jest": "^23.6.0",
+ "jest-enzyme": "^7.1.2",
+ "json-loader": "^0.5.7",
+ "less": "^3.11.1",
+ "less-loader": "^6.1.0",
+ "purgecss-webpack-plugin": "^2.2.0",
+ "style-loader": "^1.2.1",
+ "url-loader": "^4.1.0",
+ "webpack-cli": "^3.3.11",
+ "webpack-dev-server": "^3.11.0"
+ },
+ "dependencies": {
+ "@fortawesome/fontawesome-free": "^5.13.0",
+ "bootstrap": "^3.4.1",
+ "classnames": "^2.2.6",
+ "core-js": "^3.6.5",
+ "expect": "^26.0.1",
+ "glob-all": "^3.2.1",
+ "history": "^4.10.1",
+ "humanize": "0.0.9",
+ "identity-obj-proxy": "^3.0.0",
+ "jwt-decode": "^2.2.0",
+ "local-storage-fallback": "^4.1.1",
+ "material-design-iconic-font": "^2.2.0",
+ "mime-db": "^1.44.0",
+ "mime-types": "^2.1.27",
+ "moment": "^2.26.0",
+ "query-string": "^6.12.1",
+ "react": "^16.13.1",
+ "react-addons-test-utils": "^15.6.2",
+ "react-bootstrap": "^0.32.4",
+ "react-copy-to-clipboard": "^5.0.2",
+ "react-custom-scrollbars": "^4.2.1",
+ "react-dom": "^16.13.1",
+ "react-dropzone": "^11.0.1",
+ "react-infinite-scroller": "^1.2.4",
+ "react-onclickout": "^2.0.8",
+ "react-qr-code": "^1.1.1",
+ "react-redux": "^5.1.2",
+ "react-router-dom": "^5.2.0",
+ "redux": "^4.0.5",
+ "redux-mock-store": "^1.5.4",
+ "redux-thunk": "^2.3.0",
+ "reselect": "^4.0.0",
+ "superagent": "^5.2.2",
+ "superagent-es6-promise": "^1.0.0",
+ "webpack": "^4.43.0"
+ }
+}
diff --git a/browser/release/chrome.png b/browser/release/chrome.png
new file mode 100644
index 000000000..278ef4d15
Binary files /dev/null and b/browser/release/chrome.png differ
diff --git a/browser/release/favicon-16x16.png b/browser/release/favicon-16x16.png
new file mode 100644
index 000000000..1ef69e777
Binary files /dev/null and b/browser/release/favicon-16x16.png differ
diff --git a/browser/release/favicon-32x32.png b/browser/release/favicon-32x32.png
new file mode 100644
index 000000000..24f73811b
Binary files /dev/null and b/browser/release/favicon-32x32.png differ
diff --git a/browser/release/favicon-96x96.png b/browser/release/favicon-96x96.png
new file mode 100644
index 000000000..7410eca4c
Binary files /dev/null and b/browser/release/favicon-96x96.png differ
diff --git a/browser/release/firefox.png b/browser/release/firefox.png
new file mode 100644
index 000000000..2803f10a7
Binary files /dev/null and b/browser/release/firefox.png differ
diff --git a/browser/release/index.html b/browser/release/index.html
new file mode 100644
index 000000000..61cc6e39d
--- /dev/null
+++ b/browser/release/index.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+ MinIO Browser
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/browser/release/index_bundle.js b/browser/release/index_bundle.js
new file mode 100644
index 000000000..e9174f5fa
--- /dev/null
+++ b/browser/release/index_bundle.js
@@ -0,0 +1,67 @@
+!function(A){var M={};function I(g){if(M[g])return M[g].exports;var T=M[g]={i:g,l:!1,exports:{}};return A[g].call(T.exports,T,T.exports,I),T.l=!0,T.exports}I.m=A,I.c=M,I.d=function(A,M,g){I.o(A,M)||Object.defineProperty(A,M,{enumerable:!0,get:g})},I.r=function(A){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})},I.t=function(A,M){if(1&M&&(A=I(A)),8&M)return A;if(4&M&&"object"==typeof A&&A&&A.__esModule)return A;var g=Object.create(null);if(I.r(g),Object.defineProperty(g,"default",{enumerable:!0,value:A}),2&M&&"string"!=typeof A)for(var T in A)I.d(g,T,function(M){return A[M]}.bind(null,T));return g},I.n=function(A){var M=A&&A.__esModule?function(){return A.default}:function(){return A};return I.d(M,"a",M),M},I.o=function(A,M){return Object.prototype.hasOwnProperty.call(A,M)},I.p="",I(I.s=309)}([function(A,M,I){A.exports=I(664)()},function(A,M,I){"use strict";A.exports=I(543)},function(A,M,I){var g;
+/*!
+ Copyright (c) 2017 Jed Watson.
+ Licensed under the MIT License (MIT), see
+ http://jedwatson.github.io/classnames
+*/!function(){"use strict";var I={}.hasOwnProperty;function T(){for(var A=[],M=0;M, or explicitly pass "'+r+'" as a prop to "'+N+'".'),g.initSelector(),g.initSubscription(),g}Object(g.a)(j,I);var C=j.prototype;return C.getChildContext=function(){var A,M=this.propsMode?null:this.subscription;return(A={})[h]=M||this.context[h],A},C.componentDidMount=function(){a&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},C.componentWillReceiveProps=function(A){this.selector.run(A)},C.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},C.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=o,this.store=null,this.selector.run=o,this.selector.shouldComponentUpdate=!1},C.getWrappedInstance=function(){return c()(s,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+u+"() call."),this.wrappedInstance},C.setWrappedInstance=function(A){this.wrappedInstance=A},C.initSelector=function(){var M=A(this.store.dispatch,D);this.selector=function(A,M){var I={run:function(g){try{var T=A(M.getState(),g);(T!==I.props||I.error)&&(I.shouldComponentUpdate=!0,I.props=T,I.error=null)}catch(A){I.shouldComponentUpdate=!0,I.error=A}}};return I}(M,this.store),this.selector.run(this.props)},C.initSubscription=function(){if(a){var A=(this.propsMode?this.props:this.context)[h];this.subscription=new Y(this.store,A,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},C.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(B)):this.notifyNestedSubs()},C.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},C.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},C.addExtraProps=function(A){if(!(s||Q||this.propsMode&&this.subscription))return A;var M=Object(O.a)({},A);return s&&(M.ref=this.setWrappedInstance),Q&&(M[Q]=this.renderCount++),this.propsMode&&this.subscription&&(M[h]=this.subscription),M},C.render=function(){var A=this.selector;if(A.shouldComponentUpdate=!1,A.error)throw A.error;return Object(T.createElement)(M,this.addExtraProps(A.props))},j}(T.Component);return n&&(j.prototype.UNSAFE_componentWillReceiveProps=j.prototype.componentWillReceiveProps,delete j.prototype.componentWillReceiveProps),j.WrappedComponent=M,j.displayName=N,j.childContextTypes=d,j.contextTypes=F,j.propTypes=F,z()(j,M)}}var a=Object.prototype.hasOwnProperty;function U(A,M){return A===M?0!==A||0!==M||1/A==1/M:A!=A&&M!=M}function r(A,M){if(U(A,M))return!0;if("object"!=typeof A||null===A||"object"!=typeof M||null===M)return!1;var I=Object.keys(A),g=Object.keys(M);if(I.length!==g.length)return!1;for(var T=0;T=0;g--){var T=M[g](A);if(T)return T}return function(M,g){throw new Error("Invalid value of type "+typeof A+" for "+I+" argument when connecting component "+g.wrappedComponentName+".")}}function b(A,M){return A===M}var R,W,Z,v,P,K,V,X,q,_,$,AA,MA=(Z=(W=void 0===R?{}:R).connectHOC,v=void 0===Z?x:Z,P=W.mapStateToPropsFactories,K=void 0===P?F:P,V=W.mapDispatchToPropsFactories,X=void 0===V?m:V,q=W.mergePropsFactories,_=void 0===q?G:q,$=W.selectorFactory,AA=void 0===$?H:$,function(A,M,I,g){void 0===g&&(g={});var T=g,N=T.pure,D=void 0===N||N,j=T.areStatesEqual,C=void 0===j?b:j,L=T.areOwnPropsEqual,t=void 0===L?r:L,w=T.areStatePropsEqual,i=void 0===w?r:w,u=T.areMergedPropsEqual,z=void 0===u?r:u,E=Object(y.a)(T,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),c=J(A,K,"mapStateToProps"),e=J(M,X,"mapDispatchToProps"),Q=J(I,_,"mergeProps");return v(AA,Object(O.a)({methodName:"connect",getDisplayName:function(A){return"Connect("+A+")"},shouldHandleStateChanges:Boolean(A),initMapStateToProps:c,initMapDispatchToProps:e,initMergeProps:Q,pure:D,areStatesEqual:C,areOwnPropsEqual:t,areStatePropsEqual:i,areMergedPropsEqual:z},E))})},function(A,M){A.exports=function(A){try{return!!A()}catch(A){return!0}}},function(A,M){A.exports=function(A){return"object"==typeof A?null!==A:"function"==typeof A}},function(A,M,I){"use strict";!function A(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(A)}catch(A){console.error(A)}}}(),A.exports=I(544)},function(A,M,I){"use strict";function g(){return(g=Object.assign||function(A){for(var M=1;M0?T(g(A),9007199254740991):0}},function(A,M,I){A.exports=!I(8)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(A,M,I){A.exports=I(763)()},function(A,M){A.exports=function(A){return A&&A.__esModule?A:{default:A}}},function(A,M,I){var g=I(5),T=I(224),N=I(53),D=Object.defineProperty;M.f=I(14)?Object.defineProperty:function(A,M,I){if(g(A),M=N(M,!0),g(I),T)try{return D(A,M,I)}catch(A){}if("get"in I||"set"in I)throw TypeError("Accessors not supported!");return"value"in I&&(A[M]=I.value),A}},function(A,M,I){var g=I(54);A.exports=function(A){return Object(g(A))}},function(A,M){var I=A.exports={version:"2.6.11"};"number"==typeof __e&&(__e=I)},function(A,M,I){"use strict";function g(A,M){A.prototype=Object.create(M.prototype),A.prototype.constructor=A,A.__proto__=M}I.d(M,"a",(function(){return g}))},function(A,M){function I(A){if(A&&"object"==typeof A){var M=A.which||A.keyCode||A.charCode;M&&(A=M)}if("number"==typeof A)return D[A];var I,N=String(A);return(I=g[N.toLowerCase()])?I:(I=T[N.toLowerCase()])||(1===N.length?N.charCodeAt(0):void 0)}I.isEventKey=function(A,M){if(A&&"object"==typeof A){var I=A.which||A.keyCode||A.charCode;if(null==I)return!1;if("string"==typeof M){var N;if(N=g[M.toLowerCase()])return N===I;if(N=T[M.toLowerCase()])return N===I}else if("number"==typeof M)return M===I;return!1}};var g=(M=A.exports=I).code=M.codes={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,"pause/break":19,"caps lock":20,esc:27,space:32,"page up":33,"page down":34,end:35,home:36,left:37,up:38,right:39,down:40,insert:45,delete:46,command:91,"left command":91,"right command":93,"numpad *":106,"numpad +":107,"numpad -":109,"numpad .":110,"numpad /":111,"num lock":144,"scroll lock":145,"my computer":182,"my calculator":183,";":186,"=":187,",":188,"-":189,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221,"'":222},T=M.aliases={windows:91,"⇧":16,"⌥":18,"⌃":17,"⌘":91,ctl:17,control:17,option:18,pause:19,break:19,caps:20,return:13,escape:27,spc:32,spacebar:32,pgup:33,pgdn:34,ins:45,del:46,cmd:91};
+/*!
+ * Programatically add the following
+ */
+for(N=97;N<123;N++)g[String.fromCharCode(N)]=N-32;for(var N=48;N<58;N++)g[N-48]=N;for(N=1;N<13;N++)g["f"+N]=N+111;for(N=0;N<10;N++)g["numpad "+N]=N+96;var D=M.names=M.title={};for(N in g)D[g[N]]=N;for(var j in T)g[j]=T[j]},function(A,M){A.exports=function(A){if("function"!=typeof A)throw TypeError(A+" is not a function!");return A}},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0});var g=function(){function A(A,M){for(var I=0;I1?N-1:0),j=1;j"+T+""+M+">"};A.exports=function(A,M){var I={};I[A]=M(j),g(g.P+g.F*T((function(){var M=""[A]('"');return M!==M.toLowerCase()||M.split('"').length>3})),"String",I)}},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0});var g=window.location.pathname;M.minioBrowserPrefix=g.slice(0,g.indexOf("/",1)),M.READ_ONLY="readonly",M.WRITE_ONLY="writeonly",M.READ_WRITE="readwrite",M.NONE="none",M.SHARE_OBJECT_EXPIRY_DAYS=5,M.SHARE_OBJECT_EXPIRY_HOURS=0,M.SHARE_OBJECT_EXPIRY_MINUTES=0,M.ACCESS_KEY_MIN_LENGTH=3,M.SECRET_KEY_MIN_LENGTH=8,M.SORT_BY_NAME="name",M.SORT_BY_SIZE="size",M.SORT_BY_LAST_MODIFIED="last-modified",M.SORT_ORDER_ASC="asc",M.SORT_ORDER_DESC="desc"},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.downloadCheckedObjects=M.resetCheckedList=M.uncheckObject=M.checkObject=M.downloadPrefix=M.downloadObject=M.getObjectURL=M.hideShareObject=M.showShareObject=M.shareObject=M.deleteCheckedObjects=M.removeObject=M.deleteObject=M.setPrefixWritable=M.setCurrentPrefix=M.selectPrefix=M.setSortOrder=M.setSortBy=M.sortObjects=M.fetchObjects=M.setListLoading=M.setFilter=M.resetList=M.setList=M.SET_LIST_LOADING=M.CHECKED_LIST_RESET=M.CHECKED_LIST_REMOVE=M.CHECKED_LIST_ADD=M.SET_SHARE_OBJECT=M.SET_PREFIX_WRITABLE=M.SET_CURRENT_PREFIX=M.SET_SORT_ORDER=M.SET_SORT_BY=M.REMOVE=M.APPEND_LIST=M.SET_FILTER=M.RESET_LIST=M.SET_LIST=void 0;var g=Object.assign||function(A){for(var M=1;M2&&void 0!==arguments[2])||arguments[2];return{type:Y,show:!0,object:A,url:M,showExpiryDate:I}}),f=(M.hideShareObject=function(A,M){return{type:Y,show:!1,object:"",url:""}},M.getObjectURL=function(A,M){return function(I,g){var N=(0,j.getCurrentBucket)(g()),D=(0,C.getCurrentPrefix)(g()),w=encodeURI(""+D+A);if(T.default.LoggedIn())return T.default.CreateURLToken().then((function(A){var I=""+window.location.origin+t.minioBrowserPrefix+"/download/"+N+"/"+w+"?token="+A.token;M(I)})).catch((function(A){I(L.set({type:"danger",message:A.message}))}));var i=""+window.location.origin+t.minioBrowserPrefix+"/download/"+N+"/"+w+"?token=";M(i)}},M.downloadObject=function(A){return function(M,I){var g=(0,j.getCurrentBucket)(I()),N=(0,C.getCurrentPrefix)(I()),D=encodeURI(""+N+A);if(T.default.LoggedIn())return T.default.CreateURLToken().then((function(A){var M=""+window.location.origin+t.minioBrowserPrefix+"/download/"+g+"/"+D+"?token="+A.token;window.location=M})).catch((function(A){M(L.set({type:"danger",message:A.message}))}));var w=""+window.location.origin+t.minioBrowserPrefix+"/download/"+g+"/"+D+"?token=";window.location=w}},M.downloadPrefix=function(A){return function(M,I){return p((0,j.getCurrentBucket)(I()),(0,C.getCurrentPrefix)(I()),[A],A.slice(0,-1)+".zip",M)}},M.checkObject=function(A){return{type:n,object:A}},M.uncheckObject=function(A){return{type:k,object:A}},M.resetCheckedList=function(){return{type:B}}),p=(M.downloadCheckedObjects=function(){return function(A,M){return p((0,j.getCurrentBucket)(M()),(0,C.getCurrentPrefix)(M()),(0,C.getCheckedList)(M()),null,A)}},function(A,M,I,g,N){var D={bucketName:A,prefix:M,objects:I};if(T.default.LoggedIn())return T.default.CreateURLToken().then((function(A){var M=""+location.origin+t.minioBrowserPrefix+"/zip?token="+A.token;H(M,D,g,N)})).catch((function(A){return N(L.set({type:"danger",message:A.message}))}));var j=""+location.origin+t.minioBrowserPrefix+"/zip?token=";H(j,D,g,N)}),H=function(A,M,I,g){var T=document.createElement("a");document.body.appendChild(T);var N=new XMLHttpRequest;N.open("POST",A,!0),N.responseType="blob",N.onload=function(A){if(200==this.status){g(f());var N=new Blob([this.response],{type:"octet/stream"}),D=window.URL.createObjectURL(N),j=M.prefix.length>1?"-":"";T.href=D,T.download=I||M.bucketName+j+M.prefix.slice(0,-1)+".zip",T.click(),window.URL.revokeObjectURL(D),T.remove()}},N.send(JSON.stringify(M))}},function(A,M,I){"use strict";A.exports=function(){}},function(A,M,I){"use strict";I.r(M),I.d(M,"Accordion",(function(){return gA})),I.d(M,"Alert",(function(){return wA})),I.d(M,"Badge",(function(){return yA})),I.d(M,"Breadcrumb",(function(){return aA})),I.d(M,"BreadcrumbItem",(function(){return oA})),I.d(M,"Button",(function(){return SA})),I.d(M,"ButtonGroup",(function(){return FA})),I.d(M,"ButtonToolbar",(function(){return GA})),I.d(M,"Carousel",(function(){return AM})),I.d(M,"CarouselItem",(function(){return PA})),I.d(M,"Checkbox",(function(){return gM})),I.d(M,"Clearfix",(function(){return jM})),I.d(M,"CloseButton",(function(){return CA})),I.d(M,"ControlLabel",(function(){return wM})),I.d(M,"Col",(function(){return uM})),I.d(M,"Collapse",(function(){return UM})),I.d(M,"Dropdown",(function(){return $M})),I.d(M,"DropdownButton",(function(){return TI})),I.d(M,"Fade",(function(){return CI})),I.d(M,"Form",(function(){return wI})),I.d(M,"FormControl",(function(){return YI})),I.d(M,"FormGroup",(function(){return oI})),I.d(M,"Glyphicon",(function(){return XA})),I.d(M,"Grid",(function(){return UI})),I.d(M,"HelpBlock",(function(){return SI})),I.d(M,"Image",(function(){return hI})),I.d(M,"InputGroup",(function(){return pI})),I.d(M,"Jumbotron",(function(){return bI})),I.d(M,"Label",(function(){return WI})),I.d(M,"ListGroup",(function(){return XI})),I.d(M,"ListGroupItem",(function(){return PI})),I.d(M,"Media",(function(){return ug})),I.d(M,"MenuItem",(function(){return cg})),I.d(M,"Modal",(function(){return $g})),I.d(M,"ModalBody",(function(){return hg})),I.d(M,"ModalDialog",(function(){return dg})),I.d(M,"ModalFooter",(function(){return pg})),I.d(M,"ModalHeader",(function(){return Rg})),I.d(M,"ModalTitle",(function(){return vg})),I.d(M,"Nav",(function(){return gT})),I.d(M,"Navbar",(function(){return nT})),I.d(M,"NavbarBrand",(function(){return DT})),I.d(M,"NavDropdown",(function(){return oT})),I.d(M,"NavItem",(function(){return UT})),I.d(M,"Overlay",(function(){return mT})),I.d(M,"OverlayTrigger",(function(){return JT})),I.d(M,"PageHeader",(function(){return RT})),I.d(M,"PageItem",(function(){return VT})),I.d(M,"Pager",(function(){return _T})),I.d(M,"Pagination",(function(){return CN})),I.d(M,"Panel",(function(){return bN})),I.d(M,"PanelGroup",(function(){return IA})),I.d(M,"Popover",(function(){return ZN})),I.d(M,"ProgressBar",(function(){return VN})),I.d(M,"Radio",(function(){return _N})),I.d(M,"ResponsiveEmbed",(function(){return MD})),I.d(M,"Row",(function(){return TD})),I.d(M,"SafeAnchor",(function(){return nA})),I.d(M,"SplitButton",(function(){return LD})),I.d(M,"Tab",(function(){return aD})),I.d(M,"TabContainer",(function(){return yD})),I.d(M,"TabContent",(function(){return eD})),I.d(M,"Table",(function(){return SD})),I.d(M,"TabPane",(function(){return BD})),I.d(M,"Tabs",(function(){return mD})),I.d(M,"Thumbnail",(function(){return GD})),I.d(M,"ToggleButton",(function(){return HD})),I.d(M,"ToggleButtonGroup",(function(){return WD})),I.d(M,"Tooltip",(function(){return PD})),I.d(M,"Well",(function(){return VD})),I.d(M,"utils",(function(){return T}));var g={};I.r(g),I.d(g,"prefix",(function(){return G})),I.d(g,"bsClass",(function(){return f})),I.d(g,"bsStyles",(function(){return p})),I.d(g,"bsSizes",(function(){return H})),I.d(g,"getClassSet",(function(){return J})),I.d(g,"splitBsProps",(function(){return W})),I.d(g,"splitBsPropsAndOmit",(function(){return Z})),I.d(g,"addStyle",(function(){return v})),I.d(g,"_curry",(function(){return P}));var T={};I.r(T),I.d(T,"bootstrapUtils",(function(){return g})),I.d(T,"createChainedFunction",(function(){return cA})),I.d(T,"ValidComponentChildren",(function(){return K}));var N=I(123),D=I.n(N);function j(){return(j=D.a||function(A){for(var M=1;M=0||(T[I]=A[I]);return T}var z=I(2),E=I.n(z),c=I(0),e=I.n(c),Q=I(26),Y=I.n(Q),n=I(104),k=I.n(n),B=I(52),o=I.n(B),x="large",a="small",U="xsmall",r={large:"lg",medium:"md",small:"sm",xsmall:"xs",lg:"lg",md:"md",sm:"sm",xs:"xs"},S=["lg","md","sm","xs"],s={SUCCESS:"success",WARNING:"warning",DANGER:"danger",INFO:"info"},l="default",h="primary",m="link",F="inverse";function d(A){return function(){for(var M=arguments.length,I=new Array(M),g=0;g1?M-1:0),g=1;g1?I-1:0),T=1;T=A.children.length&&this.setState({activeIndex:0,previousActiveIndex:null,direction:null})},I.componentWillUnmount=function(){clearTimeout(this.timeout),this.isUnmounted=!0},I.getActiveIndex=function(){var A=this.props.activeIndex;return null!=A?A:this.state.activeIndex},I.getDirection=function(A,M){return A===M?null:A>M?"prev":"next"},I.handleItemAnimateOutEnd=function(){var A=this;this.setState({previousActiveIndex:null,direction:null},(function(){A.waitForNext(),A.props.onSlideEnd&&A.props.onSlideEnd()}))},I.handleMouseOut=function(){this.isPaused&&this.play()},I.handleMouseOver=function(){this.props.pauseOnHover&&this.pause()},I.handleNext=function(A){var M=this.getActiveIndex()+1;if(M>K.count(this.props.children)-1){if(!this.props.wrap)return;M=0}this.select(M,A,"next")},I.handlePrev=function(A){var M=this.getActiveIndex()-1;if(M<0){if(!this.props.wrap)return;M=K.count(this.props.children)-1}this.select(M,A,"prev")},I.pause=function(){this.isPaused=!0,clearTimeout(this.timeout)},I.play=function(){this.isPaused=!1,this.waitForNext()},I.select=function(A,M,I){if(clearTimeout(this.timeout),!this.isUnmounted){var g=this.props.slide?this.getActiveIndex():null;I=I||this.getDirection(g,A);var T=this.props.onSelect;if(T&&(T.length>1?(M?(M.persist(),M.direction=I):M={direction:I},T(A,M)):T(A)),null==this.props.activeIndex&&A!==g){if(null!=this.state.previousActiveIndex)return;this.setState({activeIndex:A,previousActiveIndex:g,direction:I})}}},I.waitForNext=function(){var A=this.props,M=A.slide,I=A.interval,g=A.activeIndex;!this.isPaused&&M&&I&&null==g&&(this.timeout=setTimeout(this.handleNext,I))},I.renderControls=function(A){var M=A.wrap,I=A.children,g=A.activeIndex,T=A.prevIcon,N=A.nextIcon,D=A.bsProps,j=A.prevLabel,C=A.nextLabel,L=G(D,"control"),t=K.count(I);return[(M||0!==g)&&i.a.createElement(nA,{key:"prev",className:E()(L,"left"),onClick:this.handlePrev},T,j&&i.a.createElement("span",{className:"sr-only"},j)),(M||g!==t-1)&&i.a.createElement(nA,{key:"next",className:E()(L,"right"),onClick:this.handleNext},N,C&&i.a.createElement("span",{className:"sr-only"},C))]},I.renderIndicators=function(A,M,I){var g=this,T=[];return K.forEach(A,(function(A,I){T.push(i.a.createElement("li",{key:I,className:I===M?"active":null,onClick:function(A){return g.select(I,A)}})," ")})),i.a.createElement("ol",{className:G(I,"indicators")},T)},I.render=function(){var A=this,M=this.props,I=M.slide,g=M.indicators,T=M.controls,N=M.wrap,D=M.prevIcon,C=M.prevLabel,L=M.nextIcon,t=M.nextLabel,O=M.className,y=M.children,z=u(M,["slide","indicators","controls","wrap","prevIcon","prevLabel","nextIcon","nextLabel","className","children"]),c=this.state,e=c.previousActiveIndex,Q=c.direction,Y=Z(z,["interval","pauseOnHover","onSelect","onSlideEnd","activeIndex","defaultActiveIndex","direction"]),n=Y[0],k=Y[1],B=this.getActiveIndex(),o=j({},J(n),{slide:I});return i.a.createElement("div",j({},k,{className:E()(O,o),onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut}),g&&this.renderIndicators(y,B,n),i.a.createElement("div",{className:G(n,"inner")},K.map(y,(function(M,g){var T=g===B,N=I&&g===e;return Object(w.cloneElement)(M,{active:T,index:g,animateOut:N,animateIn:T&&null!=e&&I,direction:Q,onAnimateOutEnd:N?A.handleItemAnimateOutEnd:null})}))),T&&this.renderControls({wrap:N,children:y,activeIndex:B,prevIcon:D,prevLabel:C,nextIcon:L,nextLabel:t,bsProps:n}))},M}(i.a.Component);$A.propTypes=qA,$A.defaultProps=_A,$A.Caption=HA,$A.Item=PA;var AM=f("carousel",$A),MM=(I(34),{inline:e.a.bool,disabled:e.a.bool,title:e.a.string,validationState:e.a.oneOf(["success","warning","error",null]),inputRef:e.a.func}),IM=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.inline,I=A.disabled,g=A.validationState,T=A.inputRef,N=A.className,D=A.style,C=A.title,L=A.children,t=W(u(A,["inline","disabled","validationState","inputRef","className","style","title","children"])),w=t[0],O=t[1],y=i.a.createElement("input",j({},O,{ref:T,type:"checkbox",disabled:I}));if(M){var z,c=((z={})[G(w,"inline")]=!0,z.disabled=I,z);return i.a.createElement("label",{className:E()(N,c),style:D,title:C},y,L)}var e=j({},J(w),{disabled:I});return g&&(e["has-"+g]=!0),i.a.createElement("div",{className:E()(N,e),style:D},i.a.createElement("label",{title:C},y,L))},M}(i.a.Component);IM.propTypes=MM,IM.defaultProps={inline:!1,disabled:!1,title:""};var gM=f("checkbox",IM);function TM(A){return""+A.charAt(0).toUpperCase()+A.slice(1)}var NM={componentClass:EA.a,visibleXsBlock:e.a.bool,visibleSmBlock:e.a.bool,visibleMdBlock:e.a.bool,visibleLgBlock:e.a.bool},DM=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return S.forEach((function(A){var M="visible"+TM(A)+"Block";N[M]&&(D["visible-"+A+"-block"]=!0),delete N[M]})),i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);DM.propTypes=NM,DM.defaultProps={componentClass:"div"};var jM=f("clearfix",DM),CM={htmlFor:e.a.string,srOnly:e.a.bool},LM={$bs_formGroup:e.a.object},tM=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.context.$bs_formGroup,M=A&&A.controlId,I=this.props,g=I.htmlFor,T=void 0===g?M:g,N=I.srOnly,D=I.className,C=W(u(I,["htmlFor","srOnly","className"])),L=C[0],t=C[1],w=j({},J(L),{"sr-only":N});return i.a.createElement("label",j({},t,{htmlFor:T,className:E()(D,w)}))},M}(i.a.Component);tM.propTypes=CM,tM.defaultProps={srOnly:!1},tM.contextTypes=LM;var wM=f("control-label",tM),iM={componentClass:EA.a,xs:e.a.number,sm:e.a.number,md:e.a.number,lg:e.a.number,xsHidden:e.a.bool,smHidden:e.a.bool,mdHidden:e.a.bool,lgHidden:e.a.bool,xsOffset:e.a.number,smOffset:e.a.number,mdOffset:e.a.number,lgOffset:e.a.number,xsPush:e.a.number,smPush:e.a.number,mdPush:e.a.number,lgPush:e.a.number,xsPull:e.a.number,smPull:e.a.number,mdPull:e.a.number,lgPull:e.a.number},OM=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=[];return S.forEach((function(A){function M(M,I){var g=""+A+M,j=N[g];null!=j&&D.push(G(T,""+A+I+"-"+j)),delete N[g]}M("",""),M("Offset","-offset"),M("Push","-push"),M("Pull","-pull");var I=A+"Hidden";N[I]&&D.push("hidden-"+A),delete N[I]})),i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);OM.propTypes=iM,OM.defaultProps={componentClass:"div"};var yM,uM=f("col",OM),zM=I(221),EM=I.n(zM),cM=I(92),eM=I.n(cM),QM=I(60),YM=I.n(QM),nM={height:["marginTop","marginBottom"],width:["marginLeft","marginRight"]};function kM(A){A.offsetHeight}var BM=((yM={})[QM.EXITED]="collapse",yM[QM.EXITING]="collapsing",yM[QM.ENTERING]="collapsing",yM[QM.ENTERED]="collapse in",yM),oM={in:e.a.bool,mountOnEnter:e.a.bool,unmountOnExit:e.a.bool,appear:e.a.bool,timeout:e.a.number,onEnter:e.a.func,onEntering:e.a.func,onEntered:e.a.func,onExit:e.a.func,onExiting:e.a.func,onExited:e.a.func,dimension:e.a.oneOfType([e.a.oneOf(["height","width"]),e.a.func]),getDimensionValue:e.a.func,role:e.a.string},xM={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,dimension:"height",getDimensionValue:function(A,M){var I=M["offset"+TM(A)],g=nM[A];return I+EM()(eM()(M,g[0]),10)+EM()(eM()(M,g[1]),10)}},aM=function(A){function M(){for(var M,I=arguments.length,g=new Array(I),T=0;T1)||(T=M,!1)})),T?new Error("(children) "+g+" - Duplicate children detected of bsRole: "+T+". Only one child each allowed with the following bsRoles: "+M.join(", ")):null}))}(KM)),disabled:e.a.bool,pullRight:e.a.bool,open:e.a.bool,defaultOpen:e.a.bool,onToggle:e.a.func,onSelect:e.a.func,role:e.a.string,rootCloseEvent:e.a.oneOf(["click","mousedown"]),onMouseEnter:e.a.func,onMouseLeave:e.a.func},XM={componentClass:FA},qM=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleClick=g.handleClick.bind(uA(uA(g))),g.handleKeyDown=g.handleKeyDown.bind(uA(uA(g))),g.handleClose=g.handleClose.bind(uA(uA(g))),g._focusInDropdown=!1,g.lastOpenEventType=null,g}t(M,A);var I=M.prototype;return I.componentDidMount=function(){this.focusNextOnOpen()},I.componentWillUpdate=function(A){!A.open&&this.props.open&&(this._focusInDropdown=lM()(bA.a.findDOMNode(this.menu),SM()(document)))},I.componentDidUpdate=function(A){var M=this.props.open,I=A.open;M&&!I&&this.focusNextOnOpen(),!M&&I&&this._focusInDropdown&&(this._focusInDropdown=!1,this.focus())},I.focus=function(){var A=bA.a.findDOMNode(this.toggle);A&&A.focus&&A.focus()},I.focusNextOnOpen=function(){var A=this.menu;A&&A.focusNext&&("keydown"!==this.lastOpenEventType&&"menuitem"!==this.props.role||A.focusNext())},I.handleClick=function(A){this.props.disabled||this.toggleOpen(A,{source:"click"})},I.handleClose=function(A,M){this.props.open&&this.toggleOpen(A,M)},I.handleKeyDown=function(A){if(!this.props.disabled)switch(A.keyCode){case mM.a.codes.down:this.props.open?this.menu.focusNext&&this.menu.focusNext():this.toggleOpen(A,{source:"keydown"}),A.preventDefault();break;case mM.a.codes.esc:case mM.a.codes.tab:this.handleClose(A,{source:"keydown"})}},I.toggleOpen=function(A,M){var I=!this.props.open;I&&(this.lastOpenEventType=M.source),this.props.onToggle&&this.props.onToggle(I,A,M)},I.renderMenu=function(A,M){var I=this,g=M.id,T=M.onSelect,N=M.rootCloseEvent,D=u(M,["id","onSelect","rootCloseEvent"]),C=function(A){I.menu=A};return"string"==typeof A.ref||(C=cA(A.ref,C)),Object(w.cloneElement)(A,j({},D,{ref:C,labelledBy:g,bsClass:G(D,"menu"),onClose:cA(A.props.onClose,this.handleClose),onSelect:cA(A.props.onSelect,T,(function(A,M){return I.handleClose(M,{source:"select"})})),rootCloseEvent:N}))},I.renderToggle=function(A,M){var I=this,g=function(A){I.toggle=A};return"string"==typeof A.ref||(g=cA(A.ref,g)),Object(w.cloneElement)(A,j({},M,{ref:g,bsClass:G(M,"toggle"),onClick:cA(A.props.onClick,this.handleClick),onKeyDown:cA(A.props.onKeyDown,this.handleKeyDown)}))},I.render=function(){var A,M=this,I=this.props,g=I.componentClass,T=I.id,N=I.dropup,D=I.disabled,C=I.pullRight,L=I.open,t=I.onSelect,w=I.role,O=I.bsClass,y=I.className,z=I.rootCloseEvent,c=I.children,e=u(I,["componentClass","id","dropup","disabled","pullRight","open","onSelect","role","bsClass","className","rootCloseEvent","children"]);delete e.onToggle;var Q=((A={})[O]=!0,A.open=L,A.disabled=D,A);return N&&(Q[O]=!1,Q.dropup=!0),i.a.createElement(g,j({},e,{className:E()(y,Q)}),K.map(c,(function(A){switch(A.props.bsRole){case PM:return M.renderToggle(A,{id:T,disabled:D,open:L,role:w,bsClass:O});case KM:return M.renderMenu(A,{id:T,open:L,pullRight:C,bsClass:O,onSelect:t,rootCloseEvent:z});default:return A}})))},M}(i.a.Component);qM.propTypes=VM,qM.defaultProps=XM,f("dropdown",qM);var _M=Y()(qM,{open:"onToggle"});_M.Toggle=vM,_M.Menu=RM;var $M=_M;function AI(A,M){var I=M.propTypes,g={},T={};return k()(A).forEach((function(A){var M=A[0],N=A[1];I[M]?g[M]=N:T[M]=N})),[g,T]}var MI=j({},$M.propTypes,{bsStyle:e.a.string,bsSize:e.a.string,title:e.a.node.isRequired,noCaret:e.a.bool,children:e.a.node}),II=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.bsSize,I=A.bsStyle,g=A.title,T=A.children,N=AI(u(A,["bsSize","bsStyle","title","children"]),$M.ControlledComponent),D=N[0],C=N[1];return i.a.createElement($M,j({},D,{bsSize:M,bsStyle:I}),i.a.createElement($M.Toggle,j({},C,{bsSize:M,bsStyle:I}),g),i.a.createElement($M.Menu,null,T))},M}(i.a.Component);II.propTypes=MI;var gI,TI=II,NI={in:e.a.bool,mountOnEnter:e.a.bool,unmountOnExit:e.a.bool,appear:e.a.bool,timeout:e.a.number,onEnter:e.a.func,onEntering:e.a.func,onEntered:e.a.func,onExit:e.a.func,onExiting:e.a.func,onExited:e.a.func},DI=((gI={})[QM.ENTERING]="in",gI[QM.ENTERED]="in",gI),jI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=A.children,g=u(A,["className","children"]);return i.a.createElement(YM.a,g,(function(A,g){return i.a.cloneElement(I,j({},g,{className:E()("fade",M,I.props.className,DI[A])}))}))},M}(i.a.Component);jI.propTypes=NI,jI.defaultProps={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1};var CI=jI,LI={horizontal:e.a.bool,inline:e.a.bool,componentClass:EA.a},tI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.horizontal,I=A.inline,g=A.componentClass,T=A.className,N=W(u(A,["horizontal","inline","componentClass","className"])),D=N[0],C=N[1],L=[];return M&&L.push(G(D,"horizontal")),I&&L.push(G(D,"inline")),i.a.createElement(g,j({},C,{className:E()(T,L)}))},M}(i.a.Component);tI.propTypes=LI,tI.defaultProps={horizontal:!1,inline:!1,componentClass:"form"};var wI=f("form",tI),iI={$bs_formGroup:e.a.object},OI=function(A){function M(){return A.apply(this,arguments)||this}t(M,A);var I=M.prototype;return I.getGlyph=function(A){switch(A){case"success":return"ok";case"warning":return"warning-sign";case"error":return"remove";default:return null}},I.renderDefaultFeedback=function(A,M,I,g){var T=this.getGlyph(A&&A.validationState);return T?i.a.createElement(XA,j({},g,{glyph:T,className:E()(M,I)})):null},I.render=function(){var A=this.props,M=A.className,I=A.children,g=W(u(A,["className","children"])),T=g[0],N=g[1],D=J(T);if(!I)return this.renderDefaultFeedback(this.context.$bs_formGroup,M,D,N);var C=i.a.Children.only(I);return i.a.cloneElement(C,j({},N,{className:E()(C.props.className,M,D)}))},M}(i.a.Component);OI.defaultProps={bsRole:"feedback"},OI.contextTypes=iI;var yI=f("form-control-feedback",OI),uI={componentClass:EA.a},zI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);zI.propTypes=uI,zI.defaultProps={componentClass:"p"};var EI=f("form-control-static",zI),cI={componentClass:EA.a,type:e.a.string,id:e.a.string,inputRef:e.a.func},eI={$bs_formGroup:e.a.object},QI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A,M=this.context.$bs_formGroup,I=M&&M.controlId,g=this.props,T=g.componentClass,N=g.type,D=g.id,C=void 0===D?I:D,L=g.inputRef,t=g.className,w=g.bsSize,O=W(u(g,["componentClass","type","id","inputRef","className","bsSize"])),y=O[0],z=O[1];("file"!==N&&(A=J(y)),w)&&(A[G({bsClass:"input"},r[w]||w)]=!0);return i.a.createElement(T,j({},z,{type:N,id:C,ref:L,className:E()(t,A)}))},M}(i.a.Component);QI.propTypes=cI,QI.defaultProps={componentClass:"input"},QI.contextTypes=eI,QI.Feedback=yI,QI.Static=EI;var YI=f("form-control",H([a,x],QI)),nI={controlId:e.a.string,validationState:e.a.oneOf(["success","warning","error",null])},kI={$bs_formGroup:e.a.object.isRequired},BI=function(A){function M(){return A.apply(this,arguments)||this}t(M,A);var I=M.prototype;return I.getChildContext=function(){var A=this.props;return{$bs_formGroup:{controlId:A.controlId,validationState:A.validationState}}},I.hasFeedback=function(A){var M=this;return K.some(A,(function(A){return"feedback"===A.props.bsRole||A.props.children&&M.hasFeedback(A.props.children)}))},I.render=function(){var A=this.props,M=A.validationState,I=A.className,g=A.children,T=Z(u(A,["validationState","className","children"]),["controlId"]),N=T[0],D=T[1],C=j({},J(N),{"has-feedback":this.hasFeedback(g)});return M&&(C["has-"+M]=!0),i.a.createElement("div",j({},D,{className:E()(I,C)}),g)},M}(i.a.Component);BI.propTypes=nI,BI.childContextTypes=kI;var oI=f("form-group",H([x,a],BI)),xI={fluid:e.a.bool,componentClass:EA.a},aI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.fluid,I=A.componentClass,g=A.className,T=W(u(A,["fluid","componentClass","className"])),N=T[0],D=T[1],C=G(N,M&&"fluid");return i.a.createElement(I,j({},D,{className:E()(g,C)}))},M}(i.a.Component);aI.propTypes=xI,aI.defaultProps={componentClass:"div",fluid:!1};var UI=f("container",aI),rI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=W(u(A,["className"])),g=I[0],T=I[1],N=J(g);return i.a.createElement("span",j({},T,{className:E()(M,N)}))},M}(i.a.Component),SI=f("help-block",rI),sI={responsive:e.a.bool,rounded:e.a.bool,circle:e.a.bool,thumbnail:e.a.bool},lI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A,M=this.props,I=M.responsive,g=M.rounded,T=M.circle,N=M.thumbnail,D=M.className,C=W(u(M,["responsive","rounded","circle","thumbnail","className"])),L=C[0],t=C[1],w=((A={})[G(L,"responsive")]=I,A[G(L,"rounded")]=g,A[G(L,"circle")]=T,A[G(L,"thumbnail")]=N,A);return i.a.createElement("img",j({},t,{className:E()(D,w)}))},M}(i.a.Component);lI.propTypes=sI,lI.defaultProps={responsive:!1,rounded:!1,circle:!1,thumbnail:!1};var hI=f("img",lI),mI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=W(u(A,["className"])),g=I[0],T=I[1],N=J(g);return i.a.createElement("span",j({},T,{className:E()(M,N)}))},M}(i.a.Component),FI=f("input-group-addon",mI),dI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=W(u(A,["className"])),g=I[0],T=I[1],N=J(g);return i.a.createElement("span",j({},T,{className:E()(M,N)}))},M}(i.a.Component),GI=f("input-group-btn",dI),fI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=W(u(A,["className"])),g=I[0],T=I[1],N=J(g);return i.a.createElement("span",j({},T,{className:E()(M,N)}))},M}(i.a.Component);fI.Addon=FI,fI.Button=GI;var pI=f("input-group",H([x,a],fI)),HI={componentClass:EA.a},JI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);JI.propTypes=HI,JI.defaultProps={componentClass:"div"};var bI=f("jumbotron",JI),RI=function(A){function M(){return A.apply(this,arguments)||this}t(M,A);var I=M.prototype;return I.hasContent=function(A){var M=!1;return i.a.Children.forEach(A,(function(A){M||(A||0===A)&&(M=!0)})),M},I.render=function(){var A=this.props,M=A.className,I=A.children,g=W(u(A,["className","children"])),T=g[0],N=g[1],D=j({},J(T),{hidden:!this.hasContent(I)});return i.a.createElement("span",j({},N,{className:E()(M,D)}),I)},M}(i.a.Component),WI=f("label",p(NA()(s).concat([l,h]),l,RI)),ZI={active:e.a.any,disabled:e.a.any,header:e.a.node,listItem:e.a.bool,onClick:e.a.func,href:e.a.string,type:e.a.string},vI=function(A){function M(){return A.apply(this,arguments)||this}t(M,A);var I=M.prototype;return I.renderHeader=function(A,M){return i.a.isValidElement(A)?Object(w.cloneElement)(A,{className:E()(A.props.className,M)}):i.a.createElement("h4",{className:M},A)},I.render=function(){var A,M=this.props,I=M.active,g=M.disabled,T=M.className,N=M.header,D=M.listItem,C=M.children,L=W(u(M,["active","disabled","className","header","listItem","children"])),t=L[0],w=L[1],O=j({},J(t),{active:I,disabled:g});return w.href?A="a":w.onClick?(A="button",w.type=w.type||"button"):A=D?"li":"span",w.className=E()(T,O),N?i.a.createElement(A,w,this.renderHeader(N,G(t,"heading")),i.a.createElement("p",{className:G(t,"text")},C)):i.a.createElement(A,w,C)},M}(i.a.Component);vI.propTypes=ZI,vI.defaultProps={listItem:!1};var PI=f("list-group-item",p(NA()(s),vI)),KI={componentClass:EA.a};var VI=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.children,I=A.componentClass,g=void 0===I?function(A){return A?K.some(A,(function(A){return A.type!==PI||A.props.href||A.props.onClick}))?"div":"ul":"div"}(M):I,T=A.className,N=W(u(A,["children","componentClass","className"])),D=N[0],C=N[1],L=J(D),t="ul"===g&&K.every(M,(function(A){return A.type===PI}));return i.a.createElement(g,j({},C,{className:E()(T,L)}),t?K.map(M,(function(A){return Object(w.cloneElement)(A,{listItem:!0})})):M)},M}(i.a.Component);VI.propTypes=KI;var XI=f("list-group",VI),qI={align:e.a.oneOf(["top","middle","bottom"]),componentClass:EA.a},_I=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.align,g=A.className,T=W(u(A,["componentClass","align","className"])),N=T[0],D=T[1],C=J(N);return I&&(C[G(ug.defaultProps,I)]=!0),i.a.createElement(M,j({},D,{className:E()(g,C)}))},M}(i.a.Component);_I.propTypes=qI,_I.defaultProps={componentClass:"div"};var $I=f("media-body",_I),Ag={componentClass:EA.a},Mg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);Mg.propTypes=Ag,Mg.defaultProps={componentClass:"h4"};var Ig=f("media-heading",Mg),gg={align:e.a.oneOf(["top","middle","bottom"])},Tg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.align,I=A.className,g=W(u(A,["align","className"])),T=g[0],N=g[1],D=J(T);return M&&(D[G(ug.defaultProps,M)]=!0),i.a.createElement("div",j({},N,{className:E()(I,D)}))},M}(i.a.Component);Tg.propTypes=gg;var Ng=f("media-left",Tg),Dg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=W(u(A,["className"])),g=I[0],T=I[1],N=J(g);return i.a.createElement("ul",j({},T,{className:E()(M,N)}))},M}(i.a.Component),jg=f("media-list",Dg),Cg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=W(u(A,["className"])),g=I[0],T=I[1],N=J(g);return i.a.createElement("li",j({},T,{className:E()(M,N)}))},M}(i.a.Component),Lg=f("media",Cg),tg={align:e.a.oneOf(["top","middle","bottom"])},wg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.align,I=A.className,g=W(u(A,["align","className"])),T=g[0],N=g[1],D=J(T);return M&&(D[G(ug.defaultProps,M)]=!0),i.a.createElement("div",j({},N,{className:E()(I,D)}))},M}(i.a.Component);wg.propTypes=tg;var ig=f("media-right",wg),Og={componentClass:EA.a},yg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);yg.propTypes=Og,yg.defaultProps={componentClass:"div"},yg.Heading=Ig,yg.Body=$I,yg.Left=Ng,yg.Right=ig,yg.List=jg,yg.ListItem=Lg;var ug=f("media",yg),zg={active:e.a.bool,disabled:e.a.bool,divider:lA()(e.a.bool,(function(A){var M=A.divider,I=A.children;return M&&I?new Error("Children will not be rendered for dividers"):null})),eventKey:e.a.any,header:e.a.bool,href:e.a.string,onClick:e.a.func,onSelect:e.a.func},Eg=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleClick=g.handleClick.bind(uA(uA(g))),g}t(M,A);var I=M.prototype;return I.handleClick=function(A){var M=this.props,I=M.href,g=M.disabled,T=M.onSelect,N=M.eventKey;I&&!g||A.preventDefault(),g||T&&T(N,A)},I.render=function(){var A=this.props,M=A.active,I=A.disabled,g=A.divider,T=A.header,N=A.onClick,D=A.className,C=A.style,L=Z(u(A,["active","disabled","divider","header","onClick","className","style"]),["eventKey","onSelect"]),t=L[0],w=L[1];return g?(w.children=void 0,i.a.createElement("li",j({},w,{role:"separator",className:E()(D,"divider"),style:C}))):T?i.a.createElement("li",j({},w,{role:"heading",className:E()(D,G(t,"header")),style:C})):i.a.createElement("li",{role:"presentation",className:E()(D,{active:M,disabled:I}),style:C},i.a.createElement(nA,j({},w,{role:"menuitem",tabIndex:"-1",onClick:cA(N,this.handleClick)})))},M}(i.a.Component);Eg.propTypes=zg,Eg.defaultProps={divider:!1,disabled:!1,header:!1};var cg=f("dropdown",Eg),eg=I(222),Qg=I.n(eg),Yg=I(90),ng=I.n(Yg),kg=I(64),Bg=I.n(kg),og=I(154),xg=I.n(og),ag=I(106),Ug=I.n(ag),rg=I(217),Sg=I.n(rg),sg={componentClass:EA.a},lg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);lg.propTypes=sg,lg.defaultProps={componentClass:"div"};var hg=f("modal-body",lg),mg={dialogClassName:e.a.string},Fg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A,M=this.props,I=M.dialogClassName,g=M.className,T=M.style,N=M.children,D=W(u(M,["dialogClassName","className","style","children"])),C=D[0],L=D[1],t=G(C),w=j({display:"block"},T),O=j({},J(C),((A={})[t]=!1,A[G(C,"dialog")]=!0,A));return i.a.createElement("div",j({},L,{tabIndex:"-1",role:"dialog",style:w,className:E()(g,t)}),i.a.createElement("div",{className:E()(I,O)},i.a.createElement("div",{className:G(C,"content"),role:"document"},N)))},M}(i.a.Component);Fg.propTypes=mg;var dg=f("modal",H([x,a],Fg)),Gg={componentClass:EA.a},fg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);fg.propTypes=Gg,fg.defaultProps={componentClass:"div"};var pg=f("modal-footer",fg),Hg={closeLabel:e.a.string,closeButton:e.a.bool,onHide:e.a.func},Jg={$bs_modal:e.a.shape({onHide:e.a.func})},bg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.closeLabel,I=A.closeButton,g=A.onHide,T=A.className,N=A.children,D=u(A,["closeLabel","closeButton","onHide","className","children"]),C=this.context.$bs_modal,L=W(D),t=L[0],w=L[1],O=J(t);return i.a.createElement("div",j({},w,{className:E()(T,O)}),I&&i.a.createElement(CA,{label:M,onClick:cA(C&&C.onHide,g)}),N)},M}(i.a.Component);bg.propTypes=Hg,bg.defaultProps={closeLabel:"Close",closeButton:!1},bg.contextTypes=Jg;var Rg=f("modal-header",bg),Wg={componentClass:EA.a},Zg=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.componentClass,I=A.className,g=W(u(A,["componentClass","className"])),T=g[0],N=g[1],D=J(T);return i.a.createElement(M,j({},N,{className:E()(I,D)}))},M}(i.a.Component);Zg.propTypes=Wg,Zg.defaultProps={componentClass:"h4"};var vg=f("modal-title",Zg),Pg=j({},Ug.a.propTypes,dg.propTypes,{backdrop:e.a.oneOf(["static",!0,!1]),backdropClassName:e.a.string,keyboard:e.a.bool,animation:e.a.bool,dialogComponentClass:EA.a,autoFocus:e.a.bool,enforceFocus:e.a.bool,restoreFocus:e.a.bool,show:e.a.bool,onHide:e.a.func,onEnter:e.a.func,onEntering:e.a.func,onEntered:e.a.func,onExit:e.a.func,onExiting:e.a.func,onExited:e.a.func,container:Ug.a.propTypes.container}),Kg=j({},Ug.a.defaultProps,{animation:!0,dialogComponentClass:dg}),Vg={$bs_modal:e.a.shape({onHide:e.a.func})};function Xg(A){return i.a.createElement(CI,j({},A,{timeout:_g.TRANSITION_DURATION}))}function qg(A){return i.a.createElement(CI,j({},A,{timeout:_g.BACKDROP_TRANSITION_DURATION}))}var _g=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleEntering=g.handleEntering.bind(uA(uA(g))),g.handleExited=g.handleExited.bind(uA(uA(g))),g.handleWindowResize=g.handleWindowResize.bind(uA(uA(g))),g.handleDialogClick=g.handleDialogClick.bind(uA(uA(g))),g.setModalRef=g.setModalRef.bind(uA(uA(g))),g.state={style:{}},g}t(M,A);var I=M.prototype;return I.getChildContext=function(){return{$bs_modal:{onHide:this.props.onHide}}},I.componentWillUnmount=function(){this.handleExited()},I.setModalRef=function(A){this._modal=A},I.handleDialogClick=function(A){A.target===A.currentTarget&&this.props.onHide()},I.handleEntering=function(){Qg.a.on(window,"resize",this.handleWindowResize),this.updateStyle()},I.handleExited=function(){Qg.a.off(window,"resize",this.handleWindowResize)},I.handleWindowResize=function(){this.updateStyle()},I.updateStyle=function(){if(Bg.a){var A=this._modal.getDialogElement(),M=A.scrollHeight,I=ng()(A),g=Sg()(bA.a.findDOMNode(this.props.container||I.body)),T=M>I.documentElement.clientHeight;this.setState({style:{paddingRight:g&&!T?xg()():void 0,paddingLeft:!g&&T?xg()():void 0}})}},I.render=function(){var A=this.props,M=A.backdrop,I=A.backdropClassName,g=A.animation,T=A.show,N=A.dialogComponentClass,D=A.className,C=A.style,L=A.children,t=A.onEntering,w=A.onExited,O=u(A,["backdrop","backdropClassName","animation","show","dialogComponentClass","className","style","children","onEntering","onExited"]),y=AI(O,Ug.a),z=y[0],c=y[1],e=T&&!g&&"in";return i.a.createElement(Ug.a,j({},z,{ref:this.setModalRef,show:T,containerClassName:G(O,"open"),transition:g?Xg:void 0,backdrop:M,backdropTransition:g?qg:void 0,backdropClassName:E()(G(O,"backdrop"),I,e),onEntering:cA(t,this.handleEntering),onExited:cA(w,this.handleExited)}),i.a.createElement(N,j({},c,{style:j({},this.state.style,C),className:E()(D,e),onClick:!0===M?this.handleDialogClick:null}),L))},M}(i.a.Component);_g.propTypes=Pg,_g.defaultProps=Kg,_g.childContextTypes=Vg,_g.Body=hg,_g.Header=Rg,_g.Title=vg,_g.Footer=pg,_g.Dialog=dg,_g.TRANSITION_DURATION=300,_g.BACKDROP_TRANSITION_DURATION=150;var $g=f("modal",H([x,a],_g)),AT={activeKey:e.a.any,activeHref:e.a.string,stacked:e.a.bool,justified:lA()(e.a.bool,(function(A){var M=A.justified,I=A.navbar;return M&&I?Error("justified navbar `Nav`s are not supported"):null})),onSelect:e.a.func,role:e.a.string,navbar:e.a.bool,pullRight:e.a.bool,pullLeft:e.a.bool},MT={$bs_navbar:e.a.shape({bsClass:e.a.string,onSelect:e.a.func}),$bs_tabContainer:e.a.shape({activeKey:e.a.any,onSelect:e.a.func.isRequired,getTabId:e.a.func.isRequired,getPaneId:e.a.func.isRequired})},IT=function(A){function M(){return A.apply(this,arguments)||this}t(M,A);var I=M.prototype;return I.componentDidUpdate=function(){var A=this;if(this._needsRefocus){this._needsRefocus=!1;var M=this.props.children,I=this.getActiveProps(),g=I.activeKey,T=I.activeHref,N=K.find(M,(function(M){return A.isActive(M,g,T)})),D=K.toArray(M).indexOf(N),j=bA.a.findDOMNode(this).children,C=j&&j[D];C&&C.firstChild&&C.firstChild.focus()}},I.getActiveProps=function(){var A=this.context.$bs_tabContainer;return A||this.props},I.getNextActiveChild=function(A){var M=this,I=this.props.children,g=I.filter((function(A){return null!=A.props.eventKey&&!A.props.disabled})),T=this.getActiveProps(),N=T.activeKey,D=T.activeHref,j=K.find(I,(function(A){return M.isActive(A,N,D)})),C=g.indexOf(j);if(-1===C)return g[0];var L=C+A,t=g.length;return L>=t?L=0:L<0&&(L=t-1),g[L]},I.getTabProps=function(A,M,I,g,T){var N=this;if(!M&&"tablist"!==I)return null;var D=A.props,j=D.id,C=D["aria-controls"],L=D.eventKey,t=D.role,w=D.onKeyDown,i=D.tabIndex;return M&&(j=M.getTabId(L),C=M.getPaneId(L)),"tablist"===I&&(t=t||"tab",w=cA((function(A){return N.handleTabKeyDown(T,A)}),w),i=g?i:-1),{id:j,role:t,onKeyDown:w,"aria-controls":C,tabIndex:i}},I.handleTabKeyDown=function(A,M){var I;switch(M.keyCode){case mM.a.codes.left:case mM.a.codes.up:I=this.getNextActiveChild(-1);break;case mM.a.codes.right:case mM.a.codes.down:I=this.getNextActiveChild(1);break;default:return}M.preventDefault(),A&&I&&null!=I.props.eventKey&&A(I.props.eventKey),this._needsRefocus=!0},I.isActive=function(A,M,I){var g=A.props;return!!(g.active||null!=M&&g.eventKey===M||I&&g.href===I)||g.active},I.render=function(){var A,M=this,I=this.props,g=I.stacked,T=I.justified,N=I.onSelect,D=I.role,C=I.navbar,L=I.pullRight,t=I.pullLeft,O=I.className,y=I.children,z=u(I,["stacked","justified","onSelect","role","navbar","pullRight","pullLeft","className","children"]),c=this.context.$bs_tabContainer,e=D||(c?"tablist":null),Q=this.getActiveProps(),Y=Q.activeKey,n=Q.activeHref;delete z.activeKey,delete z.activeHref;var k,B,o=W(z),x=o[0],a=o[1],U=j({},J(x),((A={})[G(x,"stacked")]=g,A[G(x,"justified")]=T,A)),r=null!=C?C:this.context.$bs_navbar;if(r){var S=this.context.$bs_navbar||{bsClass:"navbar"};U[G(S,"nav")]=!0,B=G(S,"right"),k=G(S,"left")}else B="pull-right",k="pull-left";return U[B]=L,U[k]=t,i.a.createElement("ul",j({},a,{role:e,className:E()(O,U)}),K.map(y,(function(A){var I=M.isActive(A,Y,n),g=cA(A.props.onSelect,N,r&&r.onSelect,c&&c.onSelect);return Object(w.cloneElement)(A,j({},M.getTabProps(A,c,e,I,g),{active:I,activeKey:Y,activeHref:n,onSelect:g}))})))},M}(i.a.Component);IT.propTypes=AT,IT.defaultProps={justified:!1,pullRight:!1,pullLeft:!1,stacked:!1},IT.contextTypes=MT;var gT=f("nav",p(["tabs","pills"],IT)),TT={$bs_navbar:e.a.shape({bsClass:e.a.string})},NT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=A.children,g=u(A,["className","children"]),T=G(this.context.$bs_navbar||{bsClass:"navbar"},"brand");return i.a.isValidElement(I)?i.a.cloneElement(I,{className:E()(I.props.className,M,T)}):i.a.createElement("span",j({},g,{className:E()(M,T)}),I)},M}(i.a.Component);NT.contextTypes=TT;var DT=NT,jT={$bs_navbar:e.a.shape({bsClass:e.a.string,expanded:e.a.bool})},CT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.children,I=u(A,["children"]),g=this.context.$bs_navbar||{bsClass:"navbar"},T=G(g,"collapse");return i.a.createElement(UM,j({in:g.expanded},I),i.a.createElement("div",{className:T},M))},M}(i.a.Component);CT.contextTypes=jT;var LT=CT,tT={$bs_navbar:e.a.shape({bsClass:e.a.string})},wT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=u(A,["className"]),g=G(this.context.$bs_navbar||{bsClass:"navbar"},"header");return i.a.createElement("div",j({},I,{className:E()(M,g)}))},M}(i.a.Component);wT.contextTypes=tT;var iT=wT,OT={onClick:e.a.func,children:e.a.node},yT={$bs_navbar:e.a.shape({bsClass:e.a.string,expanded:e.a.bool,onToggle:e.a.func.isRequired})},uT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.onClick,I=A.className,g=A.children,T=u(A,["onClick","className","children"]),N=this.context.$bs_navbar||{bsClass:"navbar"},D=j({type:"button"},T,{onClick:cA(M,N.onToggle),className:E()(I,G(N,"toggle"),!N.expanded&&"collapsed")});return g?i.a.createElement("button",D,g):i.a.createElement("button",D,i.a.createElement("span",{className:"sr-only"},"Toggle navigation"),i.a.createElement("span",{className:"icon-bar"}),i.a.createElement("span",{className:"icon-bar"}),i.a.createElement("span",{className:"icon-bar"}))},M}(i.a.Component);uT.propTypes=OT,uT.contextTypes=yT;var zT=uT,ET={fixedTop:e.a.bool,fixedBottom:e.a.bool,staticTop:e.a.bool,inverse:e.a.bool,fluid:e.a.bool,componentClass:EA.a,onToggle:e.a.func,onSelect:e.a.func,collapseOnSelect:e.a.bool,expanded:e.a.bool,role:e.a.string},cT={$bs_navbar:e.a.shape({bsClass:e.a.string,expanded:e.a.bool,onToggle:e.a.func.isRequired,onSelect:e.a.func})},eT=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleToggle=g.handleToggle.bind(uA(uA(g))),g.handleCollapse=g.handleCollapse.bind(uA(uA(g))),g}t(M,A);var I=M.prototype;return I.getChildContext=function(){var A=this.props,M=A.bsClass,I=A.expanded,g=A.onSelect,T=A.collapseOnSelect;return{$bs_navbar:{bsClass:M,expanded:I,onToggle:this.handleToggle,onSelect:cA(g,T?this.handleCollapse:null)}}},I.handleCollapse=function(){var A=this.props,M=A.onToggle;A.expanded&&M(!1)},I.handleToggle=function(){var A=this.props;(0,A.onToggle)(!A.expanded)},I.render=function(){var A,M=this.props,I=M.componentClass,g=M.fixedTop,T=M.fixedBottom,N=M.staticTop,D=M.inverse,C=M.fluid,L=M.className,t=M.children,w=Z(u(M,["componentClass","fixedTop","fixedBottom","staticTop","inverse","fluid","className","children"]),["expanded","onToggle","onSelect","collapseOnSelect"]),O=w[0],y=w[1];void 0===y.role&&"nav"!==I&&(y.role="navigation"),D&&(O.bsStyle=F);var z=j({},J(O),((A={})[G(O,"fixed-top")]=g,A[G(O,"fixed-bottom")]=T,A[G(O,"static-top")]=N,A));return i.a.createElement(I,j({},y,{className:E()(L,z)}),i.a.createElement(UI,{fluid:C},t))},M}(i.a.Component);eT.propTypes=ET,eT.defaultProps={componentClass:"nav",fixedTop:!1,fixedBottom:!1,staticTop:!1,inverse:!1,fluid:!1,collapseOnSelect:!1},eT.childContextTypes=cT,f("navbar",eT);var QT=Y()(eT,{expanded:"onToggle"});function YT(A,M,I){var g=function(A,I){var g=A.componentClass,T=A.className,N=A.pullRight,D=A.pullLeft,C=u(A,["componentClass","className","pullRight","pullLeft"]),L=I.$bs_navbar,t=void 0===L?{bsClass:"navbar"}:L;return i.a.createElement(g,j({},C,{className:E()(T,G(t,M),N&&G(t,"right"),D&&G(t,"left"))}))};return g.displayName=I,g.propTypes={componentClass:EA.a,pullRight:e.a.bool,pullLeft:e.a.bool},g.defaultProps={componentClass:A,pullRight:!1,pullLeft:!1},g.contextTypes={$bs_navbar:e.a.shape({bsClass:e.a.string})},g}QT.Brand=DT,QT.Header=iT,QT.Toggle=zT,QT.Collapse=LT,QT.Form=YT("div","form","NavbarForm"),QT.Text=YT("p","text","NavbarText"),QT.Link=YT("a","link","NavbarLink");var nT=p([l,F],l,QT),kT=j({},$M.propTypes,{title:e.a.node.isRequired,noCaret:e.a.bool,active:e.a.bool,activeKey:e.a.any,activeHref:e.a.string,children:e.a.node}),BT=function(A){function M(){return A.apply(this,arguments)||this}t(M,A);var I=M.prototype;return I.isActive=function(A,M,I){var g=this,T=A.props;return!!(T.active||null!=M&&T.eventKey===M||I&&T.href===I)||(!!K.some(T.children,(function(A){return g.isActive(A,M,I)}))||T.active)},I.render=function(){var A=this,M=this.props,I=M.title,g=M.activeKey,T=M.activeHref,N=M.className,D=M.style,C=M.children,L=u(M,["title","activeKey","activeHref","className","style","children"]),t=this.isActive(this,g,T);delete L.active,delete L.eventKey;var w=AI(L,$M.ControlledComponent),O=w[0],y=w[1];return i.a.createElement($M,j({},O,{componentClass:"li",className:E()(N,{active:t}),style:D}),i.a.createElement($M.Toggle,j({},y,{useAnchor:!0}),I),i.a.createElement($M.Menu,null,K.map(C,(function(M){return i.a.cloneElement(M,{active:A.isActive(M,g,T)})}))))},M}(i.a.Component);BT.propTypes=kT;var oT=BT,xT={active:e.a.bool,disabled:e.a.bool,role:e.a.string,href:e.a.string,onClick:e.a.func,onSelect:e.a.func,eventKey:e.a.any},aT=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleClick=g.handleClick.bind(uA(uA(g))),g}t(M,A);var I=M.prototype;return I.handleClick=function(A){this.props.disabled?A.preventDefault():this.props.onSelect&&this.props.onSelect(this.props.eventKey,A)},I.render=function(){var A=this.props,M=A.active,I=A.disabled,g=A.onClick,T=A.className,N=A.style,D=u(A,["active","disabled","onClick","className","style"]);return delete D.onSelect,delete D.eventKey,delete D.activeKey,delete D.activeHref,D.role?"tab"===D.role&&(D["aria-selected"]=M):"#"===D.href&&(D.role="button"),i.a.createElement("li",{role:"presentation",className:E()(T,{active:M,disabled:I}),style:N},i.a.createElement(nA,j({},D,{disabled:I,onClick:cA(g,this.handleClick)})))},M}(i.a.Component);aT.propTypes=xT,aT.defaultProps={active:!1,disabled:!1};var UT=aT,rT=I(223),ST=I.n(rT),sT=j({},ST.a.propTypes,{show:e.a.bool,rootClose:e.a.bool,onHide:e.a.func,animation:e.a.oneOfType([e.a.bool,EA.a]),onEnter:e.a.func,onEntering:e.a.func,onEntered:e.a.func,onExit:e.a.func,onExiting:e.a.func,onExited:e.a.func,placement:e.a.oneOf(["top","right","bottom","left"])}),lT={animation:CI,rootClose:!1,show:!1,placement:"right"},hT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A,M=this.props,I=M.animation,g=M.children,T=u(M,["animation","children"]),N=!0===I?CI:I||null;return A=N?g:Object(w.cloneElement)(g,{className:E()(g.props.className,"in")}),i.a.createElement(ST.a,j({},T,{transition:N}),A)},M}(i.a.Component);hT.propTypes=sT,hT.defaultProps=lT;var mT=hT,FT=I(307),dT=I.n(FT);function GT(A,M){return dT()(M)?M.indexOf(A)>=0:A===M}var fT=e.a.oneOf(["click","hover","focus"]),pT=j({},mT.propTypes,{trigger:e.a.oneOfType([fT,e.a.arrayOf(fT)]),delay:e.a.number,delayShow:e.a.number,delayHide:e.a.number,defaultOverlayShown:e.a.bool,overlay:e.a.node.isRequired,onBlur:e.a.func,onClick:e.a.func,onFocus:e.a.func,onMouseOut:e.a.func,onMouseOver:e.a.func,target:e.a.oneOf([null]),onHide:e.a.oneOf([null]),show:e.a.oneOf([null])}),HT=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleToggle=g.handleToggle.bind(uA(uA(g))),g.handleDelayedShow=g.handleDelayedShow.bind(uA(uA(g))),g.handleDelayedHide=g.handleDelayedHide.bind(uA(uA(g))),g.handleHide=g.handleHide.bind(uA(uA(g))),g.handleMouseOver=function(A){return g.handleMouseOverOut(g.handleDelayedShow,A,"fromElement")},g.handleMouseOut=function(A){return g.handleMouseOverOut(g.handleDelayedHide,A,"toElement")},g._mountNode=null,g.state={show:M.defaultOverlayShown},g}t(M,A);var I=M.prototype;return I.componentDidMount=function(){this._mountNode=document.createElement("div"),this.renderOverlay()},I.componentDidUpdate=function(){this.renderOverlay()},I.componentWillUnmount=function(){bA.a.unmountComponentAtNode(this._mountNode),this._mountNode=null,clearTimeout(this._hoverShowDelay),clearTimeout(this._hoverHideDelay)},I.handleDelayedHide=function(){var A=this;if(null!=this._hoverShowDelay)return clearTimeout(this._hoverShowDelay),void(this._hoverShowDelay=null);if(this.state.show&&null==this._hoverHideDelay){var M=null!=this.props.delayHide?this.props.delayHide:this.props.delay;M?this._hoverHideDelay=setTimeout((function(){A._hoverHideDelay=null,A.hide()}),M):this.hide()}},I.handleDelayedShow=function(){var A=this;if(null!=this._hoverHideDelay)return clearTimeout(this._hoverHideDelay),void(this._hoverHideDelay=null);if(!this.state.show&&null==this._hoverShowDelay){var M=null!=this.props.delayShow?this.props.delayShow:this.props.delay;M?this._hoverShowDelay=setTimeout((function(){A._hoverShowDelay=null,A.show()}),M):this.show()}},I.handleHide=function(){this.hide()},I.handleMouseOverOut=function(A,M,I){var g=M.currentTarget,T=M.relatedTarget||M.nativeEvent[I];T&&T===g||lM()(g,T)||A(M)},I.handleToggle=function(){this.state.show?this.hide():this.show()},I.hide=function(){this.setState({show:!1})},I.makeOverlay=function(A,M){return i.a.createElement(mT,j({},M,{show:this.state.show,onHide:this.handleHide,target:this}),A)},I.show=function(){this.setState({show:!0})},I.renderOverlay=function(){bA.a.unstable_renderSubtreeIntoContainer(this,this._overlay,this._mountNode)},I.render=function(){var A=this.props,M=A.trigger,I=A.overlay,g=A.children,T=A.onBlur,N=A.onClick,D=A.onFocus,j=A.onMouseOut,C=A.onMouseOver,L=u(A,["trigger","overlay","children","onBlur","onClick","onFocus","onMouseOut","onMouseOver"]);delete L.delay,delete L.delayShow,delete L.delayHide,delete L.defaultOverlayShown;var t=i.a.Children.only(g),O=t.props,y={};return this.state.show&&(y["aria-describedby"]=I.props.id),y.onClick=cA(O.onClick,N),GT("click",M)&&(y.onClick=cA(y.onClick,this.handleToggle)),GT("hover",M)&&(y.onMouseOver=cA(O.onMouseOver,C,this.handleMouseOver),y.onMouseOut=cA(O.onMouseOut,j,this.handleMouseOut)),GT("focus",M)&&(y.onFocus=cA(O.onFocus,D,this.handleDelayedShow),y.onBlur=cA(O.onBlur,T,this.handleDelayedHide)),this._overlay=this.makeOverlay(I,L),Object(w.cloneElement)(t,y)},M}(i.a.Component);HT.propTypes=pT,HT.defaultProps={defaultOverlayShown:!1,trigger:["hover","focus"]};var JT=HT,bT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=A.children,g=W(u(A,["className","children"])),T=g[0],N=g[1],D=J(T);return i.a.createElement("div",j({},N,{className:E()(M,D)}),i.a.createElement("h1",null,I))},M}(i.a.Component),RT=f("page-header",bT),WT={disabled:e.a.bool,previous:e.a.bool,next:e.a.bool,onClick:e.a.func,onSelect:e.a.func,eventKey:e.a.any},ZT=function(A){function M(M,I){var g;return(g=A.call(this,M,I)||this).handleSelect=g.handleSelect.bind(uA(uA(g))),g}t(M,A);var I=M.prototype;return I.handleSelect=function(A){var M=this.props,I=M.disabled,g=M.onSelect,T=M.eventKey;I?A.preventDefault():g&&g(T,A)},I.render=function(){var A=this.props,M=A.disabled,I=A.previous,g=A.next,T=A.onClick,N=A.className,D=A.style,C=u(A,["disabled","previous","next","onClick","className","style"]);return delete C.onSelect,delete C.eventKey,i.a.createElement("li",{className:E()(N,{disabled:M,previous:I,next:g}),style:D},i.a.createElement(nA,j({},C,{disabled:M,onClick:cA(T,this.handleSelect)})))},M}(i.a.Component);ZT.propTypes=WT,ZT.defaultProps={disabled:!1,previous:!1,next:!1};var vT=ZT,PT={};function KT(A,M,I){var g;"object"==typeof A?g=A.message:(g=A+" is deprecated. Use "+M+" instead.",I&&(g+="\nYou can read more about it at "+I)),PT[g]||(PT[g]=!0)}KT.wrapper=function(A){for(var M=arguments.length,I=new Array(M>1?M-1:0),g=1;g`","``"),XT={onSelect:e.a.func},qT=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.onSelect,I=A.className,g=A.children,T=W(u(A,["onSelect","className","children"])),N=T[0],D=T[1],C=J(N);return i.a.createElement("ul",j({},D,{className:E()(I,C)}),K.map(g,(function(A){return Object(w.cloneElement)(A,{onSelect:cA(A.props.onSelect,M)})})))},M}(i.a.Component);qT.propTypes=XT,qT.Item=vT;var _T=f("pager",qT),$T={eventKey:e.a.any,className:e.a.string,onSelect:e.a.func,disabled:e.a.bool,active:e.a.bool,activeLabel:e.a.string.isRequired};function AN(A){var M=A.active,I=A.disabled,g=A.className,T=A.style,N=A.activeLabel,D=A.children,C=u(A,["active","disabled","className","style","activeLabel","children"]),L=M||I?"span":nA;return i.a.createElement("li",{style:T,className:E()(g,{active:M,disabled:I})},i.a.createElement(L,j({disabled:I},C),D,M&&i.a.createElement("span",{className:"sr-only"},N)))}function MN(A,M,I){var g,T;return void 0===I&&(I=A),T=g=function(A){function g(){return A.apply(this,arguments)||this}return t(g,A),g.prototype.render=function(){var A=this.props,g=A.disabled,T=A.children,N=A.className,D=u(A,["disabled","children","className"]),C=g?"span":nA;return i.a.createElement("li",j({"aria-label":I,className:E()(N,{disabled:g})},D),i.a.createElement(C,null,T||M))},g}(i.a.Component),g.displayName=A,g.propTypes={disabled:e.a.bool},T}AN.propTypes=$T,AN.defaultProps={active:!1,disabled:!1,activeLabel:"(current)"};var IN=MN("First","«"),gN=MN("Prev","‹"),TN=MN("Ellipsis","…","More"),NN=MN("Next","›"),DN=MN("Last","»"),jN=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.className,I=A.children,g=W(u(A,["className","children"])),T=g[0],N=g[1],D=J(T);return i.a.createElement("ul",j({},N,{className:E()(M,D)}),I)},M}(i.a.Component);f("pagination",jN),jN.First=IN,jN.Prev=gN,jN.Ellipsis=TN,jN.Item=AN,jN.Next=NN,jN.Last=DN;var CN=jN,LN={onEnter:e.a.func,onEntering:e.a.func,onEntered:e.a.func,onExit:e.a.func,onExiting:e.a.func,onExited:e.a.func},tN={$bs_panel:e.a.shape({headingId:e.a.string,bodyId:e.a.string,bsClass:e.a.string,expanded:e.a.bool})},wN=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props.children,M=this.context.$bs_panel||{},I=M.headingId,g=M.bodyId,T=M.bsClass,N=M.expanded,D=W(this.props),C=D[0],L=D[1];return C.bsClass=T||C.bsClass,I&&g&&(L.id=g,L.role=L.role||"tabpanel",L["aria-labelledby"]=I),i.a.createElement(UM,j({in:N},L),i.a.createElement("div",{className:G(C,"collapse")},A))},M}(i.a.Component);wN.propTypes=LN,wN.contextTypes=tN;var iN=f("panel",wN),ON={collapsible:e.a.bool.isRequired},yN={$bs_panel:e.a.shape({bsClass:e.a.string})},uN=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.children,I=A.className,g=A.collapsible,T=(this.context.$bs_panel||{}).bsClass,N=Z(this.props,["collapsible"]),D=N[0],C=N[1];D.bsClass=T||D.bsClass;var L=i.a.createElement("div",j({},C,{className:E()(I,G(D,"body"))}),M);return g&&(L=i.a.createElement(iN,null,L)),L},M}(i.a.Component);uN.propTypes=ON,uN.defaultProps={collapsible:!1},uN.contextTypes=yN;var zN=f("panel",uN),EN=I(105),cN=I.n(EN),eN={componentClass:cN.a},QN={$bs_panel:e.a.shape({headingId:e.a.string,bsClass:e.a.string})},YN=function(A){function M(){return A.apply(this,arguments)||this}return t(M,A),M.prototype.render=function(){var A=this.props,M=A.children,I=A.className,g=A.componentClass,T=u(A,["children","className","componentClass"]),N=this.context.$bs_panel||{},D=N.headingId,C=N.bsClass,L=W(T),t=L[0],w=L[1];return t.bsClass=C||t.bsClass,D&&(w.role=w.role||"tab",w.id=D),i.a.createElement(g,j({},w,{className:E()(I,G(t,"heading"))}),M)},M}(i.a.Component);YN.propTypes=eN,YN.defaultProps={componentClass:"div"},YN.contextTypes=QN;var nN=f("panel",YN),kN={onClick:e.a.func,componentClass:cN.a},BN={componentClass:nA},oN={$bs_panel:e.a.shape({bodyId:e.a.string,onToggle:e.a.func,expanded:e.a.bool})},xN=function(A){function M(){for(var M,I=arguments.length,g=new Array(I),T=0;T1?I-1:0),T=1;T=0||(T[I]=A[I]);return T}I.d(M,"a",(function(){return g}))},function(A,M){var I={}.hasOwnProperty;A.exports=function(A,M){return I.call(A,M)}},function(A,M,I){var g=I(108),T=I(54);A.exports=function(A){return g(T(A))}},function(A,M,I){var g=I(109),T=I(77),N=I(38),D=I(53),j=I(37),C=I(224),L=Object.getOwnPropertyDescriptor;M.f=I(14)?L:function(A,M){if(A=N(A),M=D(M,!0),C)try{return L(A,M)}catch(A){}if(j(A,M))return T(!g.f.call(A,M),A[M])}},function(A,M,I){var g=I(37),T=I(18),N=I(157)("IE_PROTO"),D=Object.prototype;A.exports=Object.getPrototypeOf||function(A){return A=T(A),g(A,N)?A[N]:"function"==typeof A.constructor&&A instanceof A.constructor?A.constructor.prototype:A instanceof Object?D:null}},function(A,M,I){A.exports=I(557)()},function(A,M){var I=A.exports={version:"2.6.11"};"number"==typeof __e&&(__e=I)},function(A,M,I){var g=I(22);A.exports=function(A,M,I){if(g(A),void 0===M)return A;switch(I){case 1:return function(I){return A.call(M,I)};case 2:return function(I,g){return A.call(M,I,g)};case 3:return function(I,g,T){return A.call(M,I,g,T)}}return function(){return A.apply(M,arguments)}}},function(A,M){var I={}.toString;A.exports=function(A){return I.call(A).slice(8,-1)}},function(A,M){var I=Math.ceil,g=Math.floor;A.exports=function(A){return isNaN(A=+A)?0:(A>0?g:I)(A)}},function(A,M,I){"use strict";var g=I(8);A.exports=function(A,M){return!!A&&g((function(){M?A.call(null,(function(){}),1):A.call(null)}))}},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0});var g=M.SET="alert/SET",T=M.CLEAR="alert/CLEAR",N=M.alertId=0;M.set=function(A){var I=(M.alertId=N+=1,N-1);return function(M,N){("danger"!==A.type||A.autoClear)&&setTimeout((function(){M({type:T,alert:{id:I}})}),5e3),M({type:g,alert:Object.assign({},A,{id:I})})}},M.clear=function(){return{type:T}}},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.hideBucketPolicy=M.showBucketPolicy=M.setPolicies=M.fetchPolicies=M.hideMakeBucketModal=M.showMakeBucketModal=M.removeBucket=M.addBucket=M.deleteBucket=M.makeBucket=M.setCurrentBucket=M.selectBucket=M.setFilter=M.setList=M.fetchBuckets=M.SET_POLICIES=M.SHOW_BUCKET_POLICY=M.SHOW_MAKE_BUCKET_MODAL=M.SET_CURRENT_BUCKET=M.SET_FILTER=M.REMOVE=M.ADD=M.SET_LIST=void 0;var g=L(I(23)),T=L(I(112)),N=C(I(47)),D=C(I(33)),j=I(98);function C(A){if(A&&A.__esModule)return A;var M={};if(null!=A)for(var I in A)Object.prototype.hasOwnProperty.call(A,I)&&(M[I]=A[I]);return M.default=A,M}function L(A){return A&&A.__esModule?A:{default:A}}var t=M.SET_LIST="buckets/SET_LIST",w=M.ADD="buckets/ADD",i=M.REMOVE="buckets/REMOVE",O=M.SET_FILTER="buckets/SET_FILTER",y=M.SET_CURRENT_BUCKET="buckets/SET_CURRENT_BUCKET",u=M.SHOW_MAKE_BUCKET_MODAL="buckets/SHOW_MAKE_BUCKET_MODAL",z=M.SHOW_BUCKET_POLICY="buckets/SHOW_BUCKET_POLICY",E=M.SET_POLICIES="buckets/SET_POLICIES",c=M.fetchBuckets=function(){return function(A){var M=(0,j.pathSlice)(T.default.location.pathname),I=M.bucket,D=M.prefix;return g.default.ListBuckets().then((function(M){var g=M.buckets?M.buckets.map((function(A){return A.name})):[];g.length>0?(A(e(g)),I&&g.indexOf(I)>-1?A(Q(I,D)):A(Q(g[0]))):I?(A(e([I])),A(Q(I,D))):(A(Q("")),T.default.replace("/"))})).catch((function(M){I&&"Access Denied."===M.message||M.message.indexOf("Prefix access is denied")>-1?(A(e([I])),A(Q(I,D))):A(N.set({type:"danger",message:M.message,autoClear:!0}))}))}},e=M.setList=function(A){return{type:t,buckets:A}},Q=(M.setFilter=function(A){return{type:O,filter:A}},M.selectBucket=function(A,M){return function(I){I(Y(A)),I(D.selectPrefix(M||""))}}),Y=M.setCurrentBucket=function(A){return{type:y,bucket:A}},n=(M.makeBucket=function(A){return function(M){return g.default.MakeBucket({bucketName:A}).then((function(){M(n(A)),M(Q(A))})).catch((function(A){return M(N.set({type:"danger",message:A.message}))}))}},M.deleteBucket=function(A){return function(M){return g.default.DeleteBucket({bucketName:A}).then((function(){M(N.set({type:"info",message:"Bucket '"+A+"' has been deleted."})),M(k(A)),M(c())})).catch((function(A){M(N.set({type:"danger",message:A.message}))}))}},M.addBucket=function(A){return{type:w,bucket:A}}),k=M.removeBucket=function(A){return{type:i,bucket:A}},B=(M.showMakeBucketModal=function(){return{type:u,show:!0}},M.hideMakeBucketModal=function(){return{type:u,show:!1}},M.fetchPolicies=function(A){return function(M){return g.default.ListAllBucketPolicies({bucketName:A}).then((function(A){var I=A.policies;M(B(I||[]))})).catch((function(A){M(N.set({type:"danger",message:A.message}))}))}},M.setPolicies=function(A){return{type:E,policies:A}});M.showBucketPolicy=function(){return{type:z,show:!0}},M.hideBucketPolicy=function(){return{type:z,show:!1}}},function(A,M){var I=A.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=I)},function(A,M,I){var g=I(193)("wks"),T=I(142),N=I(49).Symbol,D="function"==typeof N;(A.exports=function(A){return g[A]||(g[A]=D&&N[A]||(D?N:T)("Symbol."+A))}).store=g},function(A,M){A.exports=function(A){return A&&A.__esModule?A:{default:A}}},function(A,M,I){"use strict";A.exports=function(A,M,I,g,T,N,D,j){if(!A){var C;if(void 0===M)C=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var L=[I,g,T,N,D,j],t=0;(C=new Error(M.replace(/%s/g,(function(){return L[t++]})))).name="Invariant Violation"}throw C.framesToPop=1,C}}},function(A,M,I){var g=I(9);A.exports=function(A,M){if(!g(A))return A;var I,T;if(M&&"function"==typeof(I=A.toString)&&!g(T=I.call(A)))return T;if("function"==typeof(I=A.valueOf)&&!g(T=I.call(A)))return T;if(!M&&"function"==typeof(I=A.toString)&&!g(T=I.call(A)))return T;throw TypeError("Can't convert object to primitive value")}},function(A,M){A.exports=function(A){if(null==A)throw TypeError("Can't call method on "+A);return A}},function(A,M,I){var g=I(3),T=I(42),N=I(8);A.exports=function(A,M){var I=(T.Object||{})[A]||Object[A],D={};D[A]=M(I),g(g.S+g.F*N((function(){I(1)})),"Object",D)}},function(A,M,I){var g=I(43),T=I(108),N=I(18),D=I(13),j=I(173);A.exports=function(A,M){var I=1==A,C=2==A,L=3==A,t=4==A,w=6==A,i=5==A||w,O=M||j;return function(M,j,y){for(var u,z,E=N(M),c=T(E),e=g(j,y,3),Q=D(c.length),Y=0,n=I?O(M,Q):C?O(M,0):void 0;Q>Y;Y++)if((i||Y in c)&&(z=e(u=c[Y],Y,E),A))if(I)n[Y]=z;else if(z)switch(A){case 3:return!0;case 5:return u;case 6:return Y;case 2:n.push(u)}else if(t)return!1;return w?-1:L||t?t:n}}},function(A,M){A.exports=function(A){return"object"==typeof A?null!==A:"function"==typeof A}},function(A,M,I){A.exports=!I(73)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.default=function(){for(var A=arguments.length,M=Array(A),I=0;I=0||(T[I]=A[I]);return T}(M,["children"]);if(delete g.in,delete g.mountOnEnter,delete g.unmountOnExit,delete g.appear,delete g.enter,delete g.exit,delete g.timeout,delete g.addEndListener,delete g.onEnter,delete g.onEntering,delete g.onEntered,delete g.onExit,delete g.onExiting,delete g.onExited,"function"==typeof I)return I(A,g);var N=T.default.Children.only(I);return T.default.cloneElement(N,g)},g}(T.default.Component);function L(){}C.contextTypes={transitionGroup:g.object},C.childContextTypes={transitionGroup:function(){}},C.propTypes={},C.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:L,onEntering:L,onEntered:L,onExit:L,onExiting:L,onExited:L},C.UNMOUNTED=0,C.EXITED=1,C.ENTERING=2,C.ENTERED=3,C.EXITING=4;var t=(0,D.polyfill)(C);M.default=t},function(A,M,I){"use strict";if(I(14)){var g=I(67),T=I(6),N=I(8),D=I(3),j=I(134),C=I(181),L=I(43),t=I(84),w=I(77),i=I(29),O=I(86),y=I(45),u=I(13),z=I(252),E=I(80),c=I(53),e=I(37),Q=I(95),Y=I(9),n=I(18),k=I(170),B=I(81),o=I(40),x=I(82).f,a=I(172),U=I(78),r=I(12),S=I(56),s=I(124),l=I(111),h=I(175),m=I(97),F=I(129),d=I(83),G=I(174),f=I(241),p=I(17),H=I(39),J=p.f,b=H.f,R=T.RangeError,W=T.TypeError,Z=T.Uint8Array,v=Array.prototype,P=C.ArrayBuffer,K=C.DataView,V=S(0),X=S(2),q=S(3),_=S(4),$=S(5),AA=S(6),MA=s(!0),IA=s(!1),gA=h.values,TA=h.keys,NA=h.entries,DA=v.lastIndexOf,jA=v.reduce,CA=v.reduceRight,LA=v.join,tA=v.sort,wA=v.slice,iA=v.toString,OA=v.toLocaleString,yA=r("iterator"),uA=r("toStringTag"),zA=U("typed_constructor"),EA=U("def_constructor"),cA=j.CONSTR,eA=j.TYPED,QA=j.VIEW,YA=S(1,(function(A,M){return xA(l(A,A[EA]),M)})),nA=N((function(){return 1===new Z(new Uint16Array([1]).buffer)[0]})),kA=!!Z&&!!Z.prototype.set&&N((function(){new Z(1).set({})})),BA=function(A,M){var I=y(A);if(I<0||I%M)throw R("Wrong offset!");return I},oA=function(A){if(Y(A)&&eA in A)return A;throw W(A+" is not a typed array!")},xA=function(A,M){if(!Y(A)||!(zA in A))throw W("It is not a typed array constructor!");return new A(M)},aA=function(A,M){return UA(l(A,A[EA]),M)},UA=function(A,M){for(var I=0,g=M.length,T=xA(A,g);g>I;)T[I]=M[I++];return T},rA=function(A,M,I){J(A,M,{get:function(){return this._d[I]}})},SA=function(A){var M,I,g,T,N,D,j=n(A),C=arguments.length,t=C>1?arguments[1]:void 0,w=void 0!==t,i=a(j);if(null!=i&&!k(i)){for(D=i.call(j),g=[],M=0;!(N=D.next()).done;M++)g.push(N.value);j=g}for(w&&C>2&&(t=L(t,arguments[2],2)),M=0,I=u(j.length),T=xA(this,I);I>M;M++)T[M]=w?t(j[M],M):j[M];return T},sA=function(){for(var A=0,M=arguments.length,I=xA(this,M);M>A;)I[A]=arguments[A++];return I},lA=!!Z&&N((function(){OA.call(new Z(1))})),hA=function(){return OA.apply(lA?wA.call(oA(this)):oA(this),arguments)},mA={copyWithin:function(A,M){return f.call(oA(this),A,M,arguments.length>2?arguments[2]:void 0)},every:function(A){return _(oA(this),A,arguments.length>1?arguments[1]:void 0)},fill:function(A){return G.apply(oA(this),arguments)},filter:function(A){return aA(this,X(oA(this),A,arguments.length>1?arguments[1]:void 0))},find:function(A){return $(oA(this),A,arguments.length>1?arguments[1]:void 0)},findIndex:function(A){return AA(oA(this),A,arguments.length>1?arguments[1]:void 0)},forEach:function(A){V(oA(this),A,arguments.length>1?arguments[1]:void 0)},indexOf:function(A){return IA(oA(this),A,arguments.length>1?arguments[1]:void 0)},includes:function(A){return MA(oA(this),A,arguments.length>1?arguments[1]:void 0)},join:function(A){return LA.apply(oA(this),arguments)},lastIndexOf:function(A){return DA.apply(oA(this),arguments)},map:function(A){return YA(oA(this),A,arguments.length>1?arguments[1]:void 0)},reduce:function(A){return jA.apply(oA(this),arguments)},reduceRight:function(A){return CA.apply(oA(this),arguments)},reverse:function(){for(var A,M=oA(this).length,I=Math.floor(M/2),g=0;g1?arguments[1]:void 0)},sort:function(A){return tA.call(oA(this),A)},subarray:function(A,M){var I=oA(this),g=I.length,T=E(A,g);return new(l(I,I[EA]))(I.buffer,I.byteOffset+T*I.BYTES_PER_ELEMENT,u((void 0===M?g:E(M,g))-T))}},FA=function(A,M){return aA(this,wA.call(oA(this),A,M))},dA=function(A){oA(this);var M=BA(arguments[1],1),I=this.length,g=n(A),T=u(g.length),N=0;if(T+M>I)throw R("Wrong length!");for(;N255?255:255&g),T.v[O](I*M+T.o,g,nA)}(this,I,A)},enumerable:!0})};e?(y=I((function(A,I,g,T){t(A,y,L,"_d");var N,D,j,C,w=0,O=0;if(Y(I)){if(!(I instanceof P||"ArrayBuffer"==(C=Q(I))||"SharedArrayBuffer"==C))return eA in I?UA(y,I):SA.call(y,I);N=I,O=BA(g,M);var E=I.byteLength;if(void 0===T){if(E%M)throw R("Wrong length!");if((D=E-O)<0)throw R("Wrong length!")}else if((D=u(T)*M)+O>E)throw R("Wrong length!");j=D/M}else j=z(I),N=new P(D=j*M);for(i(A,"_d",{b:N,o:O,l:D,e:j,v:new K(N)});w>",j=N||I;if(null==M[I])return new Error("The "+T+" `"+j+"` is required to make `"+D+"` accessible for users of assistive technologies such as screen readers.");for(var C=arguments.length,L=Array(C>5?C-5:0),t=5;tdocument.F=Object<\/script>"),A.close(),C=A.F;g--;)delete C.prototype[N[g]];return C()};A.exports=Object.create||function(A,M){var I;return null!==A?(j.prototype=g(A),I=new j,j.prototype=null,I[D]=A):I=C(),void 0===M?I:T(I,M)}},function(A,M,I){var g=I(226),T=I(158).concat("length","prototype");M.f=Object.getOwnPropertyNames||function(A){return g(A,T)}},function(A,M,I){"use strict";var g=I(6),T=I(17),N=I(14),D=I(12)("species");A.exports=function(A){var M=g[A];N&&M&&!M[D]&&T.f(M,D,{configurable:!0,get:function(){return this}})}},function(A,M){A.exports=function(A,M,I,g){if(!(A instanceof M)||void 0!==g&&g in A)throw TypeError(I+": incorrect invocation!");return A}},function(A,M,I){var g=I(43),T=I(239),N=I(170),D=I(5),j=I(13),C=I(172),L={},t={};(M=A.exports=function(A,M,I,w,i){var O,y,u,z,E=i?function(){return A}:C(A),c=g(I,w,M?2:1),e=0;if("function"!=typeof E)throw TypeError(A+" is not iterable!");if(N(E)){for(O=j(A.length);O>e;e++)if((z=M?c(D(y=A[e])[0],y[1]):c(A[e]))===L||z===t)return z}else for(u=E.call(A);!(y=u.next()).done;)if((z=T(u,c,y.value,M))===L||z===t)return z}).BREAK=L,M.RETURN=t},function(A,M,I){var g=I(30);A.exports=function(A,M,I){for(var T in M)g(A,T,M[T],I);return A}},function(A,M,I){var g=I(9);A.exports=function(A,M){if(!g(A)||A._t!==M)throw TypeError("Incompatible receiver, "+M+" required!");return A}},function(A,M,I){var g=I(57);A.exports=function(A){if(!g(A))throw TypeError(A+" is not an object!");return A}},function(A,M,I){var g=I(214);A.exports=function(A,M){if(null==A)return{};var I,T,N={},D=g(A);for(T=0;T=0||(N[I]=A[I]);return N}},function(A,M,I){"use strict";M.__esModule=!0,M.default=function(A){return A&&A.ownerDocument||document},A.exports=M.default},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.default=function(A){function M(M,I,g,T,N,D){var j=T||"<>",C=D||g;if(null==I[g])return M?new Error("Required "+N+" `"+C+"` was not specified in `"+j+"`."):null;for(var L=arguments.length,t=Array(L>6?L-6:0),w=6;wM.name.toLowerCase()?1:0})),N=N.sort((function(A,M){return A.name.toLowerCase()M.name.toLowerCase()?1:0})),M===g.SORT_ORDER_DESC&&(I=I.reverse(),N=N.reverse()),[].concat(T(I),T(N))},M.sortObjectsBySize=function(A,M){var I=A.filter((function(A){return A.name.endsWith("/")})),N=A.filter((function(A){return!A.name.endsWith("/")}));return N=N.sort((function(A,M){return A.size-M.size})),M===g.SORT_ORDER_DESC&&(N=N.reverse()),[].concat(T(I),T(N))},M.sortObjectsByDate=function(A,M){var I=A.filter((function(A){return A.name.endsWith("/")})),N=A.filter((function(A){return!A.name.endsWith("/")}));return N=N.sort((function(A,M){return new Date(A.lastModified).getTime()-new Date(M.lastModified).getTime()})),M===g.SORT_ORDER_DESC&&(N=N.reverse()),[].concat(T(I),T(N))},M.pathSlice=function(A){var M="",I="";if(!(A=A.replace(g.minioBrowserPrefix,"")))return{bucket:I,prefix:M};var T=A.indexOf("/",1);return-1==T?{bucket:I=A.slice(1),prefix:M}:{bucket:I=A.slice(1,T),prefix:M=A.slice(T+1)}},M.pathJoin=function(A,M){return M||(M=""),g.minioBrowserPrefix+"/"+A+"/"+M},M.getRandomAccessKey=function(){var A=new Uint8Array(20);return window.crypto.getRandomValues(A),Array.prototype.map.call(A,(function(A){return"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(A%"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".length)})).join("")},M.getRandomSecretKey=function(){var A=new Uint8Array(40);window.crypto.getRandomValues(A);var M=Array.prototype.map.call(A,(function(A){return String.fromCharCode(A)})).join("");return btoa(M).replace(/\//g,"+").substr(0,40)},M.getRandomString=function(A){for(var M="",I="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",g=0;g-1}))})),M.getCurrentBucket=function(A){return A.buckets.currentBucket}},function(A,M,I){var g=I(275),T=I(194);A.exports=Object.keys||function(A){return g(A,T)}},function(A,M,I){var g=I(139);A.exports=function(A){return Object(g(A))}},function(A,M,I){"use strict";var g=I(51);M.__esModule=!0,M.prefix=L,M.getClassSet=function(A){var M,I=((M={})[L(A)]=!0,M);if(A.bsSize){var g=j.SIZE_MAP[A.bsSize]||A.bsSize;I[L(A,g)]=!0}A.bsStyle&&(I[L(A,A.bsStyle)]=!0);return I},M.splitBsProps=function(A){var M={};return(0,T.default)(A).forEach((function(A){var I=A[0],g=A[1];y(I)||(M[I]=g)})),[O(A),M]},M.splitBsPropsAndOmit=function(A,M){var I={};M.forEach((function(A){I[A]=!0}));var g={};return(0,T.default)(A).forEach((function(A){var M=A[0],T=A[1];y(M)||I[M]||(g[M]=T)})),[O(A),g]},M.addStyle=function(A){for(var M=arguments.length,I=new Array(M>1?M-1:0),g=1;g>>0;for(M=0;M0)for(I=0;I=0?I?"+":"":"-")+Math.pow(10,Math.max(0,T)).toString().substr(1)+g}T.suppressDeprecationWarnings=!1,T.deprecationHandler=null,o=Object.keys?Object.keys:function(A){var M,I=[];for(M in A)j(A,M)&&I.push(M);return I};var l=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,h=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,m={},F={};function d(A,M,I,g){var T=g;"string"==typeof g&&(T=function(){return this[g]()}),A&&(F[A]=T),M&&(F[M[0]]=function(){return s(T.apply(this,arguments),M[1],M[2])}),I&&(F[I]=function(){return this.localeData().ordinal(T.apply(this,arguments),A)})}function G(A,M){return A.isValid()?(M=f(M,A.localeData()),m[M]=m[M]||function(A){var M,I,g,T=A.match(l);for(M=0,I=T.length;M=0&&h.test(A);)A=A.replace(h,g),h.lastIndex=0,I-=1;return A}var p={};function H(A,M){var I=A.toLowerCase();p[I]=p[I+"s"]=p[M]=A}function J(A){return"string"==typeof A?p[A]||p[A.toLowerCase()]:void 0}function b(A){var M,I,g={};for(I in A)j(A,I)&&(M=J(I))&&(g[M]=A[I]);return g}var R={};function W(A,M){R[A]=M}function Z(A){return A%4==0&&A%100!=0||A%400==0}function v(A){return A<0?Math.ceil(A)||0:Math.floor(A)}function P(A){var M=+A,I=0;return 0!==M&&isFinite(M)&&(I=v(M)),I}function K(A,M){return function(I){return null!=I?(X(this,A,I),T.updateOffset(this,M),this):V(this,A)}}function V(A,M){return A.isValid()?A._d["get"+(A._isUTC?"UTC":"")+M]():NaN}function X(A,M,I){A.isValid()&&!isNaN(I)&&("FullYear"===M&&Z(A.year())&&1===A.month()&&29===A.date()?(I=P(I),A._d["set"+(A._isUTC?"UTC":"")+M](I,A.month(),nA(I,A.month()))):A._d["set"+(A._isUTC?"UTC":"")+M](I))}var q,_=/\d/,$=/\d\d/,AA=/\d{3}/,MA=/\d{4}/,IA=/[+-]?\d{6}/,gA=/\d\d?/,TA=/\d\d\d\d?/,NA=/\d\d\d\d\d\d?/,DA=/\d{1,3}/,jA=/\d{1,4}/,CA=/[+-]?\d{1,6}/,LA=/\d+/,tA=/[+-]?\d+/,wA=/Z|[+-]\d\d:?\d\d/gi,iA=/Z|[+-]\d\d(?::?\d\d)?/gi,OA=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function yA(A,M,I){q[A]=U(M)?M:function(A,g){return A&&I?I:M}}function uA(A,M){return j(q,A)?q[A](M._strict,M._locale):new RegExp(zA(A.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(A,M,I,g,T){return M||I||g||T}))))}function zA(A){return A.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}q={};var EA,cA={};function eA(A,M){var I,g=M;for("string"==typeof A&&(A=[A]),t(M)&&(g=function(A,I){I[M]=P(A)}),I=0;I68?1900:2e3)};var hA=K("FullYear",!0);function mA(A,M,I,g,T,N,D){var j;return A<100&&A>=0?(j=new Date(A+400,M,I,g,T,N,D),isFinite(j.getFullYear())&&j.setFullYear(A)):j=new Date(A,M,I,g,T,N,D),j}function FA(A){var M,I;return A<100&&A>=0?((I=Array.prototype.slice.call(arguments))[0]=A+400,M=new Date(Date.UTC.apply(null,I)),isFinite(M.getUTCFullYear())&&M.setUTCFullYear(A)):M=new Date(Date.UTC.apply(null,arguments)),M}function dA(A,M,I){var g=7+M-I;return-(7+FA(A,0,g).getUTCDay()-M)%7+g-1}function GA(A,M,I,g,T){var N,D,j=1+7*(M-1)+(7+I-g)%7+dA(A,g,T);return j<=0?D=lA(N=A-1)+j:j>lA(A)?(N=A+1,D=j-lA(A)):(N=A,D=j),{year:N,dayOfYear:D}}function fA(A,M,I){var g,T,N=dA(A.year(),M,I),D=Math.floor((A.dayOfYear()-N-1)/7)+1;return D<1?g=D+pA(T=A.year()-1,M,I):D>pA(A.year(),M,I)?(g=D-pA(A.year(),M,I),T=A.year()+1):(T=A.year(),g=D),{week:g,year:T}}function pA(A,M,I){var g=dA(A,M,I),T=dA(A+1,M,I);return(lA(A)-g+T)/7}function HA(A,M){return A.slice(M,7).concat(A.slice(0,M))}d("w",["ww",2],"wo","week"),d("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),W("week",5),W("isoWeek",5),yA("w",gA),yA("ww",gA,$),yA("W",gA),yA("WW",gA,$),QA(["w","ww","W","WW"],(function(A,M,I,g){M[g.substr(0,1)]=P(A)})),d("d",0,"do","day"),d("dd",0,0,(function(A){return this.localeData().weekdaysMin(this,A)})),d("ddd",0,0,(function(A){return this.localeData().weekdaysShort(this,A)})),d("dddd",0,0,(function(A){return this.localeData().weekdays(this,A)})),d("e",0,0,"weekday"),d("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),W("day",11),W("weekday",11),W("isoWeekday",11),yA("d",gA),yA("e",gA),yA("E",gA),yA("dd",(function(A,M){return M.weekdaysMinRegex(A)})),yA("ddd",(function(A,M){return M.weekdaysShortRegex(A)})),yA("dddd",(function(A,M){return M.weekdaysRegex(A)})),QA(["dd","ddd","dddd"],(function(A,M,I,g){var T=I._locale.weekdaysParse(A,g,I._strict);null!=T?M.d=T:u(I).invalidWeekday=A})),QA(["d","e","E"],(function(A,M,I,g){M[g]=P(A)}));var JA="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),bA="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),RA="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),WA=OA,ZA=OA,vA=OA;function PA(A,M,I){var g,T,N,D=A.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],g=0;g<7;++g)N=y([2e3,1]).day(g),this._minWeekdaysParse[g]=this.weekdaysMin(N,"").toLocaleLowerCase(),this._shortWeekdaysParse[g]=this.weekdaysShort(N,"").toLocaleLowerCase(),this._weekdaysParse[g]=this.weekdays(N,"").toLocaleLowerCase();return I?"dddd"===M?-1!==(T=EA.call(this._weekdaysParse,D))?T:null:"ddd"===M?-1!==(T=EA.call(this._shortWeekdaysParse,D))?T:null:-1!==(T=EA.call(this._minWeekdaysParse,D))?T:null:"dddd"===M?-1!==(T=EA.call(this._weekdaysParse,D))||-1!==(T=EA.call(this._shortWeekdaysParse,D))||-1!==(T=EA.call(this._minWeekdaysParse,D))?T:null:"ddd"===M?-1!==(T=EA.call(this._shortWeekdaysParse,D))||-1!==(T=EA.call(this._weekdaysParse,D))||-1!==(T=EA.call(this._minWeekdaysParse,D))?T:null:-1!==(T=EA.call(this._minWeekdaysParse,D))||-1!==(T=EA.call(this._weekdaysParse,D))||-1!==(T=EA.call(this._shortWeekdaysParse,D))?T:null}function KA(){function A(A,M){return M.length-A.length}var M,I,g,T,N,D=[],j=[],C=[],L=[];for(M=0;M<7;M++)I=y([2e3,1]).day(M),g=zA(this.weekdaysMin(I,"")),T=zA(this.weekdaysShort(I,"")),N=zA(this.weekdays(I,"")),D.push(g),j.push(T),C.push(N),L.push(g),L.push(T),L.push(N);D.sort(A),j.sort(A),C.sort(A),L.sort(A),this._weekdaysRegex=new RegExp("^("+L.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+C.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+D.join("|")+")","i")}function VA(){return this.hours()%12||12}function XA(A,M){d(A,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),M)}))}function qA(A,M){return M._meridiemParse}d("H",["HH",2],0,"hour"),d("h",["hh",2],0,VA),d("k",["kk",2],0,(function(){return this.hours()||24})),d("hmm",0,0,(function(){return""+VA.apply(this)+s(this.minutes(),2)})),d("hmmss",0,0,(function(){return""+VA.apply(this)+s(this.minutes(),2)+s(this.seconds(),2)})),d("Hmm",0,0,(function(){return""+this.hours()+s(this.minutes(),2)})),d("Hmmss",0,0,(function(){return""+this.hours()+s(this.minutes(),2)+s(this.seconds(),2)})),XA("a",!0),XA("A",!1),H("hour","h"),W("hour",13),yA("a",qA),yA("A",qA),yA("H",gA),yA("h",gA),yA("k",gA),yA("HH",gA,$),yA("hh",gA,$),yA("kk",gA,$),yA("hmm",TA),yA("hmmss",NA),yA("Hmm",TA),yA("Hmmss",NA),eA(["H","HH"],3),eA(["k","kk"],(function(A,M,I){var g=P(A);M[3]=24===g?0:g})),eA(["a","A"],(function(A,M,I){I._isPm=I._locale.isPM(A),I._meridiem=A})),eA(["h","hh"],(function(A,M,I){M[3]=P(A),u(I).bigHour=!0})),eA("hmm",(function(A,M,I){var g=A.length-2;M[3]=P(A.substr(0,g)),M[4]=P(A.substr(g)),u(I).bigHour=!0})),eA("hmmss",(function(A,M,I){var g=A.length-4,T=A.length-2;M[3]=P(A.substr(0,g)),M[4]=P(A.substr(g,2)),M[5]=P(A.substr(T)),u(I).bigHour=!0})),eA("Hmm",(function(A,M,I){var g=A.length-2;M[3]=P(A.substr(0,g)),M[4]=P(A.substr(g))})),eA("Hmmss",(function(A,M,I){var g=A.length-4,T=A.length-2;M[3]=P(A.substr(0,g)),M[4]=P(A.substr(g,2)),M[5]=P(A.substr(T))}));var _A,$A=K("Hours",!0),AM={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:kA,monthsShort:BA,week:{dow:0,doy:6},weekdays:JA,weekdaysMin:RA,weekdaysShort:bA,meridiemParse:/[ap]\.?m?\.?/i},MM={},IM={};function gM(A,M){var I,g=Math.min(A.length,M.length);for(I=0;I0;){if(g=NM(T.slice(0,M).join("-")))return g;if(I&&I.length>=M&&gM(T,I)>=M-1)break;M--}N++}return _A}(A)}function LM(A){var M,I=A._a;return I&&-2===u(A).overflow&&(M=I[1]<0||I[1]>11?1:I[2]<1||I[2]>nA(I[0],I[1])?2:I[3]<0||I[3]>24||24===I[3]&&(0!==I[4]||0!==I[5]||0!==I[6])?3:I[4]<0||I[4]>59?4:I[5]<0||I[5]>59?5:I[6]<0||I[6]>999?6:-1,u(A)._overflowDayOfYear&&(M<0||M>2)&&(M=2),u(A)._overflowWeeks&&-1===M&&(M=7),u(A)._overflowWeekday&&-1===M&&(M=8),u(A).overflow=M),A}var tM=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wM=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,iM=/Z|[+-]\d\d(?::?\d\d)?/,OM=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],yM=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],uM=/^\/?Date\((-?\d+)/i,zM=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,EM={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function cM(A){var M,I,g,T,N,D,j=A._i,C=tM.exec(j)||wM.exec(j);if(C){for(u(A).iso=!0,M=0,I=OM.length;M7)&&(C=!0)):(N=A._locale._week.dow,D=A._locale._week.doy,L=fA(xM(),N,D),I=YM(M.gg,A._a[0],L.year),g=YM(M.w,L.week),null!=M.d?((T=M.d)<0||T>6)&&(C=!0):null!=M.e?(T=M.e+N,(M.e<0||M.e>6)&&(C=!0)):T=N),g<1||g>pA(I,N,D)?u(A)._overflowWeeks=!0:null!=C?u(A)._overflowWeekday=!0:(j=GA(I,g,T,N,D),A._a[0]=j.year,A._dayOfYear=j.dayOfYear)}(A),null!=A._dayOfYear&&(D=YM(A._a[0],g[0]),(A._dayOfYear>lA(D)||0===A._dayOfYear)&&(u(A)._overflowDayOfYear=!0),I=FA(D,0,A._dayOfYear),A._a[1]=I.getUTCMonth(),A._a[2]=I.getUTCDate()),M=0;M<3&&null==A._a[M];++M)A._a[M]=j[M]=g[M];for(;M<7;M++)A._a[M]=j[M]=null==A._a[M]?2===M?1:0:A._a[M];24===A._a[3]&&0===A._a[4]&&0===A._a[5]&&0===A._a[6]&&(A._nextDay=!0,A._a[3]=0),A._d=(A._useUTC?FA:mA).apply(null,j),N=A._useUTC?A._d.getUTCDay():A._d.getDay(),null!=A._tzm&&A._d.setUTCMinutes(A._d.getUTCMinutes()-A._tzm),A._nextDay&&(A._a[3]=24),A._w&&void 0!==A._w.d&&A._w.d!==N&&(u(A).weekdayMismatch=!0)}}function kM(A){if(A._f!==T.ISO_8601)if(A._f!==T.RFC_2822){A._a=[],u(A).empty=!0;var M,I,g,N,D,j,C=""+A._i,L=C.length,t=0;for(g=f(A._f,A._locale).match(l)||[],M=0;M0&&u(A).unusedInput.push(D),C=C.slice(C.indexOf(I)+I.length),t+=I.length),F[N]?(I?u(A).empty=!1:u(A).unusedTokens.push(N),YA(N,I,A)):A._strict&&!I&&u(A).unusedTokens.push(N);u(A).charsLeftOver=L-t,C.length>0&&u(A).unusedInput.push(C),A._a[3]<=12&&!0===u(A).bigHour&&A._a[3]>0&&(u(A).bigHour=void 0),u(A).parsedDateParts=A._a.slice(0),u(A).meridiem=A._meridiem,A._a[3]=function(A,M,I){var g;return null==I?M:null!=A.meridiemHour?A.meridiemHour(M,I):null!=A.isPM?((g=A.isPM(I))&&M<12&&(M+=12),g||12!==M||(M=0),M):M}(A._locale,A._a[3],A._meridiem),null!==(j=u(A).era)&&(A._a[0]=A._locale.erasConvertYear(j,A._a[0])),nM(A),LM(A)}else QM(A);else cM(A)}function BM(A){var M=A._i,I=A._f;return A._locale=A._locale||CM(A._l),null===M||void 0===I&&""===M?E({nullInput:!0}):("string"==typeof M&&(A._i=M=A._locale.preparse(M)),n(M)?new Y(LM(M)):(w(M)?A._d=M:N(I)?function(A){var M,I,g,T,N,D,j=!1;if(0===A._f.length)return u(A).invalidFormat=!0,void(A._d=new Date(NaN));for(T=0;Tthis?this:A:E()}));function rM(A,M){var I,g;if(1===M.length&&N(M[0])&&(M=M[0]),!M.length)return xM();for(I=M[0],g=1;g=0?new Date(A+400,M,I)-126227808e5:new Date(A,M,I).valueOf()}function TI(A,M,I){return A<100&&A>=0?Date.UTC(A+400,M,I)-126227808e5:Date.UTC(A,M,I)}function NI(A,M){return M.erasAbbrRegex(A)}function DI(){var A,M,I=[],g=[],T=[],N=[],D=this.eras();for(A=0,M=D.length;A(N=pA(A,g,T))&&(M=N),LI.call(this,A,M,I,g,T))}function LI(A,M,I,g,T){var N=GA(A,M,I,g,T),D=FA(N.year,0,N.dayOfYear);return this.year(D.getUTCFullYear()),this.month(D.getUTCMonth()),this.date(D.getUTCDate()),this}d("N",0,0,"eraAbbr"),d("NN",0,0,"eraAbbr"),d("NNN",0,0,"eraAbbr"),d("NNNN",0,0,"eraName"),d("NNNNN",0,0,"eraNarrow"),d("y",["y",1],"yo","eraYear"),d("y",["yy",2],0,"eraYear"),d("y",["yyy",3],0,"eraYear"),d("y",["yyyy",4],0,"eraYear"),yA("N",NI),yA("NN",NI),yA("NNN",NI),yA("NNNN",(function(A,M){return M.erasNameRegex(A)})),yA("NNNNN",(function(A,M){return M.erasNarrowRegex(A)})),eA(["N","NN","NNN","NNNN","NNNNN"],(function(A,M,I,g){var T=I._locale.erasParse(A,g,I._strict);T?u(I).era=T:u(I).invalidEra=A})),yA("y",LA),yA("yy",LA),yA("yyy",LA),yA("yyyy",LA),yA("yo",(function(A,M){return M._eraYearOrdinalRegex||LA})),eA(["y","yy","yyy","yyyy"],0),eA(["yo"],(function(A,M,I,g){var T;I._locale._eraYearOrdinalRegex&&(T=A.match(I._locale._eraYearOrdinalRegex)),I._locale.eraYearOrdinalParse?M[0]=I._locale.eraYearOrdinalParse(A,T):M[0]=parseInt(A,10)})),d(0,["gg",2],0,(function(){return this.weekYear()%100})),d(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),jI("gggg","weekYear"),jI("ggggg","weekYear"),jI("GGGG","isoWeekYear"),jI("GGGGG","isoWeekYear"),H("weekYear","gg"),H("isoWeekYear","GG"),W("weekYear",1),W("isoWeekYear",1),yA("G",tA),yA("g",tA),yA("GG",gA,$),yA("gg",gA,$),yA("GGGG",jA,MA),yA("gggg",jA,MA),yA("GGGGG",CA,IA),yA("ggggg",CA,IA),QA(["gggg","ggggg","GGGG","GGGGG"],(function(A,M,I,g){M[g.substr(0,2)]=P(A)})),QA(["gg","GG"],(function(A,M,I,g){M[g]=T.parseTwoDigitYear(A)})),d("Q",0,"Qo","quarter"),H("quarter","Q"),W("quarter",7),yA("Q",_),eA("Q",(function(A,M){M[1]=3*(P(A)-1)})),d("D",["DD",2],"Do","date"),H("date","D"),W("date",9),yA("D",gA),yA("DD",gA,$),yA("Do",(function(A,M){return A?M._dayOfMonthOrdinalParse||M._ordinalParse:M._dayOfMonthOrdinalParseLenient})),eA(["D","DD"],2),eA("Do",(function(A,M){M[2]=P(A.match(gA)[0])}));var tI=K("Date",!0);d("DDD",["DDDD",3],"DDDo","dayOfYear"),H("dayOfYear","DDD"),W("dayOfYear",4),yA("DDD",DA),yA("DDDD",AA),eA(["DDD","DDDD"],(function(A,M,I){I._dayOfYear=P(A)})),d("m",["mm",2],0,"minute"),H("minute","m"),W("minute",14),yA("m",gA),yA("mm",gA,$),eA(["m","mm"],4);var wI=K("Minutes",!1);d("s",["ss",2],0,"second"),H("second","s"),W("second",15),yA("s",gA),yA("ss",gA,$),eA(["s","ss"],5);var iI,OI,yI=K("Seconds",!1);for(d("S",0,0,(function(){return~~(this.millisecond()/100)})),d(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),d(0,["SSS",3],0,"millisecond"),d(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),d(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),d(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),d(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),d(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),d(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),H("millisecond","ms"),W("millisecond",16),yA("S",DA,_),yA("SS",DA,$),yA("SSS",DA,AA),iI="SSSS";iI.length<=9;iI+="S")yA(iI,LA);function uI(A,M){M[6]=P(1e3*("0."+A))}for(iI="S";iI.length<=9;iI+="S")eA(iI,uI);OI=K("Milliseconds",!1),d("z",0,0,"zoneAbbr"),d("zz",0,0,"zoneName");var zI=Y.prototype;function EI(A){return A}zI.add=PM,zI.calendar=function(A,M){1===arguments.length&&(XM(arguments[0])?(A=arguments[0],M=void 0):qM(arguments[0])&&(M=arguments[0],A=void 0));var I=A||xM(),g=GM(I,this).startOf("day"),N=T.calendarFormat(this,g)||"sameElse",D=M&&(U(M[N])?M[N].call(this,I):M[N]);return this.format(D||this.localeData().calendar(N,this,xM(I)))},zI.clone=function(){return new Y(this)},zI.diff=function(A,M,I){var g,T,N;if(!this.isValid())return NaN;if(!(g=GM(A,this)).isValid())return NaN;switch(T=6e4*(g.utcOffset()-this.utcOffset()),M=J(M)){case"year":N=_M(this,g)/12;break;case"month":N=_M(this,g);break;case"quarter":N=_M(this,g)/3;break;case"second":N=(this-g)/1e3;break;case"minute":N=(this-g)/6e4;break;case"hour":N=(this-g)/36e5;break;case"day":N=(this-g-T)/864e5;break;case"week":N=(this-g-T)/6048e5;break;default:N=this-g}return I?N:v(N)},zI.endOf=function(A){var M,I;if(void 0===(A=J(A))||"millisecond"===A||!this.isValid())return this;switch(I=this._isUTC?TI:gI,A){case"year":M=I(this.year()+1,0,1)-1;break;case"quarter":M=I(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":M=I(this.year(),this.month()+1,1)-1;break;case"week":M=I(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":M=I(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":M=I(this.year(),this.month(),this.date()+1)-1;break;case"hour":M=this._d.valueOf(),M+=36e5-II(M+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":M=this._d.valueOf(),M+=6e4-II(M,6e4)-1;break;case"second":M=this._d.valueOf(),M+=1e3-II(M,1e3)-1}return this._d.setTime(M),T.updateOffset(this,!0),this},zI.format=function(A){A||(A=this.isUtc()?T.defaultFormatUtc:T.defaultFormat);var M=G(this,A);return this.localeData().postformat(M)},zI.from=function(A,M){return this.isValid()&&(n(A)&&A.isValid()||xM(A).isValid())?bM({to:this,from:A}).locale(this.locale()).humanize(!M):this.localeData().invalidDate()},zI.fromNow=function(A){return this.from(xM(),A)},zI.to=function(A,M){return this.isValid()&&(n(A)&&A.isValid()||xM(A).isValid())?bM({from:this,to:A}).locale(this.locale()).humanize(!M):this.localeData().invalidDate()},zI.toNow=function(A){return this.to(xM(),A)},zI.get=function(A){return U(this[A=J(A)])?this[A]():this},zI.invalidAt=function(){return u(this).overflow},zI.isAfter=function(A,M){var I=n(A)?A:xM(A);return!(!this.isValid()||!I.isValid())&&("millisecond"===(M=J(M)||"millisecond")?this.valueOf()>I.valueOf():I.valueOf()9999?G(I,M?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):U(Date.prototype.toISOString)?M?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",G(I,"Z")):G(I,M?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},zI.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var A,M,I,g="moment",T="";return this.isLocal()||(g=0===this.utcOffset()?"moment.utc":"moment.parseZone",T="Z"),A="["+g+'("]',M=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",I=T+'[")]',this.format(A+M+"-MM-DD[T]HH:mm:ss.SSS"+I)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(zI[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),zI.toJSON=function(){return this.isValid()?this.toISOString():null},zI.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},zI.unix=function(){return Math.floor(this.valueOf()/1e3)},zI.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},zI.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},zI.eraName=function(){var A,M,I,g=this.localeData().eras();for(A=0,M=g.length;Athis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},zI.isLocal=function(){return!!this.isValid()&&!this._isUTC},zI.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},zI.isUtc=pM,zI.isUTC=pM,zI.zoneAbbr=function(){return this._isUTC?"UTC":""},zI.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},zI.dates=B("dates accessor is deprecated. Use date instead.",tI),zI.months=B("months accessor is deprecated. Use month instead",SA),zI.years=B("years accessor is deprecated. Use year instead",hA),zI.zone=B("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(A,M){return null!=A?("string"!=typeof A&&(A=-A),this.utcOffset(A,M),this):-this.utcOffset()})),zI.isDSTShifted=B("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!L(this._isDSTShifted))return this._isDSTShifted;var A,M={};return Q(M,this),(M=BM(M))._a?(A=M._isUTC?y(M._a):xM(M._a),this._isDSTShifted=this.isValid()&&function(A,M,I){var g,T=Math.min(A.length,M.length),N=Math.abs(A.length-M.length),D=0;for(g=0;g0):this._isDSTShifted=!1,this._isDSTShifted}));var cI=S.prototype;function eI(A,M,I,g){var T=CM(),N=y().set(g,M);return T[I](N,A)}function QI(A,M,I){if(t(A)&&(M=A,A=void 0),A=A||"",null!=M)return eI(A,M,I,"month");var g,T=[];for(g=0;g<12;g++)T[g]=eI(A,g,I,"month");return T}function YI(A,M,I,g){"boolean"==typeof A?(t(M)&&(I=M,M=void 0),M=M||""):(I=M=A,A=!1,t(M)&&(I=M,M=void 0),M=M||"");var T,N=CM(),D=A?N._week.dow:0,j=[];if(null!=I)return eI(M,(I+D)%7,g,"day");for(T=0;T<7;T++)j[T]=eI(M,(T+D)%7,g,"day");return j}cI.calendar=function(A,M,I){var g=this._calendar[A]||this._calendar.sameElse;return U(g)?g.call(M,I):g},cI.longDateFormat=function(A){var M=this._longDateFormat[A],I=this._longDateFormat[A.toUpperCase()];return M||!I?M:(this._longDateFormat[A]=I.match(l).map((function(A){return"MMMM"===A||"MM"===A||"DD"===A||"dddd"===A?A.slice(1):A})).join(""),this._longDateFormat[A])},cI.invalidDate=function(){return this._invalidDate},cI.ordinal=function(A){return this._ordinal.replace("%d",A)},cI.preparse=EI,cI.postformat=EI,cI.relativeTime=function(A,M,I,g){var T=this._relativeTime[I];return U(T)?T(A,M,I,g):T.replace(/%d/i,A)},cI.pastFuture=function(A,M){var I=this._relativeTime[A>0?"future":"past"];return U(I)?I(M):I.replace(/%s/i,M)},cI.set=function(A){var M,I;for(I in A)j(A,I)&&(U(M=A[I])?this[I]=M:this["_"+I]=M);this._config=A,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},cI.eras=function(A,M){var I,g,N,D=this._eras||CM("en")._eras;for(I=0,g=D.length;I=0)return C[g]},cI.erasConvertYear=function(A,M){var I=A.since<=A.until?1:-1;return void 0===M?T(A.since).year():T(A.since).year()+(M-A.offset)*I},cI.erasAbbrRegex=function(A){return j(this,"_erasAbbrRegex")||DI.call(this),A?this._erasAbbrRegex:this._erasRegex},cI.erasNameRegex=function(A){return j(this,"_erasNameRegex")||DI.call(this),A?this._erasNameRegex:this._erasRegex},cI.erasNarrowRegex=function(A){return j(this,"_erasNarrowRegex")||DI.call(this),A?this._erasNarrowRegex:this._erasRegex},cI.months=function(A,M){return A?N(this._months)?this._months[A.month()]:this._months[(this._months.isFormat||oA).test(M)?"format":"standalone"][A.month()]:N(this._months)?this._months:this._months.standalone},cI.monthsShort=function(A,M){return A?N(this._monthsShort)?this._monthsShort[A.month()]:this._monthsShort[oA.test(M)?"format":"standalone"][A.month()]:N(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},cI.monthsParse=function(A,M,I){var g,T,N;if(this._monthsParseExact)return UA.call(this,A,M,I);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),g=0;g<12;g++){if(T=y([2e3,g]),I&&!this._longMonthsParse[g]&&(this._longMonthsParse[g]=new RegExp("^"+this.months(T,"").replace(".","")+"$","i"),this._shortMonthsParse[g]=new RegExp("^"+this.monthsShort(T,"").replace(".","")+"$","i")),I||this._monthsParse[g]||(N="^"+this.months(T,"")+"|^"+this.monthsShort(T,""),this._monthsParse[g]=new RegExp(N.replace(".",""),"i")),I&&"MMMM"===M&&this._longMonthsParse[g].test(A))return g;if(I&&"MMM"===M&&this._shortMonthsParse[g].test(A))return g;if(!I&&this._monthsParse[g].test(A))return g}},cI.monthsRegex=function(A){return this._monthsParseExact?(j(this,"_monthsRegex")||sA.call(this),A?this._monthsStrictRegex:this._monthsRegex):(j(this,"_monthsRegex")||(this._monthsRegex=aA),this._monthsStrictRegex&&A?this._monthsStrictRegex:this._monthsRegex)},cI.monthsShortRegex=function(A){return this._monthsParseExact?(j(this,"_monthsRegex")||sA.call(this),A?this._monthsShortStrictRegex:this._monthsShortRegex):(j(this,"_monthsShortRegex")||(this._monthsShortRegex=xA),this._monthsShortStrictRegex&&A?this._monthsShortStrictRegex:this._monthsShortRegex)},cI.week=function(A){return fA(A,this._week.dow,this._week.doy).week},cI.firstDayOfYear=function(){return this._week.doy},cI.firstDayOfWeek=function(){return this._week.dow},cI.weekdays=function(A,M){var I=N(this._weekdays)?this._weekdays:this._weekdays[A&&!0!==A&&this._weekdays.isFormat.test(M)?"format":"standalone"];return!0===A?HA(I,this._week.dow):A?I[A.day()]:I},cI.weekdaysMin=function(A){return!0===A?HA(this._weekdaysMin,this._week.dow):A?this._weekdaysMin[A.day()]:this._weekdaysMin},cI.weekdaysShort=function(A){return!0===A?HA(this._weekdaysShort,this._week.dow):A?this._weekdaysShort[A.day()]:this._weekdaysShort},cI.weekdaysParse=function(A,M,I){var g,T,N;if(this._weekdaysParseExact)return PA.call(this,A,M,I);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),g=0;g<7;g++){if(T=y([2e3,1]).day(g),I&&!this._fullWeekdaysParse[g]&&(this._fullWeekdaysParse[g]=new RegExp("^"+this.weekdays(T,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[g]=new RegExp("^"+this.weekdaysShort(T,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[g]=new RegExp("^"+this.weekdaysMin(T,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[g]||(N="^"+this.weekdays(T,"")+"|^"+this.weekdaysShort(T,"")+"|^"+this.weekdaysMin(T,""),this._weekdaysParse[g]=new RegExp(N.replace(".",""),"i")),I&&"dddd"===M&&this._fullWeekdaysParse[g].test(A))return g;if(I&&"ddd"===M&&this._shortWeekdaysParse[g].test(A))return g;if(I&&"dd"===M&&this._minWeekdaysParse[g].test(A))return g;if(!I&&this._weekdaysParse[g].test(A))return g}},cI.weekdaysRegex=function(A){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||KA.call(this),A?this._weekdaysStrictRegex:this._weekdaysRegex):(j(this,"_weekdaysRegex")||(this._weekdaysRegex=WA),this._weekdaysStrictRegex&&A?this._weekdaysStrictRegex:this._weekdaysRegex)},cI.weekdaysShortRegex=function(A){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||KA.call(this),A?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(j(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ZA),this._weekdaysShortStrictRegex&&A?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},cI.weekdaysMinRegex=function(A){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||KA.call(this),A?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(j(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=vA),this._weekdaysMinStrictRegex&&A?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},cI.isPM=function(A){return"p"===(A+"").toLowerCase().charAt(0)},cI.meridiem=function(A,M,I){return A>11?I?"pm":"PM":I?"am":"AM"},DM("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(A){var M=A%10;return A+(1===P(A%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")}}),T.lang=B("moment.lang is deprecated. Use moment.locale instead.",DM),T.langData=B("moment.langData is deprecated. Use moment.localeData instead.",CM);var nI=Math.abs;function kI(A,M,I,g){var T=bM(M,I);return A._milliseconds+=g*T._milliseconds,A._days+=g*T._days,A._months+=g*T._months,A._bubble()}function BI(A){return A<0?Math.floor(A):Math.ceil(A)}function oI(A){return 4800*A/146097}function xI(A){return 146097*A/4800}function aI(A){return function(){return this.as(A)}}var UI=aI("ms"),rI=aI("s"),SI=aI("m"),sI=aI("h"),lI=aI("d"),hI=aI("w"),mI=aI("M"),FI=aI("Q"),dI=aI("y");function GI(A){return function(){return this.isValid()?this._data[A]:NaN}}var fI=GI("milliseconds"),pI=GI("seconds"),HI=GI("minutes"),JI=GI("hours"),bI=GI("days"),RI=GI("months"),WI=GI("years"),ZI=Math.round,vI={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function PI(A,M,I,g,T){return T.relativeTime(M||1,!!I,A,g)}var KI=Math.abs;function VI(A){return(A>0)-(A<0)||+A}function XI(){if(!this.isValid())return this.localeData().invalidDate();var A,M,I,g,T,N,D,j,C=KI(this._milliseconds)/1e3,L=KI(this._days),t=KI(this._months),w=this.asSeconds();return w?(A=v(C/60),M=v(A/60),C%=60,A%=60,I=v(t/12),t%=12,g=C?C.toFixed(3).replace(/\.?0+$/,""):"",T=w<0?"-":"",N=VI(this._months)!==VI(w)?"-":"",D=VI(this._days)!==VI(w)?"-":"",j=VI(this._milliseconds)!==VI(w)?"-":"",T+"P"+(I?N+I+"Y":"")+(t?N+t+"M":"")+(L?D+L+"D":"")+(M||A||C?"T":"")+(M?j+M+"H":"")+(A?j+A+"M":"")+(C?j+g+"S":"")):"P0D"}var qI=sM.prototype;return qI.isValid=function(){return this._isValid},qI.abs=function(){var A=this._data;return this._milliseconds=nI(this._milliseconds),this._days=nI(this._days),this._months=nI(this._months),A.milliseconds=nI(A.milliseconds),A.seconds=nI(A.seconds),A.minutes=nI(A.minutes),A.hours=nI(A.hours),A.months=nI(A.months),A.years=nI(A.years),this},qI.add=function(A,M){return kI(this,A,M,1)},qI.subtract=function(A,M){return kI(this,A,M,-1)},qI.as=function(A){if(!this.isValid())return NaN;var M,I,g=this._milliseconds;if("month"===(A=J(A))||"quarter"===A||"year"===A)switch(M=this._days+g/864e5,I=this._months+oI(M),A){case"month":return I;case"quarter":return I/3;case"year":return I/12}else switch(M=this._days+Math.round(xI(this._months)),A){case"week":return M/7+g/6048e5;case"day":return M+g/864e5;case"hour":return 24*M+g/36e5;case"minute":return 1440*M+g/6e4;case"second":return 86400*M+g/1e3;case"millisecond":return Math.floor(864e5*M)+g;default:throw new Error("Unknown unit "+A)}},qI.asMilliseconds=UI,qI.asSeconds=rI,qI.asMinutes=SI,qI.asHours=sI,qI.asDays=lI,qI.asWeeks=hI,qI.asMonths=mI,qI.asQuarters=FI,qI.asYears=dI,qI.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*P(this._months/12):NaN},qI._bubble=function(){var A,M,I,g,T,N=this._milliseconds,D=this._days,j=this._months,C=this._data;return N>=0&&D>=0&&j>=0||N<=0&&D<=0&&j<=0||(N+=864e5*BI(xI(j)+D),D=0,j=0),C.milliseconds=N%1e3,A=v(N/1e3),C.seconds=A%60,M=v(A/60),C.minutes=M%60,I=v(M/60),C.hours=I%24,D+=v(I/24),T=v(oI(D)),j+=T,D-=BI(xI(T)),g=v(j/12),j%=12,C.days=D,C.months=j,C.years=g,this},qI.clone=function(){return bM(this)},qI.get=function(A){return A=J(A),this.isValid()?this[A+"s"]():NaN},qI.milliseconds=fI,qI.seconds=pI,qI.minutes=HI,qI.hours=JI,qI.days=bI,qI.weeks=function(){return v(this.days()/7)},qI.months=RI,qI.years=WI,qI.humanize=function(A,M){if(!this.isValid())return this.localeData().invalidDate();var I,g,T=!1,N=vI;return"object"==typeof A&&(M=A,A=!1),"boolean"==typeof A&&(T=A),"object"==typeof M&&(N=Object.assign({},vI,M),null!=M.s&&null==M.ss&&(N.ss=M.s-1)),I=this.localeData(),g=function(A,M,I,g){var T=bM(A).abs(),N=ZI(T.as("s")),D=ZI(T.as("m")),j=ZI(T.as("h")),C=ZI(T.as("d")),L=ZI(T.as("M")),t=ZI(T.as("w")),w=ZI(T.as("y")),i=N<=I.ss&&["s",N]||N0,i[4]=g,PI.apply(null,i)}(this,!T,N,I),T&&(g=I.pastFuture(+this,g)),I.postformat(g)},qI.toISOString=XI,qI.toString=XI,qI.toJSON=XI,qI.locale=$M,qI.localeData=MI,qI.toIsoString=B("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",XI),qI.lang=AI,d("X",0,0,"unix"),d("x",0,0,"valueOf"),yA("x",tA),yA("X",/[+-]?\d+(\.\d{1,3})?/),eA("X",(function(A,M,I){I._d=new Date(1e3*parseFloat(A))})),eA("x",(function(A,M,I){I._d=new Date(P(A))})),
+//! moment.js
+T.version="2.26.0",M=xM,T.fn=zI,T.min=function(){var A=[].slice.call(arguments,0);return rM("isBefore",A)},T.max=function(){var A=[].slice.call(arguments,0);return rM("isAfter",A)},T.now=function(){return Date.now?Date.now():+new Date},T.utc=y,T.unix=function(A){return xM(1e3*A)},T.months=function(A,M){return QI(A,M,"months")},T.isDate=w,T.locale=DM,T.invalid=E,T.duration=bM,T.isMoment=n,T.weekdays=function(A,M,I){return YI(A,M,I,"weekdays")},T.parseZone=function(){return xM.apply(null,arguments).parseZone()},T.localeData=CM,T.isDuration=lM,T.monthsShort=function(A,M){return QI(A,M,"monthsShort")},T.weekdaysMin=function(A,M,I){return YI(A,M,I,"weekdaysMin")},T.defineLocale=jM,T.updateLocale=function(A,M){if(null!=M){var I,g,T=AM;null!=MM[A]&&null!=MM[A].parentLocale?MM[A].set(r(MM[A]._config,M)):(null!=(g=NM(A))&&(T=g._config),M=r(T,M),null==g&&(M.abbr=A),(I=new S(M)).parentLocale=MM[A],MM[A]=I),DM(A)}else null!=MM[A]&&(null!=MM[A].parentLocale?(MM[A]=MM[A].parentLocale,A===DM()&&DM(A)):null!=MM[A]&&delete MM[A]);return MM[A]},T.locales=function(){return o(MM)},T.weekdaysShort=function(A,M,I){return YI(A,M,I,"weekdaysShort")},T.normalizeUnits=J,T.relativeTimeRounding=function(A){return void 0===A?ZI:"function"==typeof A&&(ZI=A,!0)},T.relativeTimeThreshold=function(A,M){return void 0!==vI[A]&&(void 0===M?vI[A]:(vI[A]=M,"s"===A&&(vI.ss=M-1),!0))},T.calendarFormat=function(A,M){var I=A.diff(M,"days",!0);return I<-6?"sameElse":I<-1?"lastWeek":I<0?"lastDay":I<1?"sameDay":I<2?"nextDay":I<7?"nextWeek":"sameElse"},T.prototype=zI,T.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},T}()}).call(this,I(262)(A))},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.uploadFile=M.abortUpload=M.addUpload=M.hideAbortModal=M.showAbortModal=M.stop=M.updateProgress=M.add=M.SHOW_ABORT_MODAL=M.STOP=M.UPDATE_PROGRESS=M.ADD=void 0;var g=w(I(115)),T=w(I(138)),N=t(I(47)),D=t(I(33)),j=I(99),C=I(70),L=I(32);function t(A){if(A&&A.__esModule)return A;var M={};if(null!=A)for(var I in A)Object.prototype.hasOwnProperty.call(A,I)&&(M[I]=A[I]);return M.default=A,M}function w(A){return A&&A.__esModule?A:{default:A}}var i=M.ADD="uploads/ADD",O=M.UPDATE_PROGRESS="uploads/UPDATE_PROGRESS",y=M.STOP="uploads/STOP",u=M.SHOW_ABORT_MODAL="uploads/SHOW_ABORT_MODAL",z=M.add=function(A,M,I){return{type:i,slug:A,size:M,name:I}},E=M.updateProgress=function(A,M){return{type:O,slug:A,loaded:M}},c=M.stop=function(A){return{type:y,slug:A}},e=(M.showAbortModal=function(){return{type:u,show:!0}},M.hideAbortModal=function(){return{type:u,show:!1}}),Q={},Y=M.addUpload=function(A,M,I,g){return function(T){Q[M]=A,T(z(M,I,g))}};M.abortUpload=function(A){return function(M){var I=Q[A];I&&I.abort(),M(c(A)),M(e())}},M.uploadFile=function(A){return function(M,I){var t=I(),w=(0,j.getCurrentBucket)(t);if(w){var i=(0,C.getCurrentPrefix)(t),O=A.path||A.name;"/"==O.charAt(0)&&(O=O.substring(1));var y=O,u=encodeURIComponent(""+i+y),z=""+window.location.origin+L.minioBrowserPrefix+"/upload/"+w+"/"+u,Q=w+"-"+i+"-"+y,n=new XMLHttpRequest;n.open("PUT",z,!0),n.withCredentials=!1,T.default.getItem("token")&&n.setRequestHeader("Authorization","Bearer "+T.default.getItem("token")),n.setRequestHeader("x-amz-date",(0,g.default)().utc().format("YYYYMMDDTHHmmss")+"Z"),M(Y(n,Q,A.size,A.name)),n.onload=function(A){401!=n.status&&403!=n.status||(M(e()),M(c(Q)),M(N.set({type:"danger",message:"Unauthorized request."}))),500==n.status&&(M(e()),M(c(Q)),M(N.set({type:"danger",message:n.responseText}))),200==n.status&&(M(e()),M(c(Q)),M(N.set({type:"success",message:"File '"+y+"' uploaded successfully."})),M(D.selectPrefix(i)))},n.upload.addEventListener("error",(function(A){M(c(Q)),M(N.set({type:"danger",message:"Error occurred uploading '"+y+"'."}))})),n.upload.addEventListener("progress",(function(A){if(A.lengthComputable){var I=A.loaded;A.total;M(E(Q,I))}})),n.send(A)}else M(N.set({type:"danger",message:"Please choose a bucket before trying to upload files."}))}}},function(A,M,I){"use strict";I.r(M),M.default="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iOTNweCIgaGVpZ2h0PSIxODdweCIgdmlld0JveD0iMCAwIDkzIDE4NyIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNDguMiAoNDczMjcpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPmxvZ288L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4xODc1MDAsIC0wLjY4MzU5NCkiIGZpbGw9IiNGRkZGRkYiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05MS40OSw0Ni41NTEgQzg2Ljc4MjcwMjMsMzguNzY5OTYwOSA4Mi4wNjI2OTYsMzAuOTk2NjE3MiA3Ny4zMywyMy4yMzEgQzc0Ljg3LDE5LjIzMSA3Mi4zMywxNS4yMzEgNjkuODgsMTEuMjMxIEM2OS41NywxMC43MzEgNjkuMTgsMTAuMjkxIDY4Ljg4LDkuODMxIEM2NC4zNSwyLjkzMSA1NS40NCwtMS42NzkgNDYuNzMsMi43MDEgQzQyLjk3Mjk4MDYsNC41MTE5NDkwOCA0MC4wOTk1NzE4LDcuNzU0NDk0NTEgMzguNzUzNjQyOCwxMS43MDIwNTE2IEMzNy40MDc3MTM5LDE1LjY0OTYwODYgMzcuNzAxNzk5LDE5Ljk3MjExODYgMzkuNTcsMjMuNzAxIEM0MS4wOCwyNi42NDEgNDMuNTcsMjkuMTIxIDQ1LjkxLDMxLjU4MSBDNTMuMDMsMzkuMTQxIDYwLjM4LDQ2LjQ5MSA2Ny40NSw1NC4xMTEgQzcyLjQxNzU0OTUsNTkuNDQ5MjIyMSA3NC40NTI2NDUxLDY2Ljg4MzUwNjYgNzIuODk2NTcwNCw3NC4wMDc1MzU5IEM3MS4zNDA0OTU2LDgxLjEzMTU2NTMgNjYuMzkwOTUyLDg3LjA0MDIyMTUgNTkuNjUsODkuODIxIEM1OS40OTM4MTc2LDg5LjgzODQyIDU5LjMzNjE4MjQsODkuODM4NDIgNTkuMTgsODkuODIxIEw1OS4xOCw1NC41OTEgQzQ2LjYzODgwNTEsNjEuMDQ3ODM2MyAzNS4zOTQ0NzM1LDY5Ljc1OTkwNSAyNi4wMSw4MC4yOTEgQzExLjMyLDk2LjY3MSAyLjY0LDExNy4xNDEgMC4wMSwxMzIuMDcxIEwyMy45NiwxMTkuODIxIEMzMS45NiwxMTUuNzcxIDM5Ljg2LDExMS44MjEgNDguMTQsMTA3LjU4MSBMNDguMTQsMTc1LjkyMSBMNTkuMTQsMTg3LjEzMSBMNTkuMTQsMTAxLjgzMSBDNTkuMTQsMTAxLjgzMSA1OS4zOSwxMDEuNzExIDYwLjIyLDEwMS4yNjEgQzYzLjU0ODA1OTgsOTkuNjczODkxMSA2Ni43NzcyNjc0LDk3Ljg4NzMwNzggNjkuODksOTUuOTExIEM3Ny43MTMwODg4LDkwLjQzMDY2ODcgODIuNzQ3OTQ1Nyw4MS44MDI5MzQyIDgzLjY3MDk1NDIsNzIuMjk1OTQ3IEM4NC41OTM5NjI3LDYyLjc4ODk1OTkgODEuMzEyNzgwNiw1My4zNTM4NDI5IDc0LjY5LDQ2LjQ3MSBDNjYuNDksMzcuODkxIDU4LjI0LDI5LjM1MSA1MC4wNSwyMC43NjEgQzQ3LjY3LDE4LjI2MSA0Ny43MiwxNS4xMDEgNTAuMDUsMTIuODgxIEM1Mi4zOCwxMC42NjEgNTUuNTYsMTAuODgxIDU3Ljk2LDEzLjMzMSBMNjEuMzgsMTYuNzgxIEM2NC4xLDE5LjY4MSA2Ni43OSwyMi42MTEgNjkuNTMsMjUuNDgxIEM3Ni40NTQ3MTQ5LDMyLjczODk2MjkgODMuMzk0NzMwMywzOS45ODIzMTIzIDkwLjM1LDQ3LjIxMSBDOTAuNyw0Ny41NzEgOTEuMTIsNDcuODcxIDkxLjUsNDguMjExIEw5MS45Myw0Ny45NTEgQzkxLjgzNTE5NDUsNDcuNDY5NTkwMiA5MS42ODc2Mzc2LDQ3LjAwMDA5MTEgOTEuNDksNDYuNTUxIFogTTQ4LjExLDk0LjkzMSBDNDcuOTg4MzIxNyw5NS41MDIyNTY4IDQ3LjYyMzAwNjUsOTUuOTkxNzc5MSA0Ny4xMSw5Ni4yNzEgQzQyLjcyLDk4LjYwMSAzOC4yOSwxMDAuODcxIDMzLjg3LDEwMy4xNDEgTDE3Ljc2LDExMS40MDEgQzI0Ljc3MTIwMyw5Ni43NDM1MDcxIDM1LjExMzI4NTMsODMuOTI4OTEzOCA0Ny45Niw3My45ODEgQzQ4LjA4LDc0LjIyMSA0OC4xNiw3NC4zMDEgNDguMTYsNzQuMzgxIEM0OC4xNSw4MS4yMzEgNDguMTcsODguMDgxIDQ4LjExLDk0LjkzMSBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="},function(A,M){M.f={}.propertyIsEnumerable},function(A,M){A.exports=function(A,M){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:M}}},function(A,M,I){var g=I(272);A.exports=function(A,M,I){if(g(A),void 0===M)return A;switch(I){case 1:return function(I){return A.call(M,I)};case 2:return function(I,g){return A.call(M,I,g)};case 3:return function(I,g,T){return A.call(M,I,g,T)}}return function(){return A.apply(M,arguments)}}},function(A,M){A.exports={}},function(A,M,I){"use strict";A.exports=I(553)},function(A,M,I){A.exports=I(658)},function(A,M,I){var g=I(38),T=I(13),N=I(80);A.exports=function(A){return function(M,I,D){var j,C=g(M),L=T(C.length),t=N(D,L);if(A&&I!=I){for(;L>t;)if((j=C[t++])!=j)return!0}else for(;L>t;t++)if((A||t in C)&&C[t]===I)return A||t||0;return!A&&-1}}},function(A,M){M.f=Object.getOwnPropertySymbols},function(A,M,I){var g=I(44);A.exports=Array.isArray||function(A){return"Array"==g(A)}},function(A,M,I){var g=I(45),T=I(54);A.exports=function(A){return function(M,I){var N,D,j=String(T(M)),C=g(I),L=j.length;return C<0||C>=L?A?"":void 0:(N=j.charCodeAt(C))<55296||N>56319||C+1===L||(D=j.charCodeAt(C+1))<56320||D>57343?A?j.charAt(C):N:A?j.slice(C,C+2):D-56320+(N-55296<<10)+65536}}},function(A,M,I){var g=I(9),T=I(44),N=I(12)("match");A.exports=function(A){var M;return g(A)&&(void 0!==(M=A[N])?!!M:"RegExp"==T(A))}},function(A,M,I){var g=I(12)("iterator"),T=!1;try{var N=[7][g]();N.return=function(){T=!0},Array.from(N,(function(){throw 2}))}catch(A){}A.exports=function(A,M){if(!M&&!T)return!1;var I=!1;try{var N=[7],D=N[g]();D.next=function(){return{done:I=!0}},N[g]=function(){return D},A(N)}catch(A){}return I}},function(A,M,I){"use strict";var g=I(95),T=RegExp.prototype.exec;A.exports=function(A,M){var I=A.exec;if("function"==typeof I){var N=I.call(A,M);if("object"!=typeof N)throw new TypeError("RegExp exec method returned something other than an Object or null");return N}if("RegExp"!==g(A))throw new TypeError("RegExp#exec called on incompatible receiver");return T.call(A,M)}},function(A,M,I){"use strict";I(243);var g=I(30),T=I(29),N=I(8),D=I(54),j=I(12),C=I(176),L=j("species"),t=!N((function(){var A=/./;return A.exec=function(){var A=[];return A.groups={a:"7"},A},"7"!=="".replace(A,"$")})),w=function(){var A=/(?:)/,M=A.exec;A.exec=function(){return M.apply(this,arguments)};var I="ab".split(A);return 2===I.length&&"a"===I[0]&&"b"===I[1]}();A.exports=function(A,M,I){var i=j(A),O=!N((function(){var M={};return M[i]=function(){return 7},7!=""[A](M)})),y=O?!N((function(){var M=!1,I=/a/;return I.exec=function(){return M=!0,null},"split"===A&&(I.constructor={},I.constructor[L]=function(){return I}),I[i](""),!M})):void 0;if(!O||!y||"replace"===A&&!t||"split"===A&&!w){var u=/./[i],z=I(D,i,""[A],(function(A,M,I,g,T){return M.exec===C?O&&!T?{done:!0,value:u.call(M,I,g)}:{done:!0,value:A.call(I,M,g)}:{done:!1}})),E=z[0],c=z[1];g(String.prototype,A,E),T(RegExp.prototype,i,2==M?function(A,M){return c.call(A,this,M)}:function(A){return c.call(A,this)})}}},function(A,M,I){var g=I(6).navigator;A.exports=g&&g.userAgent||""},function(A,M,I){"use strict";var g=I(6),T=I(3),N=I(30),D=I(86),j=I(68),C=I(85),L=I(84),t=I(9),w=I(8),i=I(129),O=I(94),y=I(162);A.exports=function(A,M,I,u,z,E){var c=g[A],e=c,Q=z?"set":"add",Y=e&&e.prototype,n={},k=function(A){var M=Y[A];N(Y,A,"delete"==A||"has"==A?function(A){return!(E&&!t(A))&&M.call(this,0===A?0:A)}:"get"==A?function(A){return E&&!t(A)?void 0:M.call(this,0===A?0:A)}:"add"==A?function(A){return M.call(this,0===A?0:A),this}:function(A,I){return M.call(this,0===A?0:A,I),this})};if("function"==typeof e&&(E||Y.forEach&&!w((function(){(new e).entries().next()})))){var B=new e,o=B[Q](E?{}:-0,1)!=B,x=w((function(){B.has(1)})),a=i((function(A){new e(A)})),U=!E&&w((function(){for(var A=new e,M=5;M--;)A[Q](M,M);return!A.has(-0)}));a||((e=M((function(M,I){L(M,e,A);var g=y(new c,M,e);return null!=I&&C(I,z,g[Q],g),g}))).prototype=Y,Y.constructor=e),(x||U)&&(k("delete"),k("has"),z&&k("get")),(U||o)&&k(Q),E&&Y.clear&&delete Y.clear}else e=u.getConstructor(M,A,z,Q),D(e.prototype,I),j.NEED=!0;return O(e,A),n[A]=e,T(T.G+T.W+T.F*(e!=c),n),E||u.setStrong(e,A,z),e}},function(A,M,I){for(var g,T=I(6),N=I(29),D=I(78),j=D("typed_array"),C=D("view"),L=!(!T.ArrayBuffer||!T.DataView),t=L,w=0,i="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");w<9;)(g=T[i[w++]])?(N(g.prototype,j,!0),N(g.prototype,C,!0)):t=!1;A.exports={ABV:L,CONSTR:t,TYPED:j,VIEW:C}},function(A,M,I){"use strict";A.exports=I(67)||!I(8)((function(){var A=Math.random();__defineSetter__.call(null,A,(function(){})),delete I(6)[A]}))},function(A,M,I){"use strict";var g=I(3);A.exports=function(A){g(g.S,A,{of:function(){for(var A=arguments.length,M=new Array(A);A--;)M[A]=arguments[A];return new this(M)}})}},function(A,M,I){"use strict";var g=I(3),T=I(22),N=I(43),D=I(85);A.exports=function(A){g(g.S,A,{from:function(A){var M,I,g,j,C=arguments[1];return T(this),(M=void 0!==C)&&T(C),null==A?new this:(I=[],M?(g=0,j=N(C,arguments[2],2),D(A,!1,(function(A){I.push(j(A,g++))}))):D(A,!1,I.push,I),new this(I))}})}},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.MemoryStorage=M.CookieStorage=M.isSupported=M.storage=void 0;var g=D(I(584)),T=D(I(263)),N=D(I(586));function D(A){return A&&A.__esModule?A:{default:A}}var j=null;(0,g.default)("localStorage")?M.storage=j=window.localStorage:(0,g.default)("sessionStorage")?M.storage=j=window.sessionStorage:(0,g.default)("cookieStorage")?M.storage=j=new T.default:M.storage=j=new N.default,M.default=j,M.storage=j,M.isSupported=g.default,M.CookieStorage=T.default,M.MemoryStorage=N.default},function(A,M){A.exports=function(A){if(null==A)throw TypeError("Can't call method on "+A);return A}},function(A,M){A.exports=!0},function(A,M,I){var g=I(189),T=Math.min;A.exports=function(A){return A>0?T(g(A),9007199254740991):0}},function(A,M){var I=0,g=Math.random();A.exports=function(A){return"Symbol(".concat(void 0===A?"":A,")_",(++I+g).toString(36))}},function(A,M,I){var g=I(63).f,T=I(72),N=I(50)("toStringTag");A.exports=function(A,M,I){A&&!T(A=I?A:A.prototype,N)&&g(A,N,{configurable:!0,value:M})}},function(A,M,I){var g=I(142)("meta"),T=I(57),N=I(72),D=I(63).f,j=0,C=Object.isExtensible||function(){return!0},L=!I(73)((function(){return C(Object.preventExtensions({}))})),t=function(A){D(A,g,{value:{i:"O"+ ++j,w:{}}})},w=A.exports={KEY:g,NEED:!1,fastKey:function(A,M){if(!T(A))return"symbol"==typeof A?A:("string"==typeof A?"S":"P")+A;if(!N(A,g)){if(!C(A))return"F";if(!M)return"E";t(A)}return A[g].i},getWeak:function(A,M){if(!N(A,g)){if(!C(A))return!0;if(!M)return!1;t(A)}return A[g].w},onFreeze:function(A){return L&&w.NEED&&C(A)&&!N(A,g)&&t(A),A}}},function(A,M,I){"use strict";Object.defineProperty(M,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A},T=D(I(1)),N=D(I(91));function D(A){return A&&A.__esModule?A:{default:A}}M.default=(0,N.default)((function(A,M,I,N,D){var j=A[M],C=void 0===j?"undefined":g(j);return T.default.isValidElement(j)?new Error("Invalid "+N+" `"+D+"` of type ReactElement supplied to `"+I+"`, expected a ReactComponent or a DOMElement. You can usually obtain a ReactComponent or DOMElement from a ReactElement by attaching a ref to it."):"object"===C&&"function"==typeof j.render||1===j.nodeType?null:new Error("Invalid "+N+" `"+D+"` of value `"+j+"` supplied to `"+I+"`, expected a ReactComponent or a DOMElement.")})),A.exports=M.default},function(A,M,I){"use strict";M.__esModule=!0,M.default=function(A){return A===A.window?A:9===A.nodeType&&(A.defaultView||A.parentWindow)},A.exports=M.default},function(A,M,I){"use strict";M.__esModule=!0,M.default=function(A,M){return A="function"==typeof A?A():A,N.default.findDOMNode(A)||M};var g,T=I(10),N=(g=T)&&g.__esModule?g:{default:g};A.exports=M.default},function(A,M,I){(function(){var I=this,g=I.humanize,T={};A.exports&&(M=A.exports=T),M.humanize=T,T.noConflict=function(){return I.humanize=g,this},T.pad=function(A,M,I,g){if(A+="",I?I.length>1&&(I=I.charAt(0)):I=" ","right"===(g=void 0===g?"left":"right"))for(;A.length4&&A<21?"th":{1:"st",2:"nd",3:"rd"}[A%10]||"th"},w:function(){return I.getDay()},z:function(){return(t.L()?D[t.n()]:N[t.n()])+t.j()-1},W:function(){var A=t.z()-t.N()+1.5;return T.pad(1+Math.floor(Math.abs(A)/7)+(A%7>3.5?1:0),2,"0")},F:function(){return L[I.getMonth()]},m:function(){return T.pad(t.n(),2,"0")},M:function(){return t.F().slice(0,3)},n:function(){return I.getMonth()+1},t:function(){return new Date(t.Y(),t.n(),0).getDate()},L:function(){return 1===new Date(t.Y(),1,29).getMonth()?1:0},o:function(){var A=t.n(),M=t.W();return t.Y()+(12===A&&M<9?-1:1===A&&M>9)},Y:function(){return I.getFullYear()},y:function(){return String(t.Y()).slice(-2)},a:function(){return I.getHours()>11?"pm":"am"},A:function(){return t.a().toUpperCase()},B:function(){var A=I.getTime()/1e3,M=A%86400+3600;M<0&&(M+=86400);var g=M/86.4%1e3;return A<0?Math.ceil(g):Math.floor(g)},g:function(){return t.G()%12||12},G:function(){return I.getHours()},h:function(){return T.pad(t.g(),2,"0")},H:function(){return T.pad(t.G(),2,"0")},i:function(){return T.pad(I.getMinutes(),2,"0")},s:function(){return T.pad(I.getSeconds(),2,"0")},u:function(){return T.pad(1e3*I.getMilliseconds(),6,"0")},O:function(){var A=I.getTimezoneOffset(),M=Math.abs(A);return(A>0?"-":"+")+T.pad(100*Math.floor(M/60)+M%60,4,"0")},P:function(){var A=t.O();return A.substr(0,3)+":"+A.substr(3,2)},Z:function(){return 60*-I.getTimezoneOffset()},c:function(){return"Y-m-d\\TH:i:sP".replace(g,j)},r:function(){return"D, d M Y H:i:s O".replace(g,j)},U:function(){return I.getTime()/1e3||0}};return A.replace(g,j)},T.numberFormat=function(A,M,I,g){M=isNaN(M)?2:Math.abs(M),I=void 0===I?".":I,g=void 0===g?",":g;var T=A<0?"-":"";A=Math.abs(+A||0);var N=parseInt(A.toFixed(M),10)+"",D=N.length>3?N.length%3:0;return T+(D?N.substr(0,D)+g:"")+N.substr(D).replace(/(\d{3})(?=\d)/g,"$1"+g)+(M?I+Math.abs(A-N).toFixed(M).slice(2):"")},T.naturalDay=function(A,M){A=void 0===A?T.time():A,M=void 0===M?"Y-m-d":M;var I=new Date,g=new Date(I.getFullYear(),I.getMonth(),I.getDate()).getTime()/1e3;return A=g-86400?"yesterday":A>=g&&A=g+86400&&A-2)return(I>=0?"just ":"")+"now";if(I<60&&I>-60)return I>=0?Math.floor(I)+" seconds ago":"in "+Math.floor(-I)+" seconds";if(I<120&&I>-120)return I>=0?"about a minute ago":"in about a minute";if(I<3600&&I>-3600)return I>=0?Math.floor(I/60)+" minutes ago":"in "+Math.floor(-I/60)+" minutes";if(I<7200&&I>-7200)return I>=0?"about an hour ago":"in about an hour";if(I<86400&&I>-86400)return I>=0?Math.floor(I/3600)+" hours ago":"in "+Math.floor(-I/3600)+" hours";if(I<172800&&I>-172800)return I>=0?"1 day ago":"in 1 day";if(I<2505600&&I>-2505600)return I>=0?Math.floor(I/86400)+" days ago":"in "+Math.floor(-I/86400)+" days";if(I<5184e3&&I>-5184e3)return I>=0?"about a month ago":"in about a month";var g=parseInt(T.date("Y",M),10),N=parseInt(T.date("Y",A),10),D=12*g+parseInt(T.date("n",M),10)-(12*N+parseInt(T.date("n",A),10));if(D<12&&D>-12)return D>=0?D+" months ago":"in "+-D+" months";var j=g-N;return j<2&&j>-2?j>=0?"a year ago":"in a year":j>=0?j+" years ago":"in "+-j+" years"},T.ordinal=function(A){A=parseInt(A,10);var M=(A=isNaN(A)?0:A)<0?"-":"",I=(A=Math.abs(A))%100;return M+A+(I>4&&I<21?"th":{1:"st",2:"nd",3:"rd"}[A%10]||"th")},T.filesize=function(A,M,I,g,N,D){return A<=0?"0 bytes":(A<(M=void 0===M?1024:M)&&void 0===I&&(I=0),void 0===D&&(D=" "),T.intword(A,["bytes","KB","MB","GB","TB","PB"],M,I,g,N,D))},T.intword=function(A,M,I,g,N,D,j){var C,L;L=(M=M||["","K","M","B","T"]).length-1,I=I||1e3,g=isNaN(g)?2:Math.abs(g),N=N||".",D=D||",",j=j||"";for(var t=0;t"+(A=(A=(A=(A=(A=A.replace(/^([\n|\r]*)/,"")).replace(/([\n|\r]*)$/,"")).replace(/(\r\n|\n|\r)/g,"\n")).replace(/(\n{2,})/g,"
")).replace(/\n/g," "))+"
"},T.nl2br=function(A){return A.replace(/(\r\n|\n|\r)/g," ")},T.truncatechars=function(A,M){return A.length<=M?A:A.substr(0,M)+"…"},T.truncatewords=function(A,M){var I=A.split(" ");return I.lengthM?I.splice(M,I.length-M,g):I.push(g),w({action:"PUSH",location:g,index:M,entries:I})}}))},replace:function(A,M){var g=u(A,M,i(),Q.location);t.confirmTransitionTo(g,"REPLACE",I,(function(A){A&&(Q.entries[Q.index]=g,w({action:"REPLACE",location:g}))}))},go:e,goBack:function(){e(-1)},goForward:function(){e(1)},canGo:function(A){var M=Q.index+A;return M>=0&&M0;(N>>>=1)&&(M+=M))1&N&&(I+=M);return I}},function(A,M){A.exports=Math.sign||function(A){return 0==(A=+A)||A!=A?A:A<0?-1:1}},function(A,M){var I=Math.expm1;A.exports=!I||I(10)>22025.465794806718||I(10)<22025.465794806718||-2e-17!=I(-2e-17)?function(A){return 0==(A=+A)?A:A>-1e-6&&A<1e-6?A+A*A/2:Math.exp(A)-1}:I},function(A,M,I){"use strict";var g=I(67),T=I(3),N=I(30),D=I(29),j=I(97),C=I(167),L=I(94),t=I(40),w=I(12)("iterator"),i=!([].keys&&"next"in[].keys()),O=function(){return this};A.exports=function(A,M,I,y,u,z,E){C(I,M,y);var c,e,Q,Y=function(A){if(!i&&A in o)return o[A];switch(A){case"keys":case"values":return function(){return new I(this,A)}}return function(){return new I(this,A)}},n=M+" Iterator",k="values"==u,B=!1,o=A.prototype,x=o[w]||o["@@iterator"]||u&&o[u],a=x||Y(u),U=u?k?Y("entries"):a:void 0,r="Array"==M&&o.entries||x;if(r&&(Q=t(r.call(new A)))!==Object.prototype&&Q.next&&(L(Q,n,!0),g||"function"==typeof Q[w]||D(Q,w,O)),k&&x&&"values"!==x.name&&(B=!0,a=function(){return x.call(this)}),g&&!E||!i&&!B&&o[w]||D(o,w,a),j[M]=a,j[n]=O,u)if(c={values:k?a:Y("values"),keys:z?a:Y("keys"),entries:U},E)for(e in c)e in o||N(o,e,c[e]);else T(T.P+T.F*(i||B),M,c);return c}},function(A,M,I){"use strict";var g=I(81),T=I(77),N=I(94),D={};I(29)(D,I(12)("iterator"),(function(){return this})),A.exports=function(A,M,I){A.prototype=g(D,{next:T(1,I)}),N(A,M+" Iterator")}},function(A,M,I){var g=I(128),T=I(54);A.exports=function(A,M,I){if(g(M))throw TypeError("String#"+I+" doesn't accept regex!");return String(T(A))}},function(A,M,I){var g=I(12)("match");A.exports=function(A){var M=/./;try{"/./"[A](M)}catch(I){try{return M[g]=!1,!"/./"[A](M)}catch(A){}}return!0}},function(A,M,I){var g=I(97),T=I(12)("iterator"),N=Array.prototype;A.exports=function(A){return void 0!==A&&(g.Array===A||N[T]===A)}},function(A,M,I){"use strict";var g=I(17),T=I(77);A.exports=function(A,M,I){M in A?g.f(A,M,T(0,I)):A[M]=I}},function(A,M,I){var g=I(95),T=I(12)("iterator"),N=I(97);A.exports=I(42).getIteratorMethod=function(A){if(null!=A)return A[T]||A["@@iterator"]||N[g(A)]}},function(A,M,I){var g=I(403);A.exports=function(A,M){return new(g(A))(M)}},function(A,M,I){"use strict";var g=I(18),T=I(80),N=I(13);A.exports=function(A){for(var M=g(this),I=N(M.length),D=arguments.length,j=T(D>1?arguments[1]:void 0,I),C=D>2?arguments[2]:void 0,L=void 0===C?I:T(C,I);L>j;)M[j++]=A;return M}},function(A,M,I){"use strict";var g=I(69),T=I(242),N=I(97),D=I(38);A.exports=I(166)(Array,"Array",(function(A,M){this._t=D(A),this._i=0,this._k=M}),(function(){var A=this._t,M=this._k,I=this._i++;return!A||I>=A.length?(this._t=void 0,T(1)):T(0,"keys"==M?I:"values"==M?A[I]:[I,A[I]])}),"values"),N.Arguments=N.Array,g("keys"),g("values"),g("entries")},function(A,M,I){"use strict";var g,T,N=I(110),D=RegExp.prototype.exec,j=String.prototype.replace,C=D,L=(g=/a/,T=/b*/g,D.call(g,"a"),D.call(T,"a"),0!==g.lastIndex||0!==T.lastIndex),t=void 0!==/()??/.exec("")[1];(L||t)&&(C=function(A){var M,I,g,T,C=this;return t&&(I=new RegExp("^"+C.source+"$(?!\\s)",N.call(C))),L&&(M=C.lastIndex),g=D.call(C,A),L&&g&&(C.lastIndex=C.global?g.index+g[0].length:M),t&&g&&g.length>1&&j.call(g[0],I,(function(){for(T=1;TI;)M.push(arguments[I++]);return E[++z]=function(){j("function"==typeof A?A:Function(A),M)},g(z),z},O=function(A){delete E[A]},"process"==I(44)(w)?g=function(A){w.nextTick(D(c,A,1))}:u&&u.now?g=function(A){u.now(D(c,A,1))}:y?(N=(T=new y).port2,T.port1.onmessage=e,g=D(N.postMessage,N,1)):t.addEventListener&&"function"==typeof postMessage&&!t.importScripts?(g=function(A){t.postMessage(A+"","*")},t.addEventListener("message",e,!1)):g="onreadystatechange"in L("script")?function(A){C.appendChild(L("script")).onreadystatechange=function(){C.removeChild(this),c.call(A)}}:function(A){setTimeout(D(c,A,1),0)}),A.exports={set:i,clear:O}},function(A,M,I){var g=I(6),T=I(178).set,N=g.MutationObserver||g.WebKitMutationObserver,D=g.process,j=g.Promise,C="process"==I(44)(D);A.exports=function(){var A,M,I,L=function(){var g,T;for(C&&(g=D.domain)&&g.exit();A;){T=A.fn,A=A.next;try{T()}catch(g){throw A?I():M=void 0,g}}M=void 0,g&&g.enter()};if(C)I=function(){D.nextTick(L)};else if(!N||g.navigator&&g.navigator.standalone)if(j&&j.resolve){var t=j.resolve(void 0);I=function(){t.then(L)}}else I=function(){T.call(g,L)};else{var w=!0,i=document.createTextNode("");new N(L).observe(i,{characterData:!0}),I=function(){i.data=w=!w}}return function(g){var T={fn:g,next:void 0};M&&(M.next=T),A||(A=T,I()),M=T}}},function(A,M,I){"use strict";var g=I(22);function T(A){var M,I;this.promise=new A((function(A,g){if(void 0!==M||void 0!==I)throw TypeError("Bad Promise constructor");M=A,I=g})),this.resolve=g(M),this.reject=g(I)}A.exports.f=function(A){return new T(A)}},function(A,M,I){"use strict";var g=I(6),T=I(14),N=I(67),D=I(134),j=I(29),C=I(86),L=I(8),t=I(84),w=I(45),i=I(13),O=I(252),y=I(82).f,u=I(17).f,z=I(174),E=I(94),c=g.ArrayBuffer,e=g.DataView,Q=g.Math,Y=g.RangeError,n=g.Infinity,k=c,B=Q.abs,o=Q.pow,x=Q.floor,a=Q.log,U=Q.LN2,r=T?"_b":"buffer",S=T?"_l":"byteLength",s=T?"_o":"byteOffset";function l(A,M,I){var g,T,N,D=new Array(I),j=8*I-M-1,C=(1<>1,t=23===M?o(2,-24)-o(2,-77):0,w=0,i=A<0||0===A&&1/A<0?1:0;for((A=B(A))!=A||A===n?(T=A!=A?1:0,g=C):(g=x(a(A)/U),A*(N=o(2,-g))<1&&(g--,N*=2),(A+=g+L>=1?t/N:t*o(2,1-L))*N>=2&&(g++,N/=2),g+L>=C?(T=0,g=C):g+L>=1?(T=(A*N-1)*o(2,M),g+=L):(T=A*o(2,L-1)*o(2,M),g=0));M>=8;D[w++]=255&T,T/=256,M-=8);for(g=g<0;D[w++]=255&g,g/=256,j-=8);return D[--w]|=128*i,D}function h(A,M,I){var g,T=8*I-M-1,N=(1<>1,j=T-7,C=I-1,L=A[C--],t=127&L;for(L>>=7;j>0;t=256*t+A[C],C--,j-=8);for(g=t&(1<<-j)-1,t>>=-j,j+=M;j>0;g=256*g+A[C],C--,j-=8);if(0===t)t=1-D;else{if(t===N)return g?NaN:L?-n:n;g+=o(2,M),t-=D}return(L?-1:1)*g*o(2,t-M)}function m(A){return A[3]<<24|A[2]<<16|A[1]<<8|A[0]}function F(A){return[255&A]}function d(A){return[255&A,A>>8&255]}function G(A){return[255&A,A>>8&255,A>>16&255,A>>24&255]}function f(A){return l(A,52,8)}function p(A){return l(A,23,4)}function H(A,M,I){u(A.prototype,M,{get:function(){return this[I]}})}function J(A,M,I,g){var T=O(+I);if(T+M>A[S])throw Y("Wrong index!");var N=A[r]._b,D=T+A[s],j=N.slice(D,D+M);return g?j:j.reverse()}function b(A,M,I,g,T,N){var D=O(+I);if(D+M>A[S])throw Y("Wrong index!");for(var j=A[r]._b,C=D+A[s],L=g(+T),t=0;tv;)(R=Z[v++])in c||j(c,R,k[R]);N||(W.constructor=c)}var P=new e(new c(2)),K=e.prototype.setInt8;P.setInt8(0,2147483648),P.setInt8(1,2147483649),!P.getInt8(0)&&P.getInt8(1)||C(e.prototype,{setInt8:function(A,M){K.call(this,A,M<<24>>24)},setUint8:function(A,M){K.call(this,A,M<<24>>24)}},!0)}else c=function(A){t(this,c,"ArrayBuffer");var M=O(A);this._b=z.call(new Array(M),0),this[S]=M},e=function(A,M,I){t(this,e,"DataView"),t(A,c,"DataView");var g=A[S],T=w(M);if(T<0||T>g)throw Y("Wrong offset!");if(T+(I=void 0===I?g-T:i(I))>g)throw Y("Wrong length!");this[r]=A,this[s]=T,this[S]=I},T&&(H(c,"byteLength","_l"),H(e,"buffer","_b"),H(e,"byteLength","_l"),H(e,"byteOffset","_o")),C(e.prototype,{getInt8:function(A){return J(this,1,A)[0]<<24>>24},getUint8:function(A){return J(this,1,A)[0]},getInt16:function(A){var M=J(this,2,A,arguments[1]);return(M[1]<<8|M[0])<<16>>16},getUint16:function(A){var M=J(this,2,A,arguments[1]);return M[1]<<8|M[0]},getInt32:function(A){return m(J(this,4,A,arguments[1]))},getUint32:function(A){return m(J(this,4,A,arguments[1]))>>>0},getFloat32:function(A){return h(J(this,4,A,arguments[1]),23,4)},getFloat64:function(A){return h(J(this,8,A,arguments[1]),52,8)},setInt8:function(A,M){b(this,1,A,F,M)},setUint8:function(A,M){b(this,1,A,F,M)},setInt16:function(A,M){b(this,2,A,d,M,arguments[2])},setUint16:function(A,M){b(this,2,A,d,M,arguments[2])},setInt32:function(A,M){b(this,4,A,G,M,arguments[2])},setUint32:function(A,M){b(this,4,A,G,M,arguments[2])},setFloat32:function(A,M){b(this,4,A,p,M,arguments[2])},setFloat64:function(A,M){b(this,8,A,f,M,arguments[2])}});E(c,"ArrayBuffer"),E(e,"DataView"),j(e.prototype,D.VIEW,!0),M.ArrayBuffer=c,M.DataView=e},function(A,M,I){"use strict";var g,T=function(){return void 0===g&&(g=Boolean(window&&document&&document.all&&!window.atob)),g},N=function(){var A={};return function(M){if(void 0===A[M]){var I=document.querySelector(M);if(window.HTMLIFrameElement&&I instanceof window.HTMLIFrameElement)try{I=I.contentDocument.head}catch(A){I=null}A[M]=I}return A[M]}}(),D=[];function j(A){for(var M=-1,I=0;I1&&void 0!==arguments[1]?arguments[1]:g,I=null,N=null;return function(){return T(M,I,arguments)||(N=A.apply(null,arguments)),I=arguments,N}}function D(A){var M=Array.isArray(A[0])?A[0]:A;if(!M.every((function(A){return"function"==typeof A}))){var I=M.map((function(A){return typeof A})).join(", ");throw new Error("Selector creators expect all input-selectors to be functions, instead received the following types: ["+I+"]")}return M}function j(A){for(var M=arguments.length,I=Array(M>1?M-1:0),g=1;g1&&void 0!==arguments[1]?arguments[1]:C;if("object"!=typeof A)throw new Error("createStructuredSelector expects first argument to be an object where each property is a selector, instead received a "+typeof A);var I=Object.keys(A);return M(I.map((function(M){return A[M]})),(function(){for(var A=arguments.length,M=Array(A),g=0;g0?g:I)(A)}},function(A,M,I){A.exports=I(74)},function(A,M,I){var g=I(88),T=I(631),N=I(194),D=I(192)("IE_PROTO"),j=function(){},C=function(){var A,M=I(270)("iframe"),g=N.length;for(M.style.display="none",I(634).appendChild(M),M.src="javascript:",(A=M.contentWindow.document).open(),A.write("