diff --git a/.github/workflows/base_node_binaries.yml b/.github/workflows/base_node_binaries.yml index 0da2411273..b41ee1f406 100644 --- a/.github/workflows/base_node_binaries.yml +++ b/.github/workflows/base_node_binaries.yml @@ -132,6 +132,12 @@ jobs: target key: ${{ runner.os }}-${{ matrix.os }}-${{ matrix.target_cpu }}-${{ matrix.features }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: Compile NPM + run: | + cd applications/launchpad/gui-vue + npm install + npm run build + - name: Build binaries env: RUSTFLAGS: "-C target_cpu=${{ matrix.target_cpu }}" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9d9961d7e8..8b984d23ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ name: CI env: CARGO_HTTP_MULTIPLEXING: false PROTOC: protoc - toolchain: nightly-2021-09-18 + toolchain: nightly-2021-11-20 jobs: clippy: @@ -23,17 +23,25 @@ jobs: run: | sudo apt-get update && \ sudo apt-get -y install \ - libssl-dev \ - openssl \ - libsqlite3-dev \ - pkg-config \ - git \ - cmake \ - zip \ - libc++-dev \ - libc++abi-dev \ - libprotobuf-dev \ - protobuf-compiler + libssl-dev \ + openssl \ + libsqlite3-dev \ + pkg-config \ + git \ + cmake \ + zip \ + libc++-dev \ + libc++abi-dev \ + libprotobuf-dev \ + protobuf-compiler \ + libwebkit2gtk-4.0-dev \ + build-essential \ + curl \ + wget \ + libgtk-3-dev \ + libappindicator3-dev \ + patchelf \ + librsvg2-dev - name: checkout uses: actions/checkout@v2 - name: toolchain @@ -55,6 +63,11 @@ jobs: with: command: fmt args: --all -- --check + - name: Compile NPM + run: | + cd applications/launchpad/gui-vue + npm install + npm run build - name: Clippy check uses: actions-rs/cargo@v1 with: @@ -78,17 +91,23 @@ jobs: run: | sudo apt-get update && \ sudo apt-get -y install \ - libssl-dev \ - openssl \ - libsqlite3-dev \ - pkg-config \ - git \ - cmake \ - zip \ - libc++-dev \ - libc++abi-dev \ - libprotobuf-dev \ - protobuf-compiler + build-essential \ + libgtk-3-dev \ + libwebkit2gtk-4.0-dev \ + libsoup2.4-dev \ + curl \ + wget \ + libappindicator3-dev \ + patchelf \ + librsvg2-dev \ + libprotobuf-dev \ + protobuf-compiler + + - name: Compile NPM + run: | + cd applications/launchpad/gui-vue + npm install + npm run build - name: toolchain uses: actions-rs/toolchain@v1 diff --git a/Cargo.lock b/Cargo.lock index cba0dcbdba..9243799a7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "aead" version = "0.3.2" @@ -173,12 +179,37 @@ dependencies = [ "nodrop", ] +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + [[package]] name = "arrayvec" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +[[package]] +name = "async-io" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" +dependencies = [ + "concurrent-queue", + "futures-lite", + "libc", + "log", + "once_cell", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "winapi 0.3.9", +] + [[package]] name = "async-stream" version = "0.3.2" @@ -211,6 +242,48 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "atk" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba" +dependencies = [ + "atk-sys", + "bitflags 1.3.2", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea" +dependencies = [ + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "system-deps 3.2.0", +] + +[[package]] +name = "attohttpc" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8bda305457262b339322106c776e3fd21df860018e566eb6a5b1aa4b6ae02d" +dependencies = [ + "flate2", + "http", + "log", + "native-tls", + "openssl", + "serde 1.0.130", + "serde_json", + "serde_urlencoded 0.6.1", + "url 2.2.2", + "wildmatch", +] + [[package]] name = "atty" version = "0.2.14" @@ -308,7 +381,7 @@ dependencies = [ "bitflags 1.3.2", "cexpr", "clang-sys", - "clap", + "clap 2.33.3", "env_logger 0.8.4", "lazy_static 1.4.0", "lazycell", @@ -357,6 +430,38 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "blake2b_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "526c210b4520e416420759af363083471656e819a75e831b8d2c9d5a584f2413" +dependencies = [ + "arrayref", + "arrayvec 0.7.2", + "cc", + "cfg-if 1.0.0", + "constant_time_eq", + "digest 0.9.0", + "rayon", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.7.3" @@ -424,6 +529,47 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "bollard" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92fed694fd5a7468c971538351c61b9c115f1ae6ed411cd2800f0f299403a4b" +dependencies = [ + "base64 0.13.0", + "bollard-stubs", + "bytes 1.1.0", + "chrono", + "dirs-next 2.0.0", + "futures-core", + "futures-util", + "hex", + "http", + "hyper", + "hyperlocal", + "log", + "pin-project 1.0.8", + "serde 1.0.130", + "serde_derive", + "serde_json", + "serde_urlencoded 0.7.0", + "thiserror", + "tokio", + "tokio-util", + "url 2.2.2", + "winapi 0.3.9", +] + +[[package]] +name = "bollard-stubs" +version = "1.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2f2e73fffe9455141e170fb9c1feb0ac521ec7e7dcd47a7cab72a658490fb8" +dependencies = [ + "chrono", + "serde 1.0.130", + "serde_with", +] + [[package]] name = "bs58" version = "0.4.0" @@ -497,12 +643,63 @@ dependencies = [ "serde 1.0.130", ] +[[package]] +name = "bzip2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "c_linked_list" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" +[[package]] +name = "cache-padded" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" + +[[package]] +name = "cairo-rs" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b5725979db0c586d98abad2193cdb612dd40ef95cd26bd99851bf93b3cb482" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b448b876970834fda82ba3aeaccadbd760206b75388fc5c1b02f1e343b697570" +dependencies = [ + "glib-sys 0.14.0", + "libc", + "system-deps 3.2.0", +] + [[package]] name = "case" version = "0.1.0" @@ -541,7 +738,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "744fcfb4c9f64d649756fd972afec5120641eaa8b2ff86a4ae981f68648780b8" dependencies = [ - "clap", + "clap 2.33.3", "heck", "indexmap", "log", @@ -559,6 +756,9 @@ name = "cc" version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +dependencies = [ + "jobserver", +] [[package]] name = "cexpr" @@ -569,6 +769,16 @@ dependencies = [ "nom 5.1.2", ] +[[package]] +name = "cfb" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca453e8624711b2f0f4eb47076a318feda166252a827ee25d067b43de83dcba0" +dependencies = [ + "byteorder", + "uuid", +] + [[package]] name = "cfb-mode" version = "0.6.0" @@ -578,6 +788,15 @@ dependencies = [ "cipher 0.2.5", ] +[[package]] +name = "cfg-expr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -590,6 +809,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chacha20" version = "0.7.3" @@ -690,11 +915,43 @@ dependencies = [ "atty", "bitflags 1.3.2", "strsim 0.8.0", - "textwrap", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_derive", + "indexmap", + "lazy_static 1.4.0", + "os_str_bytes", + "strsim 0.10.0", + "termcolor", + "textwrap 0.12.1", "unicode-width", "vec_map", ] +[[package]] +name = "clap_derive" +version = "3.0.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85946d4034625800196413478a1c6d3a57c12785e1f3970e590e0137dfa07342" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "clear_on_drop" version = "0.2.4" @@ -724,12 +981,83 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation 0.9.2", + "core-graphics 0.22.3", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.2", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "com" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a30a2b2a013da986dc5cc3eda3d19c0d59d53f835be1b2356eb8d00f000c793" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7606b05842fea68ddcc89e8053b8860ebcb2a0ba8d6abfe3a148e5d5a8d3f0c1" +dependencies = [ + "com_macros_support", + "proc-macro2 1.0.32", + "syn 1.0.81", +] + +[[package]] +name = "com_macros_support" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97e9a6d20f4ac8830e309a455d7e9416e65c6af5a97c88c55fbb4c2012e107da" +dependencies = [ + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +dependencies = [ + "cache-padded", +] + [[package]] name = "config" version = "0.9.3" @@ -740,34 +1068,122 @@ dependencies = [ "nom 4.2.3", "rust-ini", "serde 1.0.130", - "serde-hjson", + "serde-hjson 0.8.2", "serde_json", "toml 0.4.10", "yaml-rust", ] +[[package]] +name = "config" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369" +dependencies = [ + "lazy_static 1.4.0", + "nom 5.1.2", + "rust-ini", + "serde 1.0.130", + "serde-hjson 0.9.1", + "serde_json", + "toml 0.5.8", + "yaml-rust", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + [[package]] name = "convert_case" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + [[package]] name = "core-foundation" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.3", "libc", ] +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + [[package]] name = "core-foundation-sys" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.2", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.2", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + [[package]] name = "cpufeatures" version = "0.2.1" @@ -806,7 +1222,7 @@ checksum = "0363053954f3e679645fc443321ca128b7b950a6fe288cf5f9335cc22ee58394" dependencies = [ "atty", "cast", - "clap", + "clap 2.33.3", "criterion-plot", "csv", "itertools 0.8.2", @@ -1011,6 +1427,33 @@ dependencies = [ "subtle", ] +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.8.0", + "proc-macro2 1.0.32", + "quote 1.0.10", + "smallvec", + "syn 1.0.81", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" +dependencies = [ + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "csv" version = "1.1.6" @@ -1051,6 +1494,12 @@ dependencies = [ "cipher 0.3.0", ] +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + [[package]] name = "curl-sys" version = "0.4.51+curl-7.80.0" @@ -1101,8 +1550,18 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.10.2", + "darling_macro 0.10.2", +] + +[[package]] +name = "darling" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" +dependencies = [ + "darling_core 0.13.1", + "darling_macro 0.13.1", ] [[package]] @@ -1119,13 +1578,38 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "darling_core" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2 1.0.32", + "quote 1.0.10", + "strsim 0.10.0", + "syn 1.0.81", +] + [[package]] name = "darling_macro" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" dependencies = [ - "darling_core", + "darling_core 0.10.2", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "darling_macro" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" +dependencies = [ + "darling_core 0.13.1", "quote 1.0.10", "syn 1.0.81", ] @@ -1148,6 +1632,26 @@ dependencies = [ "thiserror", ] +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +dependencies = [ + "adler32", + "byteorder", +] + +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + [[package]] name = "deps_only" version = "0.1.0" @@ -1183,7 +1687,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" dependencies = [ - "darling", + "darling 0.10.2", "derive_builder_core", "proc-macro2 1.0.32", "quote 1.0.10", @@ -1196,7 +1700,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" dependencies = [ - "darling", + "darling 0.10.2", "proc-macro2 1.0.32", "quote 1.0.10", "syn 1.0.81", @@ -1283,6 +1787,17 @@ dependencies = [ "generic-array 0.14.4", ] +[[package]] +name = "dirs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +dependencies = [ + "libc", + "redox_users 0.3.5", + "winapi 0.3.9", +] + [[package]] name = "dirs-next" version = "1.0.2" @@ -1310,16 +1825,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.0", "winapi 0.3.9", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + [[package]] name = "dtoa" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +[[package]] +name = "dtoa-short" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +dependencies = [ + "dtoa", +] + [[package]] name = "ed25519" version = "1.3.0" @@ -1349,6 +1879,12 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "embed_plist" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53dd2e43a7d32952a6054141ee0d75183958620e84e5eab045de362dff13dc99" + [[package]] name = "encoding_rs" version = "0.8.29" @@ -1376,6 +1912,27 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "enumflags2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" +dependencies = [ + "enumflags2_derive", + "serde 1.0.130", +] + +[[package]] +name = "enumflags2_derive" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" +dependencies = [ + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "env_logger" version = "0.6.2" @@ -1415,6 +1972,19 @@ dependencies = [ "termcolor", ] +[[package]] +name = "env_logger" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +dependencies = [ + "atty", + "humantime 2.1.0", + "log", + "regex", + "termcolor", +] + [[package]] name = "error-code" version = "2.3.0" @@ -1443,6 +2013,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" +[[package]] +name = "fastrand" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e" +dependencies = [ + "instant", +] + [[package]] name = "fd-lock" version = "3.0.0" @@ -1454,6 +2033,28 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "field-offset" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +dependencies = [ + "memoffset", + "rustc_version 0.3.3", +] + +[[package]] +name = "filetime" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.2.10", + "winapi 0.3.9", +] + [[package]] name = "fixed-hash" version = "0.7.0" @@ -1481,7 +2082,7 @@ dependencies = [ "cfg-if 1.0.0", "crc32fast", "libc", - "miniz_oxide", + "miniz_oxide 0.4.4", ] [[package]] @@ -1532,6 +2133,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +[[package]] +name = "futf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" +dependencies = [ + "mac", + "new_debug_unreachable", +] + [[package]] name = "futures" version = "0.1.31" @@ -1619,6 +2230,21 @@ version = "0.3.0-alpha.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4914ae450db1921a56c91bde97a27846287d062087d4a652efc09bb3a01ebda" +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-macro" version = "0.3.17" @@ -1728,12 +2354,92 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "gcc" version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +[[package]] +name = "gdk" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d749dcfc00d8de0d7c3a289e04a04293eb5ba3d8a4e64d64911d481fa9933b" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590" +dependencies = [ + "gio-sys 0.14.0", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "system-deps 3.2.0", +] + +[[package]] +name = "gdk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys 0.14.0", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "pango-sys", + "pkg-config", + "system-deps 3.2.0", +] + +[[package]] +name = "generator" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1d9279ca822891c1a4dae06d185612cf8fc6acfe5dff37781b41297811b12ee" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "winapi 0.3.9", +] + [[package]] name = "generic-array" version = "0.12.4" @@ -1817,6 +2523,49 @@ dependencies = [ "polyval 0.5.3", ] +[[package]] +name = "gio" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711c3632b3ebd095578a9c091418d10fed492da9443f58ebc8f45efbeb215cb0" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys 0.14.0", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e24fb752f8f5d2cf6bbc2c606fd2bc989c81c5e2fe321ab974d54f8b6344eac" +dependencies = [ + "glib-sys 0.10.1", + "gobject-sys 0.10.0", + "libc", + "system-deps 1.3.2", + "winapi 0.3.9", +] + +[[package]] +name = "gio-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa" +dependencies = [ + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "system-deps 3.2.0", + "winapi 0.3.9", +] + [[package]] name = "git2" version = "0.8.0" @@ -1832,12 +2581,157 @@ dependencies = [ "url 1.7.2", ] +[[package]] +name = "glib" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c515f1e62bf151ef6635f528d05b02c11506de986e43b34a5c920ef0b3796a4" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "once_cell", + "smallvec", +] + +[[package]] +name = "glib-macros" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate 1.1.0", + "proc-macro-error", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "glib-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1" +dependencies = [ + "libc", + "system-deps 1.3.2", +] + +[[package]] +name = "glib-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae" +dependencies = [ + "libc", + "system-deps 3.2.0", +] + [[package]] name = "glob" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "globset" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "gobject-sys" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c" +dependencies = [ + "glib-sys 0.10.1", + "libc", + "system-deps 1.3.2", +] + +[[package]] +name = "gobject-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5" +dependencies = [ + "glib-sys 0.14.0", + "libc", + "system-deps 3.2.0", +] + +[[package]] +name = "gtk" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c" +dependencies = [ + "atk", + "bitflags 1.3.2", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys 0.14.0", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "pango-sys", + "system-deps 3.2.0", +] + +[[package]] +name = "gtk3-macros" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate 1.1.0", + "proc-macro-error", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "h2" version = "0.3.7" @@ -1932,6 +2826,20 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" +[[package]] +name = "html5ever" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "http" version = "0.2.5" @@ -1954,6 +2862,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee9694f83d9b7c09682fdb32213682939507884e5bcf227be9aff5d644b90dc" + [[package]] name = "httparse" version = "1.5.1" @@ -2030,6 +2944,29 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "hyperlocal" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c" +dependencies = [ + "futures-util", + "hex", + "hyper", + "pin-project 1.0.8", + "tokio", +] + +[[package]] +name = "ico" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804" +dependencies = [ + "byteorder", + "png 0.11.0", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -2058,6 +2995,24 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "ignore" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" +dependencies = [ + "crossbeam-utils 0.8.5", + "globset", + "lazy_static 1.4.0", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + [[package]] name = "image" version = "0.23.14" @@ -2082,6 +3037,24 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "infer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f92b41dab759f9e8427c03f519c344a14655490b8db548dac1e57a75b3258391" +dependencies = [ + "cfb", +] + +[[package]] +name = "inflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4" +dependencies = [ + "adler32", +] + [[package]] name = "instant" version = "0.1.12" @@ -2133,6 +3106,40 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +[[package]] +name = "javascriptcore-rs" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca9c7d1445bba2889672fbadc16c3d5007bfdcf0a15a18a3a50fe9fab2c7427" +dependencies = [ + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f46ada8a08dcd75a10afae872fbfb51275df4a8ae0d46b8cc7c708f08dd2998" +dependencies = [ + "libc", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.55" @@ -2181,6 +3188,18 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "kuchiki" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" +dependencies = [ + "cssparser", + "html5ever", + "matches", + "selectors", +] + [[package]] name = "lazy_static" version = "0.2.11" @@ -2202,6 +3221,19 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "lexical-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" +dependencies = [ + "arrayvec 0.5.2", + "bitflags 1.3.2", + "cfg-if 1.0.0", + "ryu", + "static_assertions", +] + [[package]] name = "libc" version = "0.2.108" @@ -2404,12 +3436,68 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "loom" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc5c7d328e32cc4954e8e01193d7f0ef5ab257b5090b70a964e099a36034309" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "serde 1.0.130", + "serde_json", + "tracing", + "tracing-subscriber 0.3.3", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "mac-notification-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb6b71a9a89cd38b395d994214297447e8e63b1ba5708a9a2b0b1048ceda76" +dependencies = [ + "cc", + "chrono", + "dirs", + "objc-foundation", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "markup5ever" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" +dependencies = [ + "log", + "phf 0.8.0", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + [[package]] name = "matchers" version = "0.0.1" @@ -2419,6 +3507,15 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + [[package]] name = "matches" version = "0.1.9" @@ -2500,6 +3597,21 @@ dependencies = [ "unicase", ] +[[package]] +name = "minisign-verify" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0507fe8e3c68cd62961cf9f87f6c2b21d884d3515a7150a4a3fa9d014e5c12" + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + [[package]] name = "miniz_oxide" version = "0.4.4" @@ -2584,7 +3696,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.0", "proc-macro-error", "proc-macro2 1.0.32", "quote 1.0.10", @@ -2634,6 +3746,68 @@ dependencies = [ "tempfile", ] +[[package]] +name = "nb-connect" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1bb540dc6ef51cfe1916ec038ce7a620daf3a111e2502d745197cd53d6bca15" +dependencies = [ + "libc", + "socket2", +] + +[[package]] +name = "ndk" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d64d6af06fde0e527b1ba5c7b79a6cc89cfc46325b0b2887dffe8f70197e0c3c" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-glue" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e9e94628f24e7a3cb5b96a2dc5683acd9230bf11991c2a1677b87695138420" +dependencies = [ + "lazy_static 1.4.0", + "libc", + "log", + "ndk", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" +dependencies = [ + "darling 0.10.2", + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "ndk-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + [[package]] name = "newtype-ops" version = "0.1.4" @@ -2649,6 +3823,19 @@ dependencies = [ "smallvec", ] +[[package]] +name = "nix" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + [[package]] name = "nix" version = "0.22.0" @@ -2690,10 +3877,25 @@ version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" dependencies = [ + "lexical-core", "memchr", "version_check 0.9.3", ] +[[package]] +name = "notify-rust" +version = "4.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ebab865e67efdd7182a88d76cadbdd2a8d02d1c7a4e16bb7c234016a12cac" +dependencies = [ + "mac-notification-sys", + "serde 1.0.130", + "winrt-notification", + "zbus", + "zvariant", + "zvariant_derive", +] + [[package]] name = "ntapi" version = "0.3.6" @@ -2822,31 +4024,82 @@ dependencies = [ ] [[package]] -name = "num-traits" -version = "0.1.43" +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +dependencies = [ + "num-traits 0.2.14", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg 1.0.1", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9bd055fb730c4f8f4f57d45d35cd6b3f0980535b056dc7ff119cee6a66ed6f" +dependencies = [ + "derivative", + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486ea01961c4a818096de679a8b740b26d9033146ac5291b1c98557658f8cdd9" +dependencies = [ + "proc-macro-crate 1.1.0", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "objc" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ - "num-traits 0.2.14", + "malloc_buf", ] [[package]] -name = "num-traits" -version = "0.2.14" +name = "objc-foundation" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" dependencies = [ - "autocfg 1.0.1", + "block", + "objc", + "objc_id", ] [[package]] -name = "num_cpus" -version = "1.13.0" +name = "objc_id" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ - "hermit-abi", - "libc", + "objc", ] [[package]] @@ -2867,6 +4120,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +[[package]] +name = "open" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176ee4b630d174d2da8241336763bb459281dddc0f4d87f72c3b1efc9a6109b7" +dependencies = [ + "pathdiff", + "winapi 0.3.9", +] + [[package]] name = "openssl" version = "0.10.38" @@ -2989,6 +4252,33 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "os_info" +version = "3.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5501659840950e918d046ad97ebe9702cbb4ec0097e47dbd27abf7692223181" +dependencies = [ + "log", + "serde 1.0.130", + "winapi 0.3.9", +] + +[[package]] +name = "os_pipe" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "os_str_bytes" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" + [[package]] name = "packed_simd_2" version = "0.3.6" @@ -2999,6 +4289,37 @@ dependencies = [ "libm 0.1.4", ] +[[package]] +name = "pango" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "546fd59801e5ca735af82839007edd226fe7d3bb06433ec48072be4439c28581" +dependencies = [ + "bitflags 1.3.2", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe" +dependencies = [ + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "libc", + "system-deps 3.2.0", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + [[package]] name = "parking_lot" version = "0.10.2" @@ -3065,6 +4386,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd" +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + [[package]] name = "peeking_take_while" version = "0.1.2" @@ -3197,6 +4524,104 @@ dependencies = [ "zeroize", ] +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.4", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "0.4.28" @@ -3255,6 +4680,43 @@ version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" +[[package]] +name = "png" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925" +dependencies = [ + "bitflags 1.3.2", + "deflate 0.7.20", + "inflate", + "num-iter", +] + +[[package]] +name = "png" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "deflate 0.8.6", + "miniz_oxide 0.3.7", +] + +[[package]] +name = "polling" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "log", + "wepoll-ffi", + "winapi 0.3.9", +] + [[package]] name = "poly1305" version = "0.7.2" @@ -3295,6 +4757,21 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.8", +] + [[package]] name = "proc-macro-crate" version = "1.1.0" @@ -3503,6 +4980,7 @@ dependencies = [ "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", + "rand_pcg", ] [[package]] @@ -3602,6 +5080,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rand_xoshiro" version = "0.1.0" @@ -3623,6 +5110,25 @@ dependencies = [ "thiserror", ] +[[package]] +name = "raw-window-handle" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" +dependencies = [ + "libc", + "raw-window-handle 0.4.2", +] + +[[package]] +name = "raw-window-handle" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba75eee94a9d5273a68c9e1e105d9cffe1ef700532325788389e5a83e2522b7" +dependencies = [ + "cty", +] + [[package]] name = "rayon" version = "1.5.1" @@ -3672,6 +5178,17 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_users" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +dependencies = [ + "getrandom 0.1.16", + "redox_syscall 0.1.57", + "rust-argon2", +] + [[package]] name = "redox_users" version = "0.4.0" @@ -3742,7 +5259,7 @@ dependencies = [ "pin-project-lite", "serde 1.0.130", "serde_json", - "serde_urlencoded", + "serde_urlencoded 0.7.0", "tokio", "tokio-native-tls", "url 2.2.2", @@ -3752,6 +5269,29 @@ dependencies = [ "winreg", ] +[[package]] +name = "rfd" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "609ed912e110af7d7084b6b17d2a68b25e766208e015a37beba1be3c2d7cbb3b" +dependencies = [ + "block", + "dispatch", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "gtk-sys", + "js-sys", + "lazy_static 1.4.0", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle 0.3.4", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winapi 0.3.9", +] + [[package]] name = "ring" version = "0.16.20" @@ -3831,6 +5371,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rust-argon2" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +dependencies = [ + "base64 0.13.0", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils 0.8.5", +] + [[package]] name = "rust-ini" version = "0.13.0" @@ -3880,6 +5432,12 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustversion" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" + [[package]] name = "rustyline" version = "9.0.0" @@ -3894,7 +5452,7 @@ dependencies = [ "libc", "log", "memchr", - "nix", + "nix 0.22.0", "radix_trie", "scopeguard", "smallvec", @@ -3983,8 +5541,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" dependencies = [ "bitflags 1.3.2", - "core-foundation", - "core-foundation-sys", + "core-foundation 0.9.2", + "core-foundation-sys 0.8.3", "libc", "security-framework-sys", ] @@ -3995,10 +5553,30 @@ version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.3", "libc", ] +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + [[package]] name = "semver" version = "0.11.0" @@ -4061,6 +5639,18 @@ dependencies = [ "serde 0.8.23", ] +[[package]] +name = "serde-hjson" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a3a4e0ea8a88553209f6cc6cfe8724ecad22e1acf372793c27d995290fe74f8" +dependencies = [ + "lazy_static 1.4.0", + "num-traits 0.1.43", + "regex", + "serde 0.8.23", +] + [[package]] name = "serde-value" version = "0.5.3" @@ -4118,9 +5708,21 @@ dependencies = [ name = "serde_test" version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5" +checksum = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5" +dependencies = [ + "serde 0.8.23", +] + +[[package]] +name = "serde_urlencoded" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" dependencies = [ - "serde 0.8.23", + "dtoa", + "itoa", + "serde 1.0.130", + "url 2.2.2", ] [[package]] @@ -4135,6 +5737,29 @@ dependencies = [ "serde 1.0.130", ] +[[package]] +name = "serde_with" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad6056b4cb69b6e43e3a0f055def223380baecc99da683884f205bf347f7c4b3" +dependencies = [ + "rustversion", + "serde 1.0.130", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12e47be9471c72889ebafb5e14d5ff930d89ae7a67bbdb5f8abb564f845a927e" +dependencies = [ + "darling 0.13.1", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "serde_yaml" version = "0.8.21" @@ -4147,6 +5772,16 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + [[package]] name = "sha-1" version = "0.8.2" @@ -4172,6 +5807,12 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + [[package]] name = "sha2" version = "0.9.8" @@ -4206,6 +5847,16 @@ dependencies = [ "lazy_static 1.4.0", ] +[[package]] +name = "shared_child" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6be9f7d5565b1483af3e72975e2dee33879b3b86bd48c0929fccf6585d79e65a" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "shlex" version = "0.1.1" @@ -4270,6 +5921,12 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "siphasher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" + [[package]] name = "slab" version = "0.4.5" @@ -4309,18 +5966,48 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "soup-sys" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7adf08565630bbb71f955f11f8a68464817ded2703a3549747c235b58a13e" +dependencies = [ + "bitflags 1.3.2", + "gio-sys 0.10.1", + "glib-sys 0.10.1", + "gobject-sys 0.10.0", + "libc", + "pkg-config", + "system-deps 1.3.2", +] + [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stack-buf" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7386b49cb287f6fafbfd3bd604914bccb99fb8d53483f40e1ecfda5d45f3370" +[[package]] +name = "state" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf4f5369e6d3044b5e365c9690f451516ac8f0954084622b49ea3fde2f6de5" +dependencies = [ + "loom", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -4342,6 +6029,32 @@ dependencies = [ "futures 0.1.31", ] +[[package]] +name = "string_cache" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923f0f39b6267d37d23ce71ae7235602134b250ace715dd2c90421998ddac0c6" +dependencies = [ + "lazy_static 1.4.0", + "new_debug_unreachable", + "parking_lot 0.11.2", + "phf_shared 0.8.0", + "precomputed-hash", + "serde 1.0.130", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro2 1.0.32", + "quote 1.0.10", +] + [[package]] name = "strsim" version = "0.8.0" @@ -4354,13 +6067,19 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "structopt" version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c" dependencies = [ - "clap", + "clap 2.33.3", "lazy_static 1.4.0", "structopt-derive", ] @@ -4378,12 +6097,24 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "strum" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b" + [[package]] name = "strum" version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5" +[[package]] +name = "strum" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" + [[package]] name = "strum" version = "0.22.0" @@ -4393,6 +6124,12 @@ dependencies = [ "strum_macros 0.22.0", ] +[[package]] +name = "strum" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb" + [[package]] name = "strum_macros" version = "0.17.1" @@ -4429,6 +6166,18 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "strum_macros" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" +dependencies = [ + "heck", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "strum_macros" version = "0.22.0" @@ -4441,6 +6190,19 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "strum_macros" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38" +dependencies = [ + "heck", + "proc-macro2 1.0.32", + "quote 1.0.10", + "rustversion", + "syn 1.0.81", +] + [[package]] name = "subtle" version = "2.4.1" @@ -4513,6 +6275,89 @@ dependencies = [ "unicode-xid 0.2.2", ] +[[package]] +name = "system-deps" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b" +dependencies = [ + "heck", + "pkg-config", + "strum 0.18.0", + "strum_macros 0.18.0", + "thiserror", + "toml 0.5.8", + "version-compare 0.0.10", +] + +[[package]] +name = "system-deps" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6" +dependencies = [ + "anyhow", + "cfg-expr", + "heck", + "itertools 0.10.1", + "pkg-config", + "strum 0.21.0", + "strum_macros 0.21.1", + "thiserror", + "toml 0.5.8", + "version-compare 0.0.11", +] + +[[package]] +name = "tao" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa57de7c282b68f8906278543a724ed8f5a2568f069dd0cc05fc10d1f07036b" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "cc", + "cocoa", + "core-foundation 0.9.2", + "core-graphics 0.22.3", + "core-video-sys", + "crossbeam-channel 0.5.1", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "glib-sys 0.14.0", + "gtk", + "instant", + "lazy_static 1.4.0", + "libc", + "log", + "ndk", + "ndk-glue", + "ndk-sys", + "objc", + "parking_lot 0.11.2", + "raw-window-handle 0.3.4", + "scopeguard", + "serde 1.0.130", + "unicode-segmentation", + "winapi 0.3.9", + "x11-dl", +] + +[[package]] +name = "tar" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f5515d3add52e0bbdcad7b83c388bb36ba7b754dda3b5f5bc2d38640cdba5c" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "tari_app_grpc" version = "0.22.0" @@ -4532,7 +6377,7 @@ dependencies = [ name = "tari_app_utilities" version = "0.22.0" dependencies = [ - "config", + "config 0.9.3", "dirs-next 1.0.2", "futures 0.3.17", "json5", @@ -4546,9 +6391,9 @@ dependencies = [ "tari_common", "tari_common_types", "tari_comms", - "tari_core", "tari_crypto", "tari_p2p", + "tari_utilities", "thiserror", "tokio", "tonic", @@ -4561,7 +6406,7 @@ dependencies = [ "anyhow", "bincode", "chrono", - "config", + "config 0.9.3", "either", "futures 0.3.17", "log", @@ -4593,7 +6438,7 @@ dependencies = [ "tonic", "tracing", "tracing-opentelemetry", - "tracing-subscriber", + "tracing-subscriber 0.2.25", "warp", ] @@ -4621,7 +6466,7 @@ name = "tari_common" version = "0.22.0" dependencies = [ "anyhow", - "config", + "config 0.9.3", "dirs-next 1.0.2", "get_if_addrs", "git2", @@ -4723,7 +6568,7 @@ dependencies = [ "bytes 0.5.6", "chacha20", "chrono", - "clap", + "clap 2.33.3", "diesel", "diesel_migrations", "digest 0.9.0", @@ -4814,7 +6659,7 @@ dependencies = [ "tonic", "tracing", "tracing-opentelemetry", - "tracing-subscriber", + "tracing-subscriber 0.2.25", "tui", "unicode-segmentation", "unicode-width", @@ -4830,7 +6675,7 @@ dependencies = [ "blake2", "bytes 0.5.6", "chrono", - "config", + "config 0.9.3", "croaring", "decimal-rs", "derive_more", @@ -4932,6 +6777,29 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tari_launchpad" +version = "0.1.0" +dependencies = [ + "bollard", + "config 0.11.0", + "env_logger 0.9.0", + "futures 0.3.17", + "log", + "rand 0.8.4", + "serde 1.0.130", + "serde_json", + "strum 0.23.0", + "strum_macros 0.23.1", + "tari_app_utilities", + "tari_comms", + "tauri", + "tauri-build", + "thiserror", + "tokio", + "tor-hash-passwd", +] + [[package]] name = "tari_merge_mining_proxy" version = "0.22.0" @@ -4940,7 +6808,7 @@ dependencies = [ "bincode", "bytes 1.1.0", "chrono", - "config", + "config 0.9.3", "derive-error", "env_logger 0.7.1", "futures 0.3.17", @@ -4966,7 +6834,7 @@ dependencies = [ "tonic", "tracing", "tracing-futures", - "tracing-subscriber", + "tracing-subscriber 0.2.25", "url 2.2.2", ] @@ -5034,7 +6902,7 @@ dependencies = [ "anyhow", "bytes 0.5.6", "chrono", - "clap", + "clap 2.33.3", "env_logger 0.6.2", "fs2", "futures 0.3.17", @@ -5138,7 +7006,7 @@ dependencies = [ "bincode", "bytes 0.5.6", "chrono", - "config", + "config 0.9.3", "derive-error", "env_logger 0.7.1", "futures 0.3.17", @@ -5164,7 +7032,7 @@ dependencies = [ "tonic-build", "tracing", "tracing-futures", - "tracing-subscriber", + "tracing-subscriber 0.2.25", "url 2.2.2", ] @@ -5272,7 +7140,155 @@ dependencies = [ "tari_wallet", "tempfile", "thiserror", - "tokio", + "tokio", +] + +[[package]] +name = "tauri" +version = "1.0.0-beta.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79a0579dcc6fb883fe90dd3c66d76b8b8f4a1786e1e915e314b2017a500ede09" +dependencies = [ + "attohttpc", + "base64 0.13.0", + "bincode", + "cfg_aliases", + "clap 3.0.0-beta.2", + "dirs-next 2.0.0", + "either", + "embed_plist", + "flate2", + "futures 0.3.17", + "futures-lite", + "glib", + "gtk", + "http", + "ignore", + "minisign-verify", + "notify-rust", + "once_cell", + "open", + "os_info", + "os_pipe", + "percent-encoding 2.1.0", + "rand 0.8.4", + "raw-window-handle 0.3.4", + "rfd", + "semver 1.0.4", + "serde 1.0.130", + "serde_json", + "serde_repr", + "shared_child", + "state", + "tar", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "tempfile", + "thiserror", + "tokio", + "url 2.2.2", + "uuid", + "zip", +] + +[[package]] +name = "tauri-build" +version = "1.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9c9a9bea25b9d6f5845b8662e18447e17218f99860cab37e39e2b57a9fcd49" +dependencies = [ + "anyhow", + "proc-macro2 1.0.32", + "quote 1.0.10", + "serde_json", + "tauri-utils", + "winres", +] + +[[package]] +name = "tauri-codegen" +version = "1.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1663739ab53e281919676f216fb56a031104d0d2cd1a2dd5b012d279bcdb0ea4" +dependencies = [ + "blake3", + "kuchiki", + "proc-macro2 1.0.32", + "quote 1.0.10", + "regex", + "serde 1.0.130", + "serde_json", + "tauri-utils", + "thiserror", + "walkdir", + "zstd", +] + +[[package]] +name = "tauri-macros" +version = "1.0.0-beta.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddf9f5868402323f35ef94fa6ab1d5d10b29aea9de598d829723aa1db5693b4" +dependencies = [ + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", + "tauri-codegen", +] + +[[package]] +name = "tauri-runtime" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c52eccfb7f2ce5a09262bdc3671f0f07f637e27f8aa25e5f38145cddcd4e01" +dependencies = [ + "gtk", + "http", + "http-range", + "infer", + "serde 1.0.130", + "serde_json", + "tauri-utils", + "thiserror", + "uuid", + "winapi 0.3.9", +] + +[[package]] +name = "tauri-runtime-wry" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fed8dd0a448c303fa764859d6dfa1c746c4f2c6c30a83c162f8bebb12e4af4e" +dependencies = [ + "gtk", + "ico", + "infer", + "png 0.16.8", + "tauri-runtime", + "tauri-utils", + "uuid", + "winapi 0.3.9", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "1.0.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb9b79594f22b6ed0cc8362e0dfde5b7969962de3cd8ca683de702e59e8221b" +dependencies = [ + "html5ever", + "kuchiki", + "phf 0.10.1", + "proc-macro2 1.0.32", + "quote 1.0.10", + "serde 1.0.130", + "serde_json", + "thiserror", + "url 2.2.2", + "zstd", ] [[package]] @@ -5289,6 +7305,17 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "tendril" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ef557cb397a4f0a5a3a628f06515f78563f2209e64d47055d9dc6052bf5e33" +dependencies = [ + "futf", + "mac", + "utf-8", +] + [[package]] name = "termcolor" version = "1.1.2" @@ -5321,6 +7348,21 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "textwrap" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + [[package]] name = "thiserror" version = "1.0.30" @@ -5602,6 +7644,19 @@ dependencies = [ "syn 1.0.81", ] +[[package]] +name = "tor-hash-passwd" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b83cd43a176c0c19d5db4401283e8f5c296b9c6c7fa29029de15cc445f26e12" +dependencies = [ + "hex", + "hex-literal", + "rand 0.8.4", + "sha1", + "thiserror", +] + [[package]] name = "tower" version = "0.4.11" @@ -5714,7 +7769,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-log", - "tracing-subscriber", + "tracing-subscriber 0.2.25", ] [[package]] @@ -5736,7 +7791,7 @@ dependencies = [ "ansi_term 0.12.1", "chrono", "lazy_static 1.4.0", - "matchers", + "matchers 0.0.1", "regex", "serde 1.0.130", "serde_json", @@ -5749,6 +7804,24 @@ dependencies = [ "tracing-serde", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245da694cc7fc4729f3f418b304cb57789f1bed2a78c575407ab8a23f53cb4d3" +dependencies = [ + "ansi_term 0.12.1", + "lazy_static 1.4.0", + "matchers 0.1.0", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + [[package]] name = "traitobject" version = "0.1.0" @@ -6022,6 +8095,7 @@ dependencies = [ "idna 0.2.3", "matches", "percent-encoding 2.1.0", + "serde 1.0.130", ] [[package]] @@ -6036,6 +8110,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.3", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -6048,6 +8131,18 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "version-compare" +version = "0.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" + +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + [[package]] name = "version_check" version = "0.1.5" @@ -6060,6 +8155,18 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + [[package]] name = "walkdir" version = "2.3.2" @@ -6102,7 +8209,7 @@ dependencies = [ "scoped-tls", "serde 1.0.130", "serde_json", - "serde_urlencoded", + "serde_urlencoded 0.7.0", "tokio", "tokio-stream", "tokio-tungstenite", @@ -6199,6 +8306,52 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webkit2gtk" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e47b7f870883fc21612d2a51b74262f7f2cc5371f1621370817292a35300a9" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys 0.14.0", + "glib", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66ccc9f0cb4de7c3b92376a5bf64e7ddffb33852f092721731a039ec38dda98" +dependencies = [ + "atk-sys", + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys 0.14.0", + "glib-sys 0.14.0", + "gobject-sys 0.14.0", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pango-sys", + "pkg-config", + "soup-sys", + "system-deps 3.2.0", +] + [[package]] name = "webpki" version = "0.21.4" @@ -6209,6 +8362,38 @@ dependencies = [ "untrusted", ] +[[package]] +name = "webview2" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283bf6b0ed9c83faea8c7bfe40bb261592147a109effaa4077eed294863d5031" +dependencies = [ + "com", + "once_cell", + "webview2-sys", + "widestring", + "winapi 0.3.9", +] + +[[package]] +name = "webview2-sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b7889e893ac4c50d7346356be3ce13a85e56512c38b8fde0526559b8012a4c" +dependencies = [ + "com", + "winapi 0.3.9", +] + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + [[package]] name = "which" version = "3.1.1" @@ -6229,6 +8414,18 @@ dependencies = [ "libc", ] +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[package]] +name = "wildmatch" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a" + [[package]] name = "winapi" version = "0.2.8" @@ -6272,6 +8469,42 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944" +dependencies = [ + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_i686_gnu" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd" + +[[package]] +name = "windows_i686_msvc" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399" + [[package]] name = "winreg" version = "0.7.0" @@ -6281,6 +8514,67 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml 0.5.8", +] + +[[package]] +name = "winrt-notification" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda101fb8e034a25f3d50a0714d7ca4f234a4fc7bc57427f6d81040db0ccbe6a" +dependencies = [ + "strum 0.22.0", + "windows", + "xml-rs", +] + +[[package]] +name = "wry" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9549393a3917b5303277abb0267f8eecf9fd629b25f1c04e5284aa58b61915" +dependencies = [ + "cocoa", + "core-graphics 0.22.3", + "gdk", + "gio", + "glib", + "gtk", + "http", + "libc", + "log", + "objc", + "objc_id", + "once_cell", + "serde 1.0.130", + "serde_json", + "tao", + "thiserror", + "url 2.2.2", + "webkit2gtk", + "webkit2gtk-sys", + "webview2", + "webview2-sys", + "winapi 0.3.9", +] + +[[package]] +name = "x11-dl" +version = "2.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" +dependencies = [ + "lazy_static 1.4.0", + "libc", + "pkg-config", +] + [[package]] name = "x25519-dalek" version = "1.2.0" @@ -6292,6 +8586,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "xattr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +dependencies = [ + "libc", +] + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + [[package]] name = "yaml-rust" version = "0.4.5" @@ -6315,6 +8624,41 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "zbus" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2326acc379a3ac4e34b794089f5bdb17086bf29a5fdf619b7b4cc772dc2e9dad" +dependencies = [ + "async-io", + "byteorder", + "derivative", + "enumflags2", + "fastrand", + "futures 0.3.17", + "nb-connect", + "nix 0.17.0", + "once_cell", + "polling", + "scoped-tls", + "serde 1.0.130", + "serde_repr", + "zbus_macros", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a482c56029e48681b89b92b5db3c446db0915e8dd1052c0328a574eda38d5f93" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] + [[package]] name = "zeroize" version = "1.3.0" @@ -6335,3 +8679,72 @@ dependencies = [ "syn 1.0.81", "synstructure", ] + +[[package]] +name = "zip" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +dependencies = [ + "byteorder", + "bzip2", + "crc32fast", + "flate2", + "thiserror", + "time", +] + +[[package]] +name = "zstd" +version = "0.9.0+zstd.1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07749a5dc2cb6b36661290245e350f15ec3bbb304e493db54a1d354480522ccd" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "4.1.1+zstd.1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91c90f2c593b003603e5e0493c837088df4469da25aafff8bce42ba48caf079" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "1.6.1+zstd.1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "615120c7a2431d16cf1cf979e7fc31ba7a5b5e5707b29c8a99e5dbf8a8392a33" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "zvariant" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68c7b55f2074489b7e8e07d2d0a6ee6b4f233867a653c664d8020ba53692525" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde 1.0.130", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9" +dependencies = [ + "proc-macro-crate 1.1.0", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", +] diff --git a/Cargo.toml b/Cargo.toml index 385dbaf1dd..e26dd17415 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ members = [ "infrastructure/storage", "infrastructure/test_utils", "applications/deps_only", - # "applications/installer", + "applications/launchpad/backend", "applications/tari_base_node", "applications/tari_console_wallet", "applications/test_faucet", diff --git a/applications/installer/Cargo.toml b/applications/installer/Cargo.toml deleted file mode 100644 index 87b343848d..0000000000 --- a/applications/installer/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "installer" -version = "0.1.0" -edition = "2018" - -[dependencies] -dirs = "3.0" diff --git a/applications/installer/src/main.rs b/applications/installer/src/main.rs deleted file mode 100644 index e0265f2609..0000000000 --- a/applications/installer/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod config; - -fn main() {} diff --git a/applications/launchpad/.dockerignore b/applications/launchpad/.dockerignore new file mode 100644 index 0000000000..b3f92c7597 --- /dev/null +++ b/applications/launchpad/.dockerignore @@ -0,0 +1,3 @@ +build_images.sh +versions.txt +docker_rig/*.Dockerfile \ No newline at end of file diff --git a/applications/launchpad/.gitignore b/applications/launchpad/.gitignore new file mode 100644 index 0000000000..b1d86c6ef2 --- /dev/null +++ b/applications/launchpad/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +gui/node_modules +gui/.pnp +gui/.pnp.js + +# testing +gui/coverage + +# production +gui/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +gui/npm-debug.log* +gui/yarn-debug.log* +gui/yarn-error.log* diff --git a/applications/launchpad/backend/.gitignore b/applications/launchpad/backend/.gitignore new file mode 100644 index 0000000000..c123704591 --- /dev/null +++ b/applications/launchpad/backend/.gitignore @@ -0,0 +1,4 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ +WixTools diff --git a/applications/launchpad/backend/Cargo.toml b/applications/launchpad/backend/Cargo.toml new file mode 100644 index 0000000000..a84fc5783a --- /dev/null +++ b/applications/launchpad/backend/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "tari_launchpad" +version = "0.1.0" +description = "The Tari Launcher" +authors = ["The Tari Development Community"] +license = "" +repository = "" +edition = "2018" +build = "src/build.rs" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +tauri-build = { version = "1.0.0-beta.4" } + +[dependencies] +tari_app_utilities = { version = "0.22.0", path = "../../tari_app_utilities" } +tari_comms = { version = "0.22.0", path = "../../../comms" } +bollard = "0.11.0" +config = "0.11.0" +env_logger = "0.9.0" +log = "0.4.14" +rand = "0.8.4" +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +strum = "0.23.0" +strum_macros = "0.23.0" +tauri = { version = "1.0.0-beta.8", features = ["api-all", "cli"] } +tor-hash-passwd = "1.0.1" +thiserror = "1.0.30" +tokio = { version = "1.9", features= ["sync"] } +futures = "0.3" + +[features] +default = [ "custom-protocol" ] +custom-protocol = [ "tauri/custom-protocol" ] diff --git a/applications/launchpad/backend/assets/config.toml b/applications/launchpad/backend/assets/config.toml new file mode 100644 index 0000000000..5941810e4a --- /dev/null +++ b/applications/launchpad/backend/assets/config.toml @@ -0,0 +1,160 @@ +# Config for launchpad v0.0.2 +######################################################################################################################## +# Common Configuration Options # +######################################################################################################################## + +[common] +network = "weatherwax" +message_cache_size = 10 +message_cache_ttl = 1440 +denylist_ban_period = 1440 +buffer_rate_limit_console_wallet = 1000 +dedup_cache_capacity = 25000 +rpc_max_simultaneous_sessions = 1000 + +[common.weatherwax] +peer_seeds = [ + # weatherwax + "98bc76afc1c35ad4651bdc9ef57bbe0655a2ea3cd86c0e19b5fd5890546eb040::/onion3/33izgtjkrlxhxybj6luqowkpiy2wvte43osejnbqyieqtdfhovzghxad:18141", #jozi + "9a26e910288213d649b26f9a7a7ee51fe2b2a67ff7d42334523463bf4be94312::/onion3/56kq54ylttnbl5ikotqex3oqvtzlxdpn7zlx4v56rvzf4kq7eezlclid:18141", #london + "6afd5b3c7772ad7d4bb26e0c19668fe04f2d68f99de9e132bee50a6c1846946d::/onion3/may4ajbmcn4dlnzf6fanvqlklxzqiw6qwu6ywqwkjc3bb354rc2i5wid:18141", #ncal + "8e7beec9becdc44fe6015a00d97a77fa3dbafe65127dcc988df6326bd9fd040d::/onion3/3pise36l4imoopsbjic5rtw67adx7rms6w5pgjmccpdwiqx66j7oqcqd:18141", #nvir + "80bb590d943a46e63ae79af5dc2c7d35a3dcd7922c182b28f619dc4cfc366f44::/onion3/oaxwahri7r3h5qjlcdbveyjmg4jsttausik66bicmhixft73nmvecdad:18141", #oregon + "981cc8cd1e4fe2f99ea1bd3e0ab1e7821ca0bfab336a4967cfec053fee86254c::/onion3/7hxpnxrxycdfevirddau7ybofwedaamjrg2ijm57k2kevh5q46ixamid:18141", #seoul + "f2ce179fb733725961a5f7e1e45dacdd443dd43ba6237438d6abe344fb717058::/onion3/nvgdmjf4wucgatz7vemzvi2u4sw5o4gyzwuikagpepoj4w7mkii47zid:18141", #stockholm + "909c0160f4d8e815aba5c2bbccfcceb448877e7b38759fb160f3e9494484d515::/onion3/qw5uxv533sqdn2qoncfyqo35dgecy4rt4x27rexi2her6q6pcpxbm4qd:18141", #sydney + # igor + "8e7eb81e512f3d6347bf9b1ca9cd67d2c8e29f2836fc5bd608206505cc72af34::/onion3/l4wouomx42nezhzexjdzfh7pcou5l7df24ggmwgekuih7tkv2rsaokqd:18141", + "00b35047a341401bcd336b2a3d564280a72f6dc72ec4c739d30c502acce4e803::/onion3/ojhxd7z6ga7qrvjlr3px66u7eiwasmffnuklscbh5o7g6wrbysj45vid:18141", + "40a9d8573745072534bce7d0ecafe882b1c79570375a69841c08a98dee9ecb5f::/onion3/io37fylc2pupg4cte4siqlsmuszkeythgjsxs2i3prm6jyz2dtophaad:18141", + "126c7ee64f71aca36398b977dd31fbbe9f9dad615df96473fb655bef5709c540::/onion3/6ilmgndocop7ybgmcvivbdsetzr5ggj4hhsivievoa2dx2b43wqlrlid:18141", +] +dns_seeds =["seeds.weatherwax.tari.com"] +dns_seeds_use_dnssec = false + +[common.igor] +peer_seeds = [ + # igor + "8e7eb81e512f3d6347bf9b1ca9cd67d2c8e29f2836fc5bd608206505cc72af34::/onion3/l4wouomx42nezhzexjdzfh7pcou5l7df24ggmwgekuih7tkv2rsaokqd:18141", + "00b35047a341401bcd336b2a3d564280a72f6dc72ec4c739d30c502acce4e803::/onion3/ojhxd7z6ga7qrvjlr3px66u7eiwasmffnuklscbh5o7g6wrbysj45vid:18141", + "40a9d8573745072534bce7d0ecafe882b1c79570375a69841c08a98dee9ecb5f::/onion3/io37fylc2pupg4cte4siqlsmuszkeythgjsxs2i3prm6jyz2dtophaad:18141", + "126c7ee64f71aca36398b977dd31fbbe9f9dad615df96473fb655bef5709c540::/onion3/6ilmgndocop7ybgmcvivbdsetzr5ggj4hhsivievoa2dx2b43wqlrlid:18141", +] + +dns_seeds =["seeds.igor.tari.com"] +# dns_seeds_name_server = "1.1.1.1:853/cloudfare-dns.com" +dns_seeds_use_dnssec = false + +# auto_update.check_interval = 300 +# "auto_update.dns_hosts" = ["updates.igor.taripulse.com"] +# "auto_update.hashes_url" = "https://
/hashes.txt" +# "auto_update.hashes_sig_url" = "https://
/hashes.txt.sig" + +[common.dibbler] +dns_seeds =["seeds.dibbler.tari.com"] +peer_seeds = [ + "721e9da488302e69523bca1a9cdcbd2419dddda11698a1e8c6c7bd619659ff21::/onion3/qw4ymrzbanbcr3wwlesxbot72iayd7xdjcrtnacbwgk637vfon47hqad:18141", + # 333388d1cbe3e2bd17453d052f + "c2eca9cf32261a1343e21ed718e79f25bfc74386e9305350b06f62047f519347::/onion3/6yxqk2ybo43u73ukfhyc42qn25echn4zegjpod2ccxzr2jd5atipwzqd:18141", + # 555575715a49fc242d756e52ca + "42fcde82b44af1de95a505d858cb31a422c56c4ac4747fbf3da47d648d4fc346::/onion3/2l3e7ysmihc23zybapdrsbcfg6omtjtfkvwj65dstnfxkwtai2fawtyd:18141", + # 77771f53be07fab4be5f1e1ff7 + "50e6aa8f6c50f1b9d9b3d438dfd2a29cfe1f3e3a650bd9e6b1e10f96b6c38f4d::/onion3/7s6y3cz5bnewlj5ypm7sekhgvqjyrq4bpaj5dyvvo7vxydj7hsmyf5ad:18141", + # 9999016f1f3a6162dddf5a45aa + "36a9df45e1423b5315ffa7a91521924210c8e1d1537ad0968450f20f21e5200d::/onion3/v24qfheti2rztlwzgk6v4kdbes3ra7mo3i2fobacqkbfrk656e3uvnid:18141", + # bbbb8358387d81c388fadb4649 + "be128d570e8ec7b15c101ee1a56d6c56dd7d109199f0bd02f182b71142b8675f::/onion3/ha422qsy743ayblgolui5pg226u42wfcklhc5p7nbhiytlsp4ir2syqd:18141", + # eeeeb0a943ed143e613a135392 + "3e0321c0928ca559ab3c0a396272dfaea705efce88440611a38ff3898b097217::/onion3/sl5ledjoaisst6d4fh7kde746dwweuge4m4mf5nkzdhmy57uwgtb7qqd:18141" +] +######################################################################################################################## +# Base Node Configuration Options # +######################################################################################################################## + +[base_node] +network = "weatherwax" + +# Configuration options for testnet Weatherwax +[base_node.weatherwax] +db_type = "lmdb" +# db_init_size_mb = 1000 +# db_grow_size_mb = 500 +# db_resize_threshold_mb = 100 +# The maximum number of orphans that can be stored in the Orphan block pool. +orphan_storage_capacity = 120 +#orphan_db_clean_out_threshold = 0 +# The pruning horizon. Default value is "0", which indicates an archival node without any pruning. +pruning_horizon = 0 +# The amount of messages that will be permitted in the flood ban timespan of 100s +flood_ban_max_msg_count = 10000 +# The relative path to store persistent data +data_dir = "/blockchain/weatherwax" +# This allowlist provides a method to force syncing from any known nodes you may choose +# force_sync_peers = ["public_key1::address1", "public_key2::address2",... ] +force_sync_peers = [] +# Configure the maximum number of threads available for base node operation. +max_threads = 512 +# The number of threads to spawn and keep active at all times. The default is the number of cores available on this node. +core_threads = 4 +allow_test_addresses = false +grpc_enabled = true +# The socket to expose for the gRPC base node server. +grpc_base_node_address = "0.0.0.0:18142" +# The socket to expose for the gRPC wallet server. +grpc_console_wallet_address = "0.0.0.0:18143" +# A path to the file that stores your node identity and secret key +base_node_identity_file = "/var/tari/config/weatherwax/tari_base_node_id.json" +# A path to the file that stores your console wallet's node identity and secret key +console_wallet_identity_file = "/var/tari/config/weatherwax/tari_console_wallet_id.json" +# -------------- Transport configuration -------------- +transport = "tor" +tor_control_address = "/dns4/tor/tcp/9051" +# Overridden by the docker environment variables +tor_control_auth = "password=tari" +tor_onion_port = 18141 +tor_forward_address = "/dns4/base_node/tcp/18189" +tor_socks_address_override="/dns4/tor/tcp/9050" +base_node_tor_identity_file = "/var/tari/config/weatherwax/base_node_tor.json" +console_wallet_tor_identity_file = "/var/tari/config/weatherwax/console_wallet_tor.json" +# Optionally bind an additional TCP socket for inbound Tari P2P protocol commms. +# auxilary_tcp_listener_address = "/ip4/127.0.0.1/tcp/9998" +# When these addresses are encountered when dialing another peer, the tor proxy is bypassed and the connection is made +# direcly over TCP. /ip4, /ip6, /dns, /dns4 and /dns6 are supported. +# tor_proxy_bypass_addresses = ["/dns4/my-foo-base-node/tcp/9998"] +# When using the tor transport and set to true, outbound TCP connections bypass the tor proxy. Defaults to false for better privacy +# tor_proxy_bypass_for_outbound_tcp = false; + +[base_node.igor] +db_type = "lmdb" +#pruning_horizon = 0 +flood_ban_max_msg_count = 10000 +data_dir = "/blockchain/igor" +allow_test_addresses = false +grpc_enabled = true +grpc_base_node_address = "127.0.0.1:18142" +grpc_console_wallet_address = "127.0.0.1:18143" +base_node_identity_file = "/var/tari/config/igor/base_node_id.json" +console_wallet_identity_file = "/var/tari/config/igor/console_wallet_id.json" + +# -------------- Transport configuration -------------- +transport = "tor" +tor_control_address = "/dns4/tor/tcp/9051" +tor_control_auth = "password=tari" +tor_onion_port = 18141 +tor_forward_address = "/dns4/base_node/tcp/18189" +tor_socks_address_override="/dns4/tor/tcp/9050" +base_node_tor_identity_file = "/var/tari/config/igor/base_node_tor.json" +console_wallet_tor_identity_file = "/var/tari/config/igor/console_wallet_tor.json" +# auxilary_tcp_listener_address = "/ip4/127.0.0.1/tcp/9998" +# tor_proxy_bypass_addresses = ["/dns4/my-foo-base-node/tcp/9998"] +# tor_proxy_bypass_for_outbound_tcp = false; + +######################################################################################################################## +# Mempool Configuration Options # +######################################################################################################################## + +[mempool.weatherwax] + +[mempool.igor] + + diff --git a/applications/launchpad/backend/assets/log4rs.yml b/applications/launchpad/backend/assets/log4rs.yml new file mode 100644 index 0000000000..7982521aa0 --- /dev/null +++ b/applications/launchpad/backend/assets/log4rs.yml @@ -0,0 +1,162 @@ +# A customised logfile configuration for running the Tari system in docker + +# timestamp [target] LEVEL message +refresh_rate: 30 seconds +appenders: + # An appender named "stdout" that writes to stdout + stdout: + kind: console + encoder: + pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {h({l}):5} {m}{n}" + + # An appender named "network" that writes to a file with a custom pattern encoder + network: + kind: rolling_file + path: "log/network.log" + policy: + kind: compound + trigger: + kind: size + limit: 10mb + roller: + kind: fixed_window + base: 1 + count: 5 + pattern: "log/network.{}.log" + encoder: + pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {l:5} {m}{n}" + + # An appender named "core" that writes to a file with a custom pattern encoder + core: + kind: rolling_file + path: "log/core.log" + policy: + kind: compound + trigger: + kind: size + limit: 10mb + roller: + kind: fixed_window + base: 1 + count: 5 + pattern: "log/core.{}.log" + encoder: + pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {l:5} {m}{n}" + + # An appender named "other" that writes to a file with a custom pattern encoder + other: + kind: rolling_file + path: "log/other.log" + policy: + kind: compound + trigger: + kind: size + limit: 10mb + roller: + kind: fixed_window + base: 1 + count: 5 + pattern: "log/other.{}.log" + encoder: + pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {l:5} {m}{n}" + +# Set the default logging level to "info" +root: + level: info + appenders: + - core + - stdout + +loggers: + # All events that get logged to core. Many of these are in separate log folders corresponding to their docker containers + tari::application: + level: info + appenders: + - core + additive: false + base_node::app: + level: info + appenders: + - core + additive: false + c: + level: info + appenders: + - core + additive: false + tari: + level: info + appenders: + - core + additive: false + wallet: + level: info + appenders: + - core + additive: false + tari_mining_node: + level: info + appenders: + - core + additive: false + tari_mm_proxy: + level: info + appenders: + - core + additive: false + + tracing: + level: info + appenders: + - other + additive: false + + + # Comms messages get logged to the 'network' log + comms: + level: info + appenders: + - network + additive: false + tari_comms: + level: info + appenders: + - network + additive: false + p2p: + level: info + appenders: + - network + additive: false + yamux: + level: warn + appenders: + - network + additive: false + mio: + level: error + appenders: + - network + additive: false + + # Miscellaneous events. Log these in 'other' + rustyline: + level: error + appenders: + - other + additive: false + tokio_util: + level: error + appenders: + - other + additive: false + pgp: + level: warn + appenders: + - other + additive: false + stress_test: + level: info + appenders: + - other + additive: false diff --git a/applications/launchpad/backend/assets/torrc b/applications/launchpad/backend/assets/torrc new file mode 100644 index 0000000000..d05b2c7526 --- /dev/null +++ b/applications/launchpad/backend/assets/torrc @@ -0,0 +1,2 @@ +# see settings.rs::tor_cmd() for settings sent to docker container + diff --git a/applications/launchpad/backend/icons/android-icon-192x192.png b/applications/launchpad/backend/icons/android-icon-192x192.png new file mode 100644 index 0000000000..19a7b783c0 Binary files /dev/null and b/applications/launchpad/backend/icons/android-icon-192x192.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-114x114.png b/applications/launchpad/backend/icons/apple-icon-114x114.png new file mode 100644 index 0000000000..5c4d95a0ae Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-114x114.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-120x120.png b/applications/launchpad/backend/icons/apple-icon-120x120.png new file mode 100644 index 0000000000..03ee8dabbc Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-120x120.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-144x144.png b/applications/launchpad/backend/icons/apple-icon-144x144.png new file mode 100644 index 0000000000..0546994fae Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-144x144.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-152x152.png b/applications/launchpad/backend/icons/apple-icon-152x152.png new file mode 100644 index 0000000000..795baaaf1d Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-152x152.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-180x180.png b/applications/launchpad/backend/icons/apple-icon-180x180.png new file mode 100644 index 0000000000..874e750cf1 Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-180x180.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-57x57.png b/applications/launchpad/backend/icons/apple-icon-57x57.png new file mode 100644 index 0000000000..0ce9b1b437 Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-57x57.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-57x57.png.1 b/applications/launchpad/backend/icons/apple-icon-57x57.png.1 new file mode 100644 index 0000000000..0ce9b1b437 Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-57x57.png.1 differ diff --git a/applications/launchpad/backend/icons/apple-icon-60x60.png b/applications/launchpad/backend/icons/apple-icon-60x60.png new file mode 100644 index 0000000000..1ff8fcc7ce Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-60x60.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-72x72.png b/applications/launchpad/backend/icons/apple-icon-72x72.png new file mode 100644 index 0000000000..86a4c7210d Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-72x72.png differ diff --git a/applications/launchpad/backend/icons/apple-icon-76x76.png b/applications/launchpad/backend/icons/apple-icon-76x76.png new file mode 100644 index 0000000000..7b29c60b96 Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-76x76.png differ diff --git a/applications/launchpad/backend/icons/favicon-16x16.png b/applications/launchpad/backend/icons/favicon-16x16.png new file mode 100644 index 0000000000..223883aacc Binary files /dev/null and b/applications/launchpad/backend/icons/favicon-16x16.png differ diff --git a/applications/launchpad/backend/icons/favicon-32x32.png b/applications/launchpad/backend/icons/favicon-32x32.png new file mode 100644 index 0000000000..bbe1e1bb6b Binary files /dev/null and b/applications/launchpad/backend/icons/favicon-32x32.png differ diff --git a/applications/launchpad/backend/icons/favicon-96x96.png b/applications/launchpad/backend/icons/favicon-96x96.png new file mode 100644 index 0000000000..6cbdcfe045 Binary files /dev/null and b/applications/launchpad/backend/icons/favicon-96x96.png differ diff --git a/applications/launchpad/backend/icons/icon.ico b/applications/launchpad/backend/icons/icon.ico new file mode 100644 index 0000000000..b3636e4b22 Binary files /dev/null and b/applications/launchpad/backend/icons/icon.ico differ diff --git a/applications/launchpad/backend/icons/icon.png b/applications/launchpad/backend/icons/icon.png new file mode 100644 index 0000000000..329808c607 Binary files /dev/null and b/applications/launchpad/backend/icons/icon.png differ diff --git a/applications/launchpad/backend/icons/tari_issues.png b/applications/launchpad/backend/icons/tari_issues.png new file mode 100644 index 0000000000..c559ff3047 Binary files /dev/null and b/applications/launchpad/backend/icons/tari_issues.png differ diff --git a/applications/launchpad/backend/package.json b/applications/launchpad/backend/package.json new file mode 100644 index 0000000000..0e8324338f --- /dev/null +++ b/applications/launchpad/backend/package.json @@ -0,0 +1,7 @@ +{ + "name": "tari_launchpad", + "version": "1.0.0", + "scripts": { + "tauri": "node ../../tooling/cli.js/bin/tauri" + } +} \ No newline at end of file diff --git a/applications/launchpad/backend/src/build.rs b/applications/launchpad/backend/src/build.rs new file mode 100644 index 0000000000..d860e1e6a7 --- /dev/null +++ b/applications/launchpad/backend/src/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/applications/launchpad/backend/src/commands/create_workspace.rs b/applications/launchpad/backend/src/commands/create_workspace.rs new file mode 100644 index 0000000000..95b6a6cac3 --- /dev/null +++ b/applications/launchpad/backend/src/commands/create_workspace.rs @@ -0,0 +1,67 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::path::Path; + +use log::*; +use tauri::{ + api::path::{resolve_path, BaseDirectory}, + AppHandle, + Config, + Manager, + PackageInfo, + Wry, +}; + +use crate::{commands::AppState, docker::create_workspace_folders, error::LauncherError}; + +/// Create a new workspace environment by creating a folder hierarchy (if required) at the `root_folder`, and copying +/// the default config files into it. +#[tauri::command] +pub fn create_new_workspace(app: AppHandle, root_path: String) -> Result<(), String> { + let config = app.config(); + let package_info = &app.state::().package_info; + let _ = create_workspace_folders(root_path.as_str()).map_err(|e| e.chained_message()); + let path = Path::new(&root_path); + copy_config_file(path, config.as_ref(), package_info, "log4rs.yml").map_err(|e| e.chained_message())?; + copy_config_file(path, config.as_ref(), package_info, "config.toml").map_err(|e| e.chained_message())?; + info!("Workspace at {} complete!", root_path); + Ok(()) +} + +pub fn copy_config_file>( + root_path: S, + config: &Config, + package_info: &PackageInfo, + file: &str, +) -> Result<(), LauncherError> { + let path = Path::new("assets").join(file); + let config_path = resolve_path(config, package_info, &path, Some(BaseDirectory::Resource))?; + let cfg = std::fs::read_to_string(&config_path).expect("The config assets were not bundled with the App"); + info!("Log Configuration file ({}) loaded", file); + debug!("{}", cfg); + let dest = root_path.as_ref().join("config").join(file); + std::fs::write(&dest, &cfg)?; + info!("Log configuration file ({}) saved to workspace", file); + Ok(()) +} diff --git a/applications/launchpad/backend/src/commands/events.rs b/applications/launchpad/backend/src/commands/events.rs new file mode 100644 index 0000000000..2ab0097251 --- /dev/null +++ b/applications/launchpad/backend/src/commands/events.rs @@ -0,0 +1,65 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use futures::StreamExt; +use log::*; +use tauri::{AppHandle, Manager, Wry}; + +use crate::commands::AppState; + +/// Subscribe to system-level docker events, such as container creation, volume, network events etc. +/// This function does not actually return a result, but async commands have a [bug](https://github.com/tauri-apps/tauri/issues/2533) +/// which is avoided by returning a `Result`. +/// +/// A side effect of this command is that events are emitted to the `tari://docker-system-event` channel. Front-ends +/// can listen to this event stream to read in the event messages. +#[tauri::command] +pub async fn events(app: AppHandle) -> Result<(), ()> { + info!("Setting up event stream"); + let state = app.state::(); + let docker = state.docker.read().await; + let mut stream = docker.events().await; + let app_clone = app.clone(); + tauri::async_runtime::spawn(async move { + while let Some(event_result) = stream.next().await { + match event_result { + Ok(event) => { + debug!("Event received: {:?}", event); + if let Err(err) = app_clone.emit_all(event_name(), event) { + warn!("Could not emit event to front-end, {:?}", err); + } + }, + Err(err) => { + warn!("Error in event stream: {:#?}", err) + }, + }; + } + info!("Event stream has closed."); + }); + Ok(()) +} + +/// Extract data from the event object so we know which channel to emit the payload to +pub fn event_name() -> &'static str { + "tari://docker-system-event" +} diff --git a/applications/launchpad/backend/src/commands/launch_docker.rs b/applications/launchpad/backend/src/commands/launch_docker.rs new file mode 100644 index 0000000000..3f9a70be0e --- /dev/null +++ b/applications/launchpad/backend/src/commands/launch_docker.rs @@ -0,0 +1,192 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::{convert::TryFrom, path::PathBuf, time::Duration}; + +use log::*; +use serde::{Deserialize, Serialize}; +use tauri::{AppHandle, Manager, Wry}; + +use crate::{ + commands::AppState, + docker::{ + helpers::create_password, + BaseNodeConfig, + DockerWrapperError, + LaunchpadConfig, + MmProxyConfig, + Sha3MinerConfig, + TariNetwork, + TariWorkspace, + WalletConfig, + XmRigConfig, + DEFAULT_MINING_ADDRESS, + }, + error::LauncherError, +}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct WorkspaceLaunchOptions { + root_folder: String, + tari_network: String, + has_base_node: bool, + has_wallet: bool, + has_sha3_miner: bool, + has_mm_proxy: bool, + has_xmrig: bool, + wait_for_tor: Option, + wallet_password: Option, + sha3_mining_threads: Option, + monerod_url: Option, + monero_username: Option, + monero_password: Option, + monero_use_auth: Option, + monero_mining_address: Option, + docker_registry: Option, + docker_tag: Option, +} + +impl TryFrom for LaunchpadConfig { + type Error = LauncherError; + + fn try_from(options: WorkspaceLaunchOptions) -> Result { + let tari_network = TariNetwork::try_from(options.tari_network.to_lowercase().as_str())?; + let tor_control_password = create_password(16); + let tor_delay = Duration::from_secs(options.wait_for_tor.unwrap_or(10)); + let base_node = match options.has_base_node { + false => None, + true => Some(BaseNodeConfig { delay: tor_delay }), + }; + let wallet = match options.has_wallet { + false => None, + true => { + if options.wallet_password.is_none() { + return Err(LauncherError::ConfigVariableRequired( + "wallet".to_string(), + "wallet_password".to_string(), + )); + } + Some(WalletConfig { + delay: tor_delay, + password: options.wallet_password.unwrap(), + }) + }, + }; + let sha3_miner = match options.has_sha3_miner { + false => None, + true => Some(Sha3MinerConfig { + delay: Duration::from_secs(options.wait_for_tor.unwrap_or(15)), + num_mining_threads: options.sha3_mining_threads.unwrap_or(1), + }), + }; + let mm_proxy = match options.has_mm_proxy { + false => None, + true => { + let mut config = MmProxyConfig { + delay: Duration::from_secs(options.wait_for_tor.unwrap_or(15)), + ..Default::default() + }; + if let Some(val) = options.monerod_url { + config.monerod_url = val; + } + if let Some(val) = options.monero_username { + config.monero_username = val; + } + if let Some(val) = options.monero_password { + config.monero_password = val; + } + if let Some(val) = options.monero_use_auth { + config.monero_use_auth = val; + } + Some(config) + }, + }; + let xmrig = match options.has_xmrig { + false => None, + true => { + let monero_mining_address = options + .monero_mining_address + .unwrap_or_else(|| DEFAULT_MINING_ADDRESS.to_string()); + Some(XmRigConfig { + delay: Duration::from_secs(options.wait_for_tor.unwrap_or(20)), + monero_mining_address, + }) + }, + }; + Ok(LaunchpadConfig { + data_directory: PathBuf::from(options.root_folder), + tari_network, + tor_control_password, + base_node, + wallet, + sha3_miner, + mm_proxy, + xmrig, + registry: options.docker_registry, + tag: options.docker_tag, + }) + } +} + +/// This is an example of how we might launch a recipe. It's not currently used in the front-end, but essentially it +/// launches all the containers in a choreographed fashion to stand up the entire mining infra. +#[tauri::command] +pub async fn launch_docker(app: AppHandle, name: String, config: WorkspaceLaunchOptions) -> Result<(), String> { + launch_docker_impl(app, name, config) + .await + .map_err(|e| e.chained_message()) +} + +async fn launch_docker_impl( + app: AppHandle, + name: String, + config: WorkspaceLaunchOptions, +) -> Result<(), LauncherError> { + debug!("Starting docker launch sequence"); + let state = app.state::(); + let docker = state.docker_handle().await; + let should_create_workspace = { + let wrapper = state.workspaces.read().await; + !wrapper.workspace_exists(name.as_str()) + }; // drop read-only lock + { + let mut wrapper = state.workspaces.write().await; + // Now that we have a write lock, we can create a new workspace if required + if should_create_workspace { + let config = LaunchpadConfig::try_from(config)?; + info!( + "Docker workspace does not exist. Creating one with config, {:#?}", + config + ); + wrapper.create_workspace(name.as_str(), config)?; + } + info!("Launching Tari workspace, {}", name); + let workspace: &mut TariWorkspace = wrapper + .get_workspace_mut(name.as_str()) + .ok_or(DockerWrapperError::UnexpectedError)?; + // Pipe docker container logs to Tauri using namespaced events + workspace.start_recipe(docker.clone()).await?; + } // Drop write lock + info!("Tari system, {} has launched", name); + Ok(()) +} diff --git a/applications/installer/src/config/base_node.rs b/applications/launchpad/backend/src/commands/mod.rs similarity index 66% rename from applications/installer/src/config/base_node.rs rename to applications/launchpad/backend/src/commands/mod.rs index d3ab644bcc..1810a984a5 100644 --- a/applications/installer/src/config/base_node.rs +++ b/applications/launchpad/backend/src/commands/mod.rs @@ -19,27 +19,26 @@ // 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. +// -use crate::config::common::{InstallLocation, SourceLocation}; - -pub struct BaseNodeOptions { - // Where do we get the base node code from? - source: SourceLocation, - // Where do the base node and related files live? - install_location: InstallLocation, - // Tor setup - tor_options: TorOptions, -} - -pub enum TorLocation { - // Use the globally instaled system version of tor - System, - // Run Tor from a docker image - Docker, - // Install a new version of Tor in the base node executable folder - Local, -} +/// ! This module defines all the Tauri commands we expose to the front-end. +/// ! These are generally constructed as wrappers around the lower-level methods in the `docker` module. +/// ! All the commands follow roughly the same pattern: +/// ! - handle input parameters +/// ! - call the the underlying function +/// ! - Map results to JSON and errors to String. +mod create_workspace; +mod events; +mod launch_docker; +mod pull_images; +mod service; +mod shutdown; +mod state; -pub struct TorOptions { - location: TorLocation, -} +pub use create_workspace::create_new_workspace; +pub use events::events; +pub use launch_docker::launch_docker; +pub use pull_images::{image_list, pull_images}; +pub use service::{create_default_workspace, start_service, stop_service}; +pub use shutdown::shutdown; +pub use state::AppState; diff --git a/applications/launchpad/backend/src/commands/pull_images.rs b/applications/launchpad/backend/src/commands/pull_images.rs new file mode 100644 index 0000000000..8a7bc990a3 --- /dev/null +++ b/applications/launchpad/backend/src/commands/pull_images.rs @@ -0,0 +1,99 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use bollard::models::CreateImageInfo; +use futures::{future::join_all, stream::StreamExt, TryFutureExt}; +use serde::Serialize; +use tauri::{AppHandle, Manager, Wry}; + +use crate::{ + commands::AppState, + docker::{ImageType, TariWorkspace}, + error::LauncherError, +}; + +#[derive(Debug, Clone, Serialize)] +pub struct Payload { + image: String, + name: String, + info: CreateImageInfo, +} + +pub static DEFAULT_IMAGES: [ImageType; 8] = [ + ImageType::BaseNode, + ImageType::Wallet, + ImageType::Sha3Miner, + ImageType::Tor, + ImageType::MmProxy, + ImageType::XmRig, + ImageType::Monerod, + ImageType::Frontail, +]; + +/// Provide a list of image names in the Tari "ecosystem" +#[tauri::command] +pub fn image_list() -> Vec { + DEFAULT_IMAGES + .iter() + .map(|&image| image.image_name().to_string()) + .collect() +} + +/// Pulls all the images concurrently using the docker API. +#[tauri::command] +pub async fn pull_images(app: AppHandle) -> Result<(), String> { + let futures = DEFAULT_IMAGES + .iter() + .map(|image| pull_image(*image, app.clone()).map_err(|e| e.chained_message())); + let results: Vec> = join_all(futures).await; + let errors = results + .into_iter() + .filter(|r| r.is_err()) + .map(|e| e.unwrap_err()) + .collect::>(); + if !errors.is_empty() { + return Err(errors.join("\n")); + } + Ok(()) +} + +async fn pull_image(image: ImageType, app: AppHandle) -> Result<(), LauncherError> { + let state = app.state::().clone(); + let docker = state.docker.read().await; + let image_name = TariWorkspace::fully_qualified_image(image, None, None); + let mut stream = docker.pull_image(image_name.clone()).await; + while let Some(update) = stream.next().await { + match update { + Ok(progress) => { + let payload = Payload { + image: image_name.clone(), + name: image.image_name().to_string(), + info: progress, + }; + app.emit_all("image-pull-progress", payload)? + }, + Err(err) => return Err(err.into()), + }; + } + Ok(()) +} diff --git a/applications/launchpad/backend/src/commands/service.rs b/applications/launchpad/backend/src/commands/service.rs new file mode 100644 index 0000000000..2292235e6c --- /dev/null +++ b/applications/launchpad/backend/src/commands/service.rs @@ -0,0 +1,348 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::{convert::TryFrom, path::PathBuf, time::Duration}; + +use bollard::Docker; +use futures::StreamExt; +use log::*; +use serde::{Deserialize, Serialize}; +use tauri::{AppHandle, Manager, State, Wry}; + +use crate::{ + commands::{create_workspace::copy_config_file, AppState}, + docker::{ + create_workspace_folders, + helpers::create_password, + BaseNodeConfig, + ContainerId, + DockerWrapperError, + ImageType, + LaunchpadConfig, + MmProxyConfig, + Sha3MinerConfig, + TariNetwork, + TariWorkspace, + WalletConfig, + XmRigConfig, + DEFAULT_MINING_ADDRESS, + DEFAULT_MONEROD_URL, + }, + error::LauncherError, +}; + +/// "Global" settings from the launcher front-end +#[derive(Clone, Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ServiceSettings { + pub tari_network: String, + pub root_folder: String, + pub wallet_password: String, + pub monero_mining_address: Option, + pub num_mining_threads: i64, + pub docker_registry: Option, + pub docker_tag: Option, + pub monerod_url: Option, + pub monero_username: Option, + pub monero_password: Option, + pub monero_use_auth: Option, +} + +impl TryFrom for LaunchpadConfig { + type Error = LauncherError; + + fn try_from(settings: ServiceSettings) -> Result { + let tari_network = TariNetwork::try_from(settings.tari_network.to_lowercase().as_str())?; + let tor_control_password = create_password(16); + // Since most services are launched manually, we set the delay value to zero. + let zero_delay = Duration::from_secs(0); + let base_node = BaseNodeConfig { delay: zero_delay }; + let wallet = WalletConfig { + delay: zero_delay, + password: settings.wallet_password, + }; + let sha3_miner = Sha3MinerConfig { + delay: zero_delay, + num_mining_threads: settings.num_mining_threads as usize, + }; + let mut mm_proxy = MmProxyConfig { + delay: zero_delay, + monerod_url: settings.monerod_url.unwrap_or_else(|| DEFAULT_MONEROD_URL.to_string()), + ..Default::default() + }; + if let Some(val) = settings.monero_use_auth { + mm_proxy.monero_use_auth = val; + mm_proxy.monero_username = settings.monero_username.unwrap_or_else(|| "".to_string()); + mm_proxy.monero_password = settings.monero_password.unwrap_or_else(|| "".to_string()); + } + let monero_mining_address = settings + .monero_mining_address + .unwrap_or_else(|| DEFAULT_MINING_ADDRESS.to_string()); + let xmrig = XmRigConfig { + delay: Duration::from_secs(15), // Needs to wait for mm_proxy to be ready + monero_mining_address, + }; + Ok(LaunchpadConfig { + data_directory: PathBuf::from(settings.root_folder), + tari_network, + tor_control_password, + base_node: Some(base_node), + wallet: Some(wallet), + sha3_miner: Some(sha3_miner), + mm_proxy: Some(mm_proxy), + xmrig: Some(xmrig), + registry: settings.docker_registry, + tag: settings.docker_tag, + }) + } +} + +/// [`start_service`] returns some useful info that the front-end can use to control the docker environment. +/// In particular, the log and stats event names tell the front end which channels events will be broadcast on. +#[derive(Clone, Debug, Serialize)] +#[serde(rename_all(serialize = "camelCase"))] +pub struct StartServiceResult { + /// The name of the service that was created + name: String, + /// The docker id of the container. Some commands need an id rather than the name. + id: String, + /// What action was taken. Currently not used. + action: String, + /// The name of the event stream to subscribe to for log events. These are the _docker_ logs and not the base node + /// _et. al._ logs. Those are saved to disk and accessible using the usual means, or with frontail. + log_events_name: String, + /// The name of the event stream to subscribe to for resource events (CPU, memory etc). + stats_events_name: String, +} + +/// Starts the specified service +/// +/// The workspace will be created if this is the first call to `start_service`. Otherwise, the settings from the first +/// call will be used and `settings` will be ignored. +/// +/// Starting a service also: +/// - creates a new workspace, if required +/// - creates a network for the network, if required +/// - creates new volumes, if required +/// - creates new node identities, if required +/// - launches the container +/// - creates the log stream +/// - creates the resource stats stream +#[tauri::command] +pub async fn start_service( + app: AppHandle, + service_name: String, + settings: ServiceSettings, +) -> Result { + start_service_impl(app, service_name, settings).await.map_err(|e| { + let error = e.chained_message(); + error!("{}", error); + error + }) +} + +/// Stops the specified service +/// +/// Stops the container, if it is running. action is " +/// Then, deletes the container. +/// Returns the container id +#[tauri::command] +pub async fn stop_service(state: State<'_, AppState>, service_name: String) -> Result<(), String> { + stop_service_impl(state, service_name).await.map_err(|e| e.to_string()) +} + +/// The "default" workspace is one that is used in the manual front-end configuration (each container is started and +/// stopped manually) +#[tauri::command] +pub async fn create_default_workspace(app: AppHandle, settings: ServiceSettings) -> Result { + create_default_workspace_impl(app, settings).await.map_err(|e| { + let error = e.chained_message(); + error!("{}", error); + error + }) +} + +async fn create_default_workspace_impl(app: AppHandle, settings: ServiceSettings) -> Result { + let config = LaunchpadConfig::try_from(settings)?; + let state = app.state::(); + let app_config = app.config(); + let should_create_workspace = { + let wrapper = state.workspaces.read().await; + !wrapper.workspace_exists("default") + }; // drop read-only lock + if should_create_workspace { + let package_info = &state.package_info; + let _ = create_workspace_folders(&config.data_directory).map_err(|e| e.chained_message()); + copy_config_file(&config.data_directory, app_config.as_ref(), package_info, "log4rs.yml")?; + copy_config_file(&config.data_directory, app_config.as_ref(), package_info, "config.toml")?; + // Only get a write-lock if we need one + let mut wrapper = state.workspaces.write().await; + wrapper.create_workspace("default", config)?; + } + Ok(should_create_workspace) +} + +async fn start_service_impl( + app: AppHandle, + service_name: String, + settings: ServiceSettings, +) -> Result { + let state = app.state::(); + let docker = state.docker_handle().await; + let _ = create_default_workspace_impl(app.clone(), settings).await?; + let mut wrapper = state.workspaces.write().await; + debug!("Starting {} service", service_name); + // We've just checked this, so it should never fail: + let workspace: &mut TariWorkspace = wrapper + .get_workspace_mut("default") + .ok_or(DockerWrapperError::UnexpectedError)?; + // Check the identity requirements for the service + let ids = workspace.create_or_load_identities()?; + for id in ids.values() { + debug!("Identity loaded: {}", id); + } + // Check network requirements for the service + if !workspace.network_exists(&docker).await? { + workspace.create_network(&docker).await?; + } + // Launch the container + let registry = workspace.config().registry.clone(); + let tag = workspace.config().tag.clone(); + let image = ImageType::try_from(service_name.as_str())?; + let container_name = workspace.start_service(image, registry, tag, docker.clone()).await?; + let state = workspace + .container_mut(container_name.as_str()) + .ok_or(DockerWrapperError::UnexpectedError)?; + let id = state.id().to_string(); + let stats_events_name = stats_event_name(state.id()); + let log_events_name = log_event_name(state.name()); + // Set up event streams + container_logs( + app.clone(), + log_events_name.as_str(), + container_name.as_str(), + docker.clone(), + workspace, + ); + container_stats( + app.clone(), + stats_events_name.as_str(), + container_name.as_str(), + docker.clone(), + workspace, + ); + // Collect data for the return object + let result = StartServiceResult { + name: service_name, + id, + action: "unimplemented".to_string(), + log_events_name, + stats_events_name, + }; + info!("Tari service {} has launched", image.container_name()); + Ok(result) +} + +pub fn log_event_name(container_name: &str) -> String { + format!("tari://docker_log_{}", container_name) +} + +pub fn stats_event_name(container_id: &ContainerId) -> String { + format!("tari://docker_stats_{}", container_id.as_str()) +} + +fn container_logs( + app: AppHandle, + event_name: &str, + container_name: &str, + docker: Docker, + workspace: &mut TariWorkspace, +) { + info!("Setting up log events for {}", container_name); + if let Some(mut stream) = workspace.logs(container_name, docker) { + let event_name = event_name.to_string(); + tauri::async_runtime::spawn(async move { + while let Some(message) = stream.next().await { + trace!("log event: {:?}", message); + let emit_result = match message { + Ok(payload) => app.emit_all(event_name.as_str(), payload), + Err(err) => app.emit_all(format!("{}_error", event_name).as_str(), err.chained_message()), + }; + if let Err(err) = emit_result { + warn!("Error emitting event: {}", err.to_string()); + } + } + info!("Log stream for {} has closed.", event_name); + }); + info!("Container log events configured."); + } else { + info!( + "Log events could not be configured: {} is not a running container", + container_name + ); + } +} + +fn container_stats( + app: AppHandle, + event_name: &str, + container_name: &str, + docker: Docker, + workspace: &mut TariWorkspace, +) { + info!("Setting up Resource stats events for {}", container_name); + if let Some(mut stream) = workspace.resource_stats(container_name, docker) { + let event_name = event_name.to_string(); + tauri::async_runtime::spawn(async move { + while let Some(message) = stream.next().await { + trace!("log event: {:?}", message); + let emit_result = match message { + Ok(payload) => app.emit_all(event_name.as_str(), payload), + Err(err) => app.emit_all(format!("{}_error", event_name).as_str(), err.chained_message()), + }; + if let Err(err) = emit_result { + warn!("Error emitting event: {}", err.to_string()); + } + } + info!("Resource stats stream for {} has closed.", event_name); + }); + info!("Resource stats events configured."); + } else { + info!( + "Resource stats events could not be configured: {} is not a running container", + container_name + ); + } +} + +async fn stop_service_impl(state: State<'_, AppState>, service_name: String) -> Result<(), LauncherError> { + let docker = state.docker_handle().await; + let mut wrapper = state.workspaces.write().await; + debug!("Stopping {} service", service_name); + // We've just checked this, so it should never fail: + let workspace: &mut TariWorkspace = wrapper + .get_workspace_mut("default") + .ok_or_else(|| DockerWrapperError::WorkspaceDoesNotExist("default".into()))?; + workspace.stop_container(service_name.as_str(), true, &docker).await; + Ok(()) +} diff --git a/applications/installer/src/config/mining.rs b/applications/launchpad/backend/src/commands/shutdown.rs similarity index 64% rename from applications/installer/src/config/mining.rs rename to applications/launchpad/backend/src/commands/shutdown.rs index f344d57c5a..d5c1031dd4 100644 --- a/applications/installer/src/config/mining.rs +++ b/applications/launchpad/backend/src/commands/shutdown.rs @@ -19,31 +19,29 @@ // 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. +// -use crate::config::{InstallLocation, SourceLocation}; - -pub enum PoolStrategy { - Solo, - Pool, -} - -pub enum Miners { - None, - Sha3Only(PoolStrategy), - MergeMineOnly(PoolStrategy), - Both { - sha3: PoolStrategy, - merge_mine: PoolStrategy, - }, -} +use log::*; +use tauri::State; -pub struct MiningOptions { - source: SourceLocation, - install_location: InstallLocation, - miners: Miners, -} +use crate::commands::AppState; -pub struct XmRigOptions { - source: SourceLocation, - install_location: InstallLocation, +/// Gracefully shutdown all containers and delete them. Blockchain volumes are preserved. +#[tauri::command] +// Return a Result until https://github.com/tauri-apps/tauri/issues/2533 is fixed +pub async fn shutdown(state: State<'_, AppState>) -> Result { + info!("Shutting down"); + let docker = state.docker_handle().await; + let mut workspaces = state.workspaces.write().await; + let msg = match workspaces.shutdown(&docker).await { + Ok(()) => { + info!("Docker has shut down"); + "Docker has shut down" + }, + Err(e) => { + warn!("Docker may not have shut down gracefully. {}", e.chained_message()); + "Docker was not cleanly shut down. See logs for details" + }, + }; + Ok(msg.to_string()) } diff --git a/applications/launchpad/backend/src/commands/state.rs b/applications/launchpad/backend/src/commands/state.rs new file mode 100644 index 0000000000..fbd1a39c4d --- /dev/null +++ b/applications/launchpad/backend/src/commands/state.rs @@ -0,0 +1,56 @@ +use bollard::Docker; +use tauri::PackageInfo; +use tokio::sync::RwLock as AsyncLock; + +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the +// following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +// DAMAGE. +use crate::docker::{DockerWrapper, Workspaces}; + +/// The state variables that are managed by Tauri. Since the whole app is asynchronous, we need to store +/// * the [`Workspaces`] object. This tracks global config settings, which containers we are running, and what their +/// status is. +/// * A handle to the docker API, via the [`DockerWrapper`] struct. The convenience function [`docker_handle`] gives you +/// a cheap, thread-safe clone to the underlying docker API. +/// * Package info, because Tauri doesn't give us an easy way to get at that in command callbacks for some reason. +/// +/// Things that are mutable (docker, workspaces) are behind an [`AsyncLock`] for thread safety. +pub struct AppState { + pub docker: AsyncLock, + pub workspaces: AsyncLock, + pub package_info: PackageInfo, +} + +impl AppState { + pub fn new(docker: DockerWrapper, workspaces: Workspaces, package_info: PackageInfo) -> Self { + Self { + docker: AsyncLock::new(docker), + workspaces: AsyncLock::new(workspaces), + package_info, + } + } + + pub async fn docker_handle(&self) -> Docker { + let wrapper = self.docker.read().await; + wrapper.handle() + } +} diff --git a/applications/installer/src/config/common.rs b/applications/launchpad/backend/src/docker/error.rs similarity index 52% rename from applications/installer/src/config/common.rs rename to applications/launchpad/backend/src/docker/error.rs index 8c26809355..07f4b8a864 100644 --- a/applications/installer/src/config/common.rs +++ b/applications/launchpad/backend/src/docker/error.rs @@ -19,62 +19,44 @@ // 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. +// -use std::path::PathBuf; - -#[cfg(target_os = "windows")] -const TARI_FOLDER: &str = "tari"; -#[cfg(any(target_os = "macos", target_os = "unix"))] -const TARI_FOLDER: &str = ".tari"; - -pub enum SourceLocation { - SourceCode(SourceCodeOptions), - Docker(DockerOptions), -} - -pub struct SourceCodeOptions {} - -pub struct DockerOptions {} - -pub struct InstallLocation { - config_folder: PathBuf, - executable_folder: PathBuf, - data_folder: PathBuf, +use std::error::Error; + +use tari_app_utilities::common::exit_codes::ExitCodes; +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum DockerWrapperError { + #[error("Something went wrong with the Docker API")] + DockerError(#[from] bollard::errors::Error), + #[error("Something went wrong on your filesystem")] + FileSystemError(#[from] std::io::Error), + #[error("The requested container id, {0} is not being managed by the wrapper")] + ContainerNotFound(String), + #[error("The designated workspace, {0}, already exists")] + WorkspaceAlreadyExists(String), + #[error("The designated workspace, {0}, does not exist")] + WorkspaceDoesNotExist(String), + #[error("The network is not supported")] + UnsupportedNetwork, + #[error("It should not be possible to be in this error state")] + UnexpectedError, + #[error("Could not create an identity file")] + IdentityError(#[from] ExitCodes), + #[error("The specified image type is not supported")] + InvalidImageType, } -impl Default for InstallLocation { - fn default() -> Self { - let mut home = dirs::home_dir().expect("No default home folder"); - let mut bin: PathBuf; - let data = dirs::data_dir().expect("No default data folder"); - #[cfg(target_os = "windows")] - { - home.push(TARI_FOLDER); - bin = PathBuf::from("C:\\Program Files"); - } - #[cfg(any(target_os = "macos", target_os = "unix"))] - { - bin = dirs::home_dir().expect("No default home folder"); - bin.push("bin"); - home.push(TARI_FOLDER); - } - - Self { - config_folder: home, - executable_folder: bin, - data_folder: data, +impl DockerWrapperError { + /// Combine all error messages down the chain into one string. + pub fn chained_message(&self) -> String { + let mut messages = vec![self.to_string()]; + let mut this = self as &dyn Error; + while let Some(next) = this.source() { + messages.push(next.to_string()); + this = next; } + messages.join(" caused by:\n") } } - -pub enum TariConfig { - Default, - Supplied(PathBuf), - Inline(String), -} - -pub enum Network { - Stibbons, - Weatherwax, - Mainnet, -} diff --git a/applications/launchpad/backend/src/docker/filesystem.rs b/applications/launchpad/backend/src/docker/filesystem.rs new file mode 100644 index 0000000000..d1a02d29ba --- /dev/null +++ b/applications/launchpad/backend/src/docker/filesystem.rs @@ -0,0 +1,72 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +//! This module does setup and clean up of the host's file system. +//! +//! The docker environment places some files in a volume, e.g. the blockchain db, but other files need to be accessible +//! from the host system, such as logs, and identity files. These all live in a 'workspace' folder, with several sub- +//! directories for the individual components living under it. + +use std::{fs, path::Path}; + +use log::*; +use strum::IntoEnumIterator; + +use crate::docker::{DockerWrapperError, ImageType}; + +/// Creates the folders required for a new workspace off of the given root folder. +/// IF the folders already exist, then nothing happens. +/// On Linux, the permissions are also set to allow world access +pub fn create_workspace_folders>(root: P) -> Result<(), DockerWrapperError> { + if !root.as_ref().exists() { + info!("Creating new workspace at {}", root.as_ref().to_str().unwrap_or("???")); + fs::create_dir(&root)? + } + let make_subfolder = |folder: &str| -> Result<(), std::io::Error> { + let p = root.as_ref().join(folder); + let p_str = p.as_path().to_str().unwrap_or("???"); + match p.exists() { + true => { + debug!("{} already exists", p_str); + Ok(()) + }, + false => { + info!("Creating new data folder, {}", p_str); + fs::create_dir(&p)?; + #[cfg(any(target_os = "linux", target_os = "macos"))] + { + use std::os::unix::fs::PermissionsExt; + let mut perms = std::fs::metadata(&p)?.permissions(); + perms.set_mode(0o777); + fs::set_permissions(&p, perms)?; + } + Ok(()) + }, + } + }; + let _ = make_subfolder("config")?; + for image in ImageType::iter() { + let _ = make_subfolder(image.data_folder())?; + } + Ok(()) +} diff --git a/applications/installer/src/config/mod.rs b/applications/launchpad/backend/src/docker/helpers.rs similarity index 84% rename from applications/installer/src/config/mod.rs rename to applications/launchpad/backend/src/docker/helpers.rs index 284fb5100d..3c32bbb1e9 100644 --- a/applications/installer/src/config/mod.rs +++ b/applications/launchpad/backend/src/docker/helpers.rs @@ -19,15 +19,12 @@ // 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. +// -mod base_node; -mod combined; -mod common; -mod mining; -mod wallet; +use rand::distributions::{Alphanumeric, Distribution}; -pub use base_node::BaseNodeOptions; -pub use combined::InstallerOptions; -pub use common::{InstallLocation, SourceLocation}; -pub use mining::{Miners, MiningOptions}; -pub use wallet::WalletOptions; +/// Create a cryptographically secure password on length `len` +pub fn create_password(len: usize) -> String { + let mut rng = rand::thread_rng(); + Alphanumeric.sample_iter(&mut rng).take(len).map(char::from).collect() +} diff --git a/applications/installer/src/config/combined.rs b/applications/launchpad/backend/src/docker/mod.rs similarity index 73% rename from applications/installer/src/config/combined.rs rename to applications/launchpad/backend/src/docker/mod.rs index c0bfb17542..a1814e2eb9 100644 --- a/applications/installer/src/config/combined.rs +++ b/applications/launchpad/backend/src/docker/mod.rs @@ -19,23 +19,29 @@ // 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. +// -use crate::config::{ - common::{Network, TariConfig}, - BaseNodeOptions, - MiningOptions, - WalletOptions, -}; +mod error; +mod filesystem; +mod models; +mod settings; +mod workspace; +mod wrapper; -pub struct InstallerOptions { - // Selects the netowrk to run - network: Network, - // A way of getting at the tari global configuration files - tari_config: TariConfig, - // Installer options for a base node - base_node_options: Option, - // Installer options for the console wallet - wallet_options: Option, - // Installer options for mining - mining_options: Option, -} +pub mod helpers; + +pub use error::DockerWrapperError; +pub use filesystem::create_workspace_folders; +pub use models::{ContainerId, ContainerState, ContainerStatus, ImageType, LogMessage, TariNetwork}; +pub use settings::{ + BaseNodeConfig, + LaunchpadConfig, + MmProxyConfig, + Sha3MinerConfig, + WalletConfig, + XmRigConfig, + DEFAULT_MINING_ADDRESS, + DEFAULT_MONEROD_URL, +}; +pub use workspace::{TariWorkspace, Workspaces}; +pub use wrapper::DockerWrapper; diff --git a/applications/launchpad/backend/src/docker/models.rs b/applications/launchpad/backend/src/docker/models.rs new file mode 100644 index 0000000000..9a5798dfc6 --- /dev/null +++ b/applications/launchpad/backend/src/docker/models.rs @@ -0,0 +1,261 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::{ + convert::TryFrom, + fmt::{Display, Formatter}, +}; + +use bollard::{container::LogOutput, models::ContainerCreateResponse}; +use serde::{Deserialize, Serialize}; +use strum_macros::EnumIter; + +use crate::docker::DockerWrapperError; + +//------------------------------------------- ContainerId ---------------------------------------------- +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct ContainerId(pub String); + +impl From for ContainerId { + fn from(s: String) -> Self { + Self(s) + } +} + +impl AsRef for ContainerId { + fn as_ref(&self) -> &str { + self.0.as_str() + } +} + +impl Display for ContainerId { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.write_str(self.0.as_str()) + } +} + +impl ContainerId { + pub fn as_str(&self) -> &str { + self.0.as_str() + } +} + +//------------------------------------------- ContainerStatus ---------------------------------------------- + +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +pub enum ContainerStatus { + Created, + Running, + Stopped, + Deleted, +} + +//------------------------------------------- ContainerState ---------------------------------------------- + +pub struct ContainerState { + name: String, + id: ContainerId, + info: ContainerCreateResponse, + status: ContainerStatus, +} + +impl ContainerState { + pub fn new(name: String, id: ContainerId, info: ContainerCreateResponse) -> Self { + Self { + name, + id, + info, + status: ContainerStatus::Created, + } + } + + pub fn running(&mut self) { + self.status = ContainerStatus::Running; + } + + pub fn set_stop(&mut self) { + self.status = ContainerStatus::Stopped; + } + + pub fn set_deleted(&mut self) { + self.status = ContainerStatus::Deleted; + } + + pub fn name(&self) -> &str { + self.name.as_str() + } + + pub fn info(&self) -> &ContainerCreateResponse { + &self.info + } + + pub fn id(&self) -> &ContainerId { + &self.id + } + + pub fn status(&self) -> ContainerStatus { + self.status + } +} + +//------------------------------------------- LogMessage ---------------------------------------------- + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LogMessage { + pub message: String, + pub source: String, +} + +impl From for LogMessage { + fn from(log: LogOutput) -> Self { + let (source, message) = match log { + LogOutput::StdErr { message } => ("StdErr".to_string(), String::from_utf8_lossy(&message).into_owned()), + LogOutput::StdOut { message } => ("StdOut".to_string(), String::from_utf8_lossy(&message).into_owned()), + LogOutput::Console { message } => ("Console".to_string(), String::from_utf8_lossy(&message).into_owned()), + LogOutput::StdIn { message } => ("StdIn".to_string(), String::from_utf8_lossy(&message).into_owned()), + }; + Self { source, message } + } +} + +//------------------------------------------- TariNetwork ---------------------------------------------- + +/// Supported networks for the launchpad +#[derive(Serialize, Debug, Deserialize, Clone, Copy)] +pub enum TariNetwork { + Weatherwax, + Igor, + Mainnet, +} + +impl TariNetwork { + pub fn lower_case(&self) -> &'static str { + match self { + Self::Weatherwax => "weatherwax", + Self::Igor => "igor", + Self::Mainnet => "mainnet", + } + } + + pub fn upper_case(&self) -> &'static str { + match self { + Self::Weatherwax => "WEATHERWAX", + Self::Igor => "IGOR", + Self::Mainnet => "MAINNET", + } + } +} + +/// Default network is Weatherwax. This will change after mainnet launch +impl Default for TariNetwork { + fn default() -> Self { + Self::Weatherwax + } +} + +impl TryFrom<&str> for TariNetwork { + type Error = DockerWrapperError; + + fn try_from(value: &str) -> Result { + match value { + "weatherwax" => Ok(TariNetwork::Weatherwax), + "igor" => Ok(TariNetwork::Igor), + "mainnet" => Ok(TariNetwork::Mainnet), + _ => Err(DockerWrapperError::UnsupportedNetwork), + } + } +} + +//------------------------------------------- ImageType ---------------------------------------------- + +#[derive(Clone, Copy, EnumIter, PartialEq, Eq, Hash, Serialize)] +pub enum ImageType { + Tor, + BaseNode, + Wallet, + XmRig, + Sha3Miner, + MmProxy, + Monerod, + Frontail, +} + +impl ImageType { + pub fn image_name(&self) -> &str { + match self { + Self::Tor => "tor", + Self::BaseNode => "tari_base_node", + Self::Wallet => "tari_console_wallet", + Self::XmRig => "xmrig", + Self::Sha3Miner => "tari_sha3_miner", + Self::MmProxy => "tari_mm_proxy", + Self::Monerod => "monerod", + Self::Frontail => "frontail", + } + } + + pub fn container_name(&self) -> &str { + match self { + Self::Tor => "tor", + Self::BaseNode => "base_node", + Self::Wallet => "wallet", + Self::XmRig => "xmrig", + Self::Sha3Miner => "sha3_miner", + Self::MmProxy => "mm_proxy", + Self::Monerod => "monerod", + Self::Frontail => "frontail", + } + } + + pub fn data_folder(&self) -> &str { + match self { + Self::Tor => "tor", + Self::BaseNode => "base_node", + Self::Wallet => "wallet", + Self::XmRig => "xmrig", + Self::Sha3Miner => "sha3_miner", + Self::MmProxy => "mm_proxy", + Self::Monerod => "monerod", + Self::Frontail => "frontail", + } + } +} + +impl TryFrom<&str> for ImageType { + type Error = DockerWrapperError; + + fn try_from(value: &str) -> Result { + let s = value.to_lowercase(); + match s.as_str() { + "tor" => Ok(Self::Tor), + "base_node" | "base node" => Ok(Self::BaseNode), + "wallet" => Ok(Self::Wallet), + "xmrig" => Ok(Self::XmRig), + "sha3_miner" | "sha3 miner" => Ok(Self::Sha3Miner), + "mm_proxy" | "mm proxy" => Ok(Self::MmProxy), + "monerod" | "monero" => Ok(Self::Monerod), + "frontail" => Ok(Self::Frontail), + _ => Err(DockerWrapperError::InvalidImageType), + } + } +} diff --git a/applications/launchpad/backend/src/docker/settings.rs b/applications/launchpad/backend/src/docker/settings.rs new file mode 100644 index 0000000000..7b1f718121 --- /dev/null +++ b/applications/launchpad/backend/src/docker/settings.rs @@ -0,0 +1,532 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::{collections::HashMap, path::PathBuf, time::Duration}; + +use bollard::models::{Mount, MountTypeEnum, PortBinding, PortMap}; +use config::ConfigError; +use serde::{Deserialize, Serialize}; +use thiserror::Error; +use tor_hash_passwd::EncryptedKey; + +use crate::docker::{models::ImageType, TariNetwork}; + +// TODO get a proper mining address for each network +pub const DEFAULT_MINING_ADDRESS: &str = + "5AJ8FwQge4UjT9Gbj4zn7yYcnpVQzzkqr636pKto59jQcu85CFsuYVeFgbhUdRpiPjUCkA4sQtWApUzCyTMmSigFG2hDo48"; + +pub const DEFAULT_MONEROD_URL: &str = "http://monero-stagenet.exan.tech:38081"; + +#[derive(Default, Debug, Serialize, Deserialize)] +pub struct BaseNodeConfig { + /// The time delay before starting the container and running the base node executable + pub delay: Duration, +} + +#[derive(Default, Debug, Serialize, Deserialize)] +pub struct WalletConfig { + /// The time delay before starting the container and running the wallet executable + pub delay: Duration, + /// The password to de/en-crypt the wallet database + pub password: String, +} + +#[derive(Default, Debug, Serialize, Deserialize)] +pub struct XmRigConfig { + /// The time delay before starting the container and running the monero miner executable + pub delay: Duration, + /// The address that will accept Monero mining rewards + pub monero_mining_address: String, +} + +#[derive(Default, Debug, Serialize, Deserialize)] +pub struct Sha3MinerConfig { + /// The time delay before starting the container and running the SHA3 CPU miner executable + pub delay: Duration, + /// The number of threads to employ for SHA3 mining + pub num_mining_threads: usize, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct MmProxyConfig { + /// The time delay before starting the container and running the proxy executable + pub delay: Duration, + /// A URL specifying the Monero daemon to connect to + pub monerod_url: String, + /// If required, the monero username for the monero daemon + pub monero_username: String, + /// If required, the password needed to access the monero deamon + pub monero_password: String, + /// If true, provide the monero username and password to the daemon. Otherwise those strings are ignored. + pub monero_use_auth: bool, +} + +impl Default for MmProxyConfig { + fn default() -> Self { + MmProxyConfig { + delay: Duration::from_secs(5), + monerod_url: DEFAULT_MONEROD_URL.to_string(), + monero_username: "".to_string(), + monero_password: "".to_string(), + monero_use_auth: false, + } + } +} + +impl MmProxyConfig { + pub fn monero_use_auth(&self) -> usize { + if self.monero_use_auth { + 1 + } else { + 0 + } + } +} + +/// Tari Launchpad configuration struct. This will generally be populated from some front-end or persistent storage +/// file and is used to generate the environment variables needed to configure and run the various docker containers. +#[derive(Default, Debug, Serialize, Deserialize)] +pub struct LaunchpadConfig { + /// The directory to use for config, id files and logs + pub data_directory: PathBuf, + /// The Tri network to use. Default = weatherwax + pub tari_network: TariNetwork, + /// The tor control password to share among containers. + pub tor_control_password: String, + /// Whether to spin up a base node or not, with the given configuration. Usually you want this. + pub base_node: Option, + /// Whether to spin up a console wallet daemon, with the given configuration. Optional. + pub wallet: Option, + /// Whether to spin up a SHA3 miner or not, with the given configuration. If you want to mine Tari natively, + /// include this. + pub sha3_miner: Option, + /// Whether to spin up a merge-mine proxy or not, with the given configuration. If included, you must also include + /// xmrig + pub mm_proxy: Option, + /// Whether to spin up a Monero miner or not, with the given configuration. If included you should also include + /// mm_proxy + pub xmrig: Option, + /// The Docker registry to use to download images. By default we use quay.io + pub registry: Option, + /// The docker tag to use. By default, we use 'latest' + pub tag: Option, +} + +impl LaunchpadConfig { + pub fn load() -> Result { + unimplemented!() + } + + /// Returns a list of environment variables that need to be set in the running container. For Tari containers, we + /// use this to override settings in the `config.yml` file that are generated on the fly here (the tor control + /// port password for example). + pub fn environment(&self, image_type: ImageType) -> Vec { + match image_type { + ImageType::BaseNode => self.base_node_environment(), + ImageType::Wallet => self.wallet_environment(), + ImageType::XmRig => self.xmrig_environment(), + ImageType::Sha3Miner => self.sha3_miner_environment(), + ImageType::MmProxy => self.mm_proxy_environment(), + ImageType::Tor => self.tor_environment(), + ImageType::Monerod => self.monerod_environment(), + ImageType::Frontail => self.common_envars(), + } + } + + /// Provides a hashmap that bollard needs to mount the volumes we want for each image type. + pub fn volumes(&self, image_type: ImageType) -> HashMap> { + match image_type { + ImageType::BaseNode => self.build_volumes(true, true), + ImageType::Wallet => self.build_volumes(true, false), + ImageType::XmRig => self.build_volumes(true, false), + ImageType::Sha3Miner => self.build_volumes(true, false), + ImageType::MmProxy => self.build_volumes(true, false), + ImageType::Tor => self.build_volumes(false, false), + ImageType::Monerod => self.build_volumes(false, false), + ImageType::Frontail => self.build_volumes(true, false), + } + } + + /// Similar to [`volumes`], provides a bollard configuration for mounting volumes. + pub fn mounts(&self, image_type: ImageType, volume_name: String) -> Vec { + match image_type { + ImageType::BaseNode => self.build_mounts(true, true, volume_name), + ImageType::Wallet => self.build_mounts(true, true, volume_name), + ImageType::XmRig => self.build_mounts(false, true, volume_name), + ImageType::Sha3Miner => self.build_mounts(false, true, volume_name), + ImageType::MmProxy => self.build_mounts(false, true, volume_name), + ImageType::Tor => self.build_mounts(false, false, volume_name), + ImageType::Monerod => self.build_mounts(false, false, volume_name), + ImageType::Frontail => self.build_mounts(false, true, volume_name), + } + } + + fn build_mounts(&self, blockchain: bool, general: bool, volume_name: String) -> Vec { + let mut mounts = Vec::with_capacity(2); + if general { + #[cfg(not(target_os = "linux"))] + let host = format!("/host_mnt{}", self.data_directory.to_string_lossy()); + #[cfg(target_os = "linux")] + let host = self.data_directory.to_string_lossy().to_string(); + let mount = Mount { + target: Some("/var/tari".to_string()), + source: Some(host), + typ: Some(MountTypeEnum::BIND), + bind_options: None, + ..Default::default() + }; + mounts.push(mount); + } + if blockchain { + let mount = Mount { + target: Some("/blockchain".to_string()), + source: Some(volume_name), + typ: Some(MountTypeEnum::VOLUME), + volume_options: None, + ..Default::default() + }; + mounts.push(mount); + } + mounts + } + + /// Returns a map of ports to expose to the host system. TODO - remove the hardcoding so that multiple workspaces + /// don't have colliding exposed ports. + pub fn ports(&self, image_type: ImageType) -> HashMap> { + match image_type { + ImageType::BaseNode => create_port_map(&["18142", "18189"]), + ImageType::Wallet => create_port_map(&["18143", "18188"]), + ImageType::XmRig => create_port_map(&[]), + ImageType::Sha3Miner => create_port_map(&[]), + ImageType::MmProxy => create_port_map(&[]), + ImageType::Tor => create_port_map(&[]), + ImageType::Monerod => create_port_map(&[]), + ImageType::Frontail => create_port_map(&["18130"]), + } + } + + /// As for [`ports`] returns a bollard configuration for port mappings. + pub fn port_map(&self, image_type: ImageType) -> PortMap { + let ports = self.ports(image_type); + ports + .into_iter() + .map(|(k, _)| { + let binding = vec![PortBinding { + host_ip: Some("".to_string()), + host_port: Some(k.clone()), + }]; + (k, Some(binding)) + }) + .collect() + } + + /// Return the command line arguments we want for the given container execution. + pub fn command(&self, image_type: ImageType) -> Vec { + match image_type { + ImageType::BaseNode => vec!["--non-interactive-mode".to_string()], + ImageType::Wallet => vec!["--non-interactive-mode".to_string()], + ImageType::XmRig => self.xmrig_cmd(), + ImageType::Sha3Miner => vec![], + ImageType::MmProxy => vec![], + ImageType::Tor => self.tor_cmd(), + ImageType::Monerod => self.monerod_cmd(), + ImageType::Frontail => self.frontail_cmd(), + } + } + + /// Returns the canonical path to the id files. The canonical path is defined as + /// `{root_path}/config/{network}/{image_type}_id.json` + pub fn id_path(&self, root_path: &str, image_type: ImageType) -> Option { + match image_type { + ImageType::BaseNode | ImageType::Wallet => Some( + PathBuf::from(root_path) + .join("config") + .join(self.tari_network.lower_case()) + .join(format!("{}_id.json", image_type.image_name())), + ), + _ => None, + } + } + + fn frontail_cmd(&self) -> Vec { + let args = vec![ + "-p", + "18130", + "base_node/log/core.log", + "wallet/log/core.log", + "sha3_miner/log/core.log", + "mm_proxy/log/core.log", + ]; + args.into_iter().map(String::from).collect() + } + + fn xmrig_cmd(&self) -> Vec { + let address = match &self.xmrig { + Some(config) => config.monero_mining_address.as_str(), + None => DEFAULT_MINING_ADDRESS, + }; + let address = format!("--user={}", address); + let args = vec![ + "--url=mm_proxy:18081", + address.as_str(), + "--coin=monero", + "--daemon", + "--log-file=/var/tari/xmrig/xmrig.log", + "--verbose", + // "--background" + ]; + args.into_iter().map(String::from).collect() + } + + fn monerod_cmd(&self) -> Vec { + let network = match self.tari_network { + TariNetwork::Mainnet => "--mainnet", + _ => "--stagenet", + }; + let args = vec![ + "--non-interactive", + "--restricted-rpc", + "--rpc-bind-ip=0.0.0.0", + "--confirm-external-bind", + "--enable-dns-blocklist", + "--log-file=/home/monerod/monerod.log", + "--fast-block-sync=1", + "--prune-blockchain", + network, + ]; + args.into_iter().map(String::from).collect() + } + + fn tor_cmd(&self) -> Vec { + let hashed_password = EncryptedKey::hash_password(self.tor_control_password.as_str()).to_string(); + let args = vec![ + "/usr/bin/tor", + "--SocksPort", + "0.0.0.0:9050", + "--ControlPort", + "0.0.0.0:9051", + "--CookieAuthentication", + "0", + "--ClientOnly", + "1", + "--ClientUseIPv6", + "1", + "--HashedControlPassword", + hashed_password.as_str(), + ]; + args.into_iter().map(String::from).collect() + } + + /// Returns the bollard configuration map. You can specify any/all of the host-mounted data folder, of the + /// blockchain folder to map. + pub fn build_volumes(&self, general: bool, tari_blockchain: bool) -> HashMap> { + let mut volumes = HashMap::new(); + if general { + volumes.insert("/var/tari".to_string(), HashMap::<(), ()>::new()); + } + if tari_blockchain { + volumes.insert("/blockchain".to_string(), HashMap::new()); + } + volumes + } + + fn common_envars(&self) -> Vec { + vec![ + format!("TARI_NETWORK={}", self.tari_network.lower_case()), + format!("DATA_FOLDER={}", self.data_directory.to_str().unwrap_or("")), // TODO deal with None + "TARI_LOG_CONFIGURATION=/var/tari/config/log4rs.yml".to_string(), + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin".to_string(), + ] + } + + /// Generate the vector of ENVAR strings for the docker environment + fn base_node_environment(&self) -> Vec { + let mut env = self.common_envars(); + if let Some(base_node) = &self.base_node { + env.append(&mut vec![ + format!("WAIT_FOR_TOR={}", base_node.delay.as_secs()), + format!( + "TARI_BASE_NODE__{}__TOR_CONTROL_AUTH=password={}", + self.tari_network.upper_case(), + self.tor_control_password + ), + format!( + "TARI_BASE_NODE__{}__DATA_DIR=/blockchain/{}", + self.tari_network.upper_case(), + self.tari_network.lower_case() + ), + format!( + "TARI_BASE_NODE__{}__TOR_FORWARD_ADDRESS=/dns4/base_node/tcp/18189", + self.tari_network.upper_case() + ), + format!( + "TARI_BASE_NODE__{}__TCP_LISTENER_ADDRESS=/dns4/base_node/tcp/18189", + self.tari_network.upper_case() + ), + format!( + "TARI_BASE_NODE__{}__TOR_SOCKS_ADDRESS_OVERRIDE=/dns4/tor/tcp/9050", + self.tari_network.upper_case() + ), + format!( + "TARI_BASE_NODE__{}__TOR_CONTROL_ADDRESS=/dns4/tor/tcp/9051", + self.tari_network.upper_case() + ), + format!("TARI_BASE_NODE__{}__GRPC_ENABLED=1", self.tari_network.upper_case()), + format!( + "TARI_BASE_NODE__{}__GRPC_BASE_NODE_ADDRESS=0.0.0.0:18142", + self.tari_network.upper_case() + ), + "APP_NAME=base_node".to_string(), + ]); + } + env + } + + fn wallet_environment(&self) -> Vec { + let mut env = self.common_envars(); + if let Some(config) = &self.wallet { + env.append(&mut vec![ + "APP_NAME=wallet".to_string(), + "APP_EXEC=tari_console_wallet".to_string(), + format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 3), + "SHELL=/bin/bash".to_string(), + "TERM=linux".to_string(), + format!("TARI_WALLET_PASSWORD={}", config.password), + format!( + "TARI_WALLET__{}__TOR_CONTROL_AUTH=password={}", + self.tari_network.upper_case(), + self.tor_control_password + ), + format!( + "TARI_WALLET__{}__TOR_CONTROL_ADDRESS=/dns4/tor/tcp/9051", + self.tari_network.upper_case() + ), + format!( + "TARI_WALLET__{}__TOR_SOCKS_ADDRESS_OVERRIDE=/dns4/tor/tcp/9050", + self.tari_network.upper_case() + ), + format!( + "TARI_WALLET__{}__TOR_FORWARD_ADDRESS=/dns4/wallet/tcp/18188", + self.tari_network.upper_case() + ), + format!( + "TARI_WALLET__{}__TCP_LISTENER_ADDRESS=/dns4/wallet/tcp/18188", + self.tari_network.upper_case() + ), + format!( + "TARI_BASE_NODE__{}__GRPC_CONSOLE_WALLET_ADDRESS=0.0.0.0:18143", + self.tari_network.upper_case() + ), + "TARI_WALLET__GRPC_ADDRESS=0.0.0.0:18143".to_string(), + ]); + } + env + } + + fn xmrig_environment(&self) -> Vec { + let mut env = self.common_envars(); + if let Some(config) = &self.xmrig { + env.append(&mut vec![format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 9)]); + } + env + } + + fn sha3_miner_environment(&self) -> Vec { + let mut env = self.common_envars(); + if let Some(config) = &self.sha3_miner { + env.append(&mut vec![ + format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 6), + "APP_NAME: sha3_miner".to_string(), + "APP_EXEC: tari_mining_node".to_string(), + format!("TARI_MINING_NODE__NUM_MINING_THREADS: {}", config.num_mining_threads), + "TARI_MINING_NODE__MINE_ON_TIP_ONLY: 1".to_string(), + format!( + "TARI_BASE_NODE__{}__GRPC_BASE_NODE_ADDRESS=/dns4/base_node/tcp/18142", + self.tari_network.upper_case() + ), + "TARI_WALLET__GRPC_ADDRESS=/dns4/wallet/tcp/18143".to_string(), + ]); + } + env + } + + fn mm_proxy_environment(&self) -> Vec { + let mut env = self.common_envars(); + if let Some(config) = &self.mm_proxy { + env.append(&mut vec![ + format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 6), + "APP_NAME=mm_proxy".to_string(), + "APP_EXEC=tari_merge_mining_proxy".to_string(), + format!( + "TARI_BASE_NODE__{}__GRPC_BASE_NODE_ADDRESS=/dns4/base_node/tcp/18142", + self.tari_network.upper_case() + ), + "TARI_WALLET__GRPC_ADDRESS=/dns4/wallet/tcp/18143".to_string(), + format!( + "TARI_MERGE_MINING_PROXY__{}__MONEROD_URL={}", + self.tari_network.upper_case(), + config.monerod_url + ), + format!( + "TARI_MERGE_MINING_PROXY__{}__MONEROD_USERNAME={}", + self.tari_network.upper_case(), + config.monero_username + ), + format!( + "TARI_MERGE_MINING_PROXY__{}__MONEROD_PASSWORD={}", + self.tari_network.upper_case(), + config.monero_password + ), + format!( + "TARI_MERGE_MINING_PROXY__{}__MONEROD_USE_AUTH={}", + self.tari_network.upper_case(), + config.monero_use_auth() + ), + format!( + "TARI_MERGE_MINING_PROXY__{}__PROXY_HOST_ADDRESS=0.0.0.0:18081", + self.tari_network.upper_case() + ), + ]); + } + env + } + + fn tor_environment(&self) -> Vec { + self.common_envars() + } + + fn monerod_environment(&self) -> Vec { + self.common_envars() + } +} + +#[derive(Debug, Error)] +pub enum LaunchpadConfigError {} + +fn create_port_map(ports: &[&'static str]) -> HashMap> { + let mut result = HashMap::new(); + for &port in ports { + result.insert(format!("{}/tcp", port), HashMap::new()); + } + result +} diff --git a/applications/launchpad/backend/src/docker/workspace.rs b/applications/launchpad/backend/src/docker/workspace.rs new file mode 100644 index 0000000000..d16998f07c --- /dev/null +++ b/applications/launchpad/backend/src/docker/workspace.rs @@ -0,0 +1,611 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::collections::HashMap; + +use bollard::{ + container::{ + Config, + CreateContainerOptions, + LogsOptions, + NetworkingConfig, + Stats, + StatsOptions, + StopContainerOptions, + }, + models::{ContainerCreateResponse, EndpointSettings, HostConfig, Network}, + network::{ConnectNetworkOptions, CreateNetworkOptions, InspectNetworkOptions}, + volume::CreateVolumeOptions, + Docker, +}; +use futures::{Stream, StreamExt, TryStreamExt}; +use log::*; +use strum::IntoEnumIterator; +use tari_app_utilities::identity_management::setup_node_identity; +use tari_comms::{peer_manager::PeerFeatures, NodeIdentity}; + +use crate::docker::{ + models::{ContainerId, ContainerState}, + DockerWrapperError, + ImageType, + LaunchpadConfig, + LogMessage, +}; + +static DEFAULT_REGISTRY: &str = "quay.io/tarilabs"; +static DEFAULT_TAG: &str = "latest"; + +/// `Workspaces` allows us to spin up multiple [TariWorkspace] recipes or configurations at once. Most users will only +/// ever need one at a time, and the default one at that, but developers and testers will likely find this useful. +/// +/// For example, you might want to run a node and wallet on two different networks concurrently. +/// Or, you might want to spin up two wallets on the same network to test some new feature. Here you would have one +/// recipe with just a base node and a wallet, and another recipe with just a wallet. +/// +/// Workspaces are referenced by a name, which is an arbitrary string, but by convention, you'll want to keep workspace +/// names short and do not use spaces in workspace names. +/// +/// Docker containers are named using a `{workspace_name}_{image_type}` convention. See [TariWorkspace] for more +/// details. +/// +/// Each workspace should also have a unique data folder to keep logs and configuration separate, but this is not a hard +/// requirement. +#[derive(Default)] +pub struct Workspaces { + workspaces: HashMap, +} + +impl Workspaces { + /// Returns a mutable reference to the `name`d workspace. For an immutable reference, see [workspace_mut]. + pub fn get_workspace_mut(&mut self, name: &str) -> Option<&mut TariWorkspace> { + self.workspaces.get_mut(name) + } + + /// Returns an immtable reference to the `name`d workspace. For a mutable reference, see [get_workspace_mut]. + pub fn get_workspace(&self, name: &str) -> Option<&TariWorkspace> { + self.workspaces.get(name) + } + + /// Checks if a workspace with the given name exists. + pub fn workspace_exists(&self, name: &str) -> bool { + self.workspaces.contains_key(name) + } + + /// Create a new Tari workspace. It must not previously exist + pub fn create_workspace(&mut self, name: &str, config: LaunchpadConfig) -> Result<(), DockerWrapperError> { + if self.workspaces.contains_key(name) { + return Err(DockerWrapperError::WorkspaceAlreadyExists(name.to_string())); + } + let new_system = TariWorkspace::new(name, config); + self.workspaces.insert(name.to_string(), new_system); + Ok(()) + } + + /// Gracefully shut down the docker images and delete them + /// The volumes are kept, since if we restart, we don't want to re-sync the entire blockchain again + pub async fn shutdown(&mut self, docker: &Docker) -> Result<(), DockerWrapperError> { + for (name, system) in &mut self.workspaces { + info!("Shutting down {}", name); + system.stop_containers(true, docker).await; + } + Ok(()) + } +} + +/// A TariWorkspace is a configuration of docker images (node, wallet, miner etc), configuration files and secrets, +/// and log files. +/// +/// ### Data locations +/// A workspace manages data in several places +/// * **Blockchain data** is stored in a [Docker volume](https://docs.docker.com/storage/volumes/) that is not directly +/// accessible to the host system. This is primarily done for performance reasons, but should not be a major issue +/// since you seldom need direct access to the LMDB database. If you do need the database for some reason, you can +/// mount the volume and run a bash command, for instance: `docker run --rm -v $(pwd):/backup -v +/// blockchain:/blockchain ubuntu tar czvf /backup/backup.tar.gz /blockchain`. As currently written, the blockchain +/// data is namespaced by workspace but it is also possible in principle for different workspaces to (TODO) share +/// blockchain data (for the same network), thereby preventing the need to keep multiple copies of the blockchain. In +/// this case, you need to be careful not to introduce contention from multiple nodes running against the same LMDB +/// database, leading to corrupt db files. +/// * **Configuration** and log files are stored of the workspace `root_folder`. A typical folder structure looks like +/// ```text +/// {root_folder} +/// ├── base_node +/// │ └── log +/// │ ├── core.log +/// │ ├── network.log +/// │ └── other.log +/// ├── config +/// │ ├── config.toml +/// │ ├── log4rs.yml +/// │ └── weatherwax +/// │ ├── base_node_tor.json +/// │ ├── tari_base_node_id.json +/// │ └── tari_console_wallet_id.json +/// ├── mm_proxy +/// ├── monerod +/// ├── sha3_miner +/// │ └── log +/// │ ├── core.log +/// │ ├── network.log +/// │ └── other.log +/// ├── tor +/// ├── wallet +/// │ ├── log +/// │ │ ├── core.log +/// │ │ ├── network.log +/// │ │ └── other.log +/// │ └── wallet +/// │ ├── console-wallet.dat +/// │ ├── console-wallet.dat-shm +/// │ └── console-wallet.dat-wal +/// └── xmrig +/// ``` +/// the `{root_folder}` is mounted into the docker filesystem and is accessible to all containers in the workspace. +/// TODO - investigate security issues for this. In particular, we almost certainly want to isolate the wallet data +/// This means that changes to `config/log4rs.yml` take effect in all running containers immediately. +/// * **Docker containers** are ephemeral and are created and destroyed at will. +/// +/// ### Networking +/// Tor is used by several other containers. The control password for Tor is randomly generated when the workspace is +/// set up, and shared as an environment variable between containers. +/// +/// A dedicated, namespaced network is created for each workspace. This means that each container in the network can +/// talk to any other container in the same workspace, but not to containers in other workspaces. +/// +/// We also expose some ports to the host system for host-container communication. +/// +/// * Base node - ports 18142 and 18149. TODO - currently the same port is mapped to the host. For multiple Workspaces +/// we'd need to expose a different port to the host. e.g. 1n142 where n is the workspace number. +/// * Wallet - 18143 and 18188 +/// * Frontail - 18130 +pub struct TariWorkspace { + name: String, + config: LaunchpadConfig, + containers: HashMap, +} + +impl TariWorkspace { + /// Create a new Tari system using the provided configuration + pub fn new(name: &str, config: LaunchpadConfig) -> Self { + Self { + name: name.to_string(), + config, + containers: HashMap::new(), + } + } + + /// Return a reference to the immutable configuration object for this workspace. + pub fn config(&self) -> &LaunchpadConfig { + &self.config + } + + /// Returns the name of this system, which is generally used as the workspace name when running multiple Tari + /// systems + pub fn name(&self) -> &str { + self.name.as_str() + } + + /// Returns the full image name for the given image type. for the default registry this is typically something like + /// `quay.io/tarilabs/tari_base_node:latest`. One should be able to use this string to do a successful + /// `docker pull {image_name}`. + /// + /// It also lets power users customise which version of docker images they want to run in the workspace. + pub fn fully_qualified_image(image: ImageType, registry: Option<&str>, tag: Option<&str>) -> String { + let reg = registry.unwrap_or(DEFAULT_REGISTRY); + let tag = tag.unwrap_or(DEFAULT_TAG); + format!("{}/{}:{}", reg, image.image_name(), tag) + } + + /// Starts the Tari workspace recipe. + /// + /// This is an MVP / PoC version that starts everything in one go, but TODO, should really take some sort of recipe + /// object to allow us to build up different recipes (wallet only, full miner, SHA3-mining only etc) + pub async fn start_recipe(&mut self, docker: Docker) -> Result<(), DockerWrapperError> { + // Create or load identities + let _ids = self.create_or_load_identities()?; + // Set up the local network + if !self.network_exists(&docker).await? { + self.create_network(&docker).await?; + } + // Create or restart the volume + + let registry = self.config.registry.clone(); + let tag = self.config.tag.clone(); + for image in self.images_to_start() { + // Start each container + let name = self + .start_service(image, registry.clone(), tag.clone(), docker.clone()) + .await?; + info!( + "Docker container {} ({}) successfully started", + image.image_name(), + name + ); + } + Ok(()) + } + + /// Bootstraps a node identity for the container, typically a base node or wallet instance. If an identity file + /// already exists at the canonical path location, it is loaded and returned instead. + /// + /// The canonical path is defined as `{root_path}/config/{network}/{image_type}_id.json` + pub fn create_or_load_identity( + &self, + root_path: &str, + image: ImageType, + ) -> Result, DockerWrapperError> { + if let Some(id_file_path) = self.config.id_path(root_path, image) { + debug!("Loading or creating identity file {}", id_file_path.to_string_lossy()); + let id = setup_node_identity(id_file_path, &None, true, PeerFeatures::COMMUNICATION_NODE)? + .as_ref() + .clone(); + Ok(Some(id)) + } else { + Ok(None) + } + } + + /// A convenience method that calls [create_or_load_identity] for each image type. + pub fn create_or_load_identities(&self) -> Result, DockerWrapperError> { + let root_path = self.config.data_directory.to_string_lossy().to_string(); + let mut ids = HashMap::new(); + for image in ImageType::iter() { + if let Some(id) = self.create_or_load_identity(root_path.as_str(), image)? { + let _ = ids.insert(image, id); + } + } + Ok(ids) + } + + /// Create and return a [`Stream`] of [`LogMessage`] instances for the `name`d container in the workspace. + pub fn logs( + &self, + container_name: &str, + docker: Docker, + ) -> Option>> { + let options = LogsOptions:: { + follow: true, + stdout: true, + stderr: true, + ..Default::default() + }; + self.containers.get(container_name).map(move |container| { + let id = container.id(); + docker + .logs(id.as_str(), Some(options)) + .map(|log| log.map(LogMessage::from).map_err(DockerWrapperError::from)) + }) + } + + /// Returns a [`Stream`] of resource stats for the container `name`, if it exists + pub fn resource_stats( + &self, + name: &str, + docker: Docker, + ) -> Option>> { + if let Some(container) = self.containers.get(name) { + let options = StatsOptions { + stream: true, + one_shot: false, + }; + let id = container.id(); + let stream = docker + .stats(id.as_str(), Some(options)) + .map_err(DockerWrapperError::from); + Some(stream) + } else { + None + } + } + + /// Create and run a docker container. + /// + /// ## Arguments + /// * `image`: The type of image to start. See [`ImageType`]. + /// * `registry`: An optional docker registry path to use. The default is `quay.io/tarilabs` + /// * `tag`: The image tag to use. The default is `latest`. + /// * `docker`: a [`Docker`] instance. + /// + /// ## Return + /// + /// The method returns a future that resolves to a [`DockerWrapperError`] on an error, or the container name on + /// success. + /// + /// `start_service` creates a new docker container and runs it. As part of this process, + /// * it pulls configuration data from the [`LaunchConfig`] instance attached to this [`DockerWRapper`] to construct + /// the Environment, Volume configuration, and exposed Port configuration. + /// * creates a new container + /// * starts the container + /// * adds the container reference to the current list of containers being managed + /// * Returns the container name + pub async fn start_service( + &mut self, + image: ImageType, + registry: Option, + tag: Option, + docker: Docker, + ) -> Result { + let args = self.config.command(image); + let image_name = TariWorkspace::fully_qualified_image(image, registry.as_deref(), tag.as_deref()); + let options = Some(CreateContainerOptions { + name: format!("{}_{}", self.name, image.image_name()), + }); + let envars = self.config.environment(image); + let volumes = self.config.volumes(image); + let ports = self.config.ports(image); + let port_map = self.config.port_map(image); + let mounts = self.config.mounts(image, self.tari_blockchain_volume_name()); + let mut endpoints = HashMap::new(); + let endpoint = EndpointSettings { + aliases: Some(vec![image.container_name().to_string()]), + ..Default::default() + }; + endpoints.insert(self.network_name(), endpoint); + let config = Config:: { + image: Some(image_name.clone()), + attach_stdin: Some(false), + attach_stdout: Some(false), + attach_stderr: Some(false), + exposed_ports: Some(ports), + open_stdin: Some(true), + stdin_once: Some(false), + tty: Some(true), + env: Some(envars), + volumes: Some(volumes), + cmd: Some(args), + host_config: Some(HostConfig { + binds: Some(vec![]), + network_mode: Some("bridge".to_string()), + port_bindings: Some(port_map), + mounts: Some(mounts), + ..Default::default() + }), + networking_config: Some(NetworkingConfig { + endpoints_config: endpoints, + }), + ..Default::default() + }; + info!("Creating {}", image_name); + debug!("{} has configuration object: {:#?}", image_name, config); + let container = docker.create_container(options, config).await?; + let name = image.container_name(); + let id = container.id.clone(); + self.add_container(name, container); + info!("Starting {}.", image_name); + docker.start_container::(id.as_str(), None).await?; + self.mark_container_running(name)?; + info!("{} started with id {}", image_name, id); + + Ok(name.to_string()) + } + + // helper function for start recipe. This will be overhauled to be more flexible in future + fn images_to_start(&self) -> Vec { + let mut images = Vec::with_capacity(6); + // Always use Tor for now + images.push(ImageType::Tor); + if self.config.base_node.is_some() { + images.push(ImageType::BaseNode); + } + if self.config.wallet.is_some() { + images.push(ImageType::Wallet); + } + if self.config.xmrig.is_some() { + images.push(ImageType::XmRig); + } + if self.config.sha3_miner.is_some() { + images.push(ImageType::Sha3Miner); + } + if self.config.mm_proxy.is_some() { + images.push(ImageType::MmProxy); + } + // TODO - add monerod support + images + } + + /// Returns a reference to the set of managed containers. You can only retrieve immutable references from this + /// hash map. If you need a mutable reference tot a container's state, see [`container_mut`]. + pub fn managed_containers(&self) -> &HashMap { + &self.containers + } + + /// Return a mutable reference to the named container's [`ContainerState`]. + pub fn container_mut(&mut self, container_name: &str) -> Option<&mut ContainerState> { + self.containers.get_mut(container_name) + } + + /// Add the container info to the list of containers the wrapper is managing + fn add_container(&mut self, name: &str, container: ContainerCreateResponse) { + let id = ContainerId::from(container.id.clone()); + let state = ContainerState::new(name.to_string(), id, container); + self.containers.insert(name.to_string(), state); + } + + // Tag the container with id `id` as Running + fn mark_container_running(&mut self, name: &str) -> Result<(), DockerWrapperError> { + if let Some(container) = self.containers.get_mut(name) { + container.running(); + Ok(()) + } else { + Err(DockerWrapperError::ContainerNotFound(name.to_string())) + } + } + + /// Stop the container with the given `name` and optionally delete it + pub async fn stop_container(&mut self, name: &str, delete: bool, docker: &Docker) { + let container = match self.container_mut(name) { + Some(c) => c, + None => { + info!( + "Cannot stop container {}. It was not found in the current workspace", + name + ); + return; + }, + }; + let options = StopContainerOptions { t: 0 }; + let id = container.id().clone(); + match docker.stop_container(id.as_str(), Some(options)).await { + Ok(_res) => { + info!("Container {} stopped", id); + container.set_stop(); + }, + Err(err) => { + warn!("Could not stop container {} due to {}", id, err.to_string()); + }, + } + // Even if stopping failed (maybe it was already stopped), try and delete it + if delete { + match docker.remove_container(id.as_str(), None).await { + Ok(()) => { + info!("Container {} deleted", id); + container.set_deleted(); + }, + Err(err) => { + warn!("Could not delete container {} due to: {}", id, err.to_string()) + }, + } + } + } + + /// Stop all running containers and optionally delete them + pub async fn stop_containers(&mut self, delete: bool, docker: &Docker) { + let names = self.containers.keys().cloned().collect::>(); + for name in names { + // Stop the container immediately + self.stop_container(name.as_str(), delete, docker).await; + } + } + + /// Returns the network name + pub fn network_name(&self) -> String { + format!("{}_network", self.name) + } + + /// Returns the name of the volume holding blockchain data. Currently this is namespaced to the workspace. We might + /// want to change this to be shareable across networks, i.e. only namespace across the network type. + pub fn tari_blockchain_volume_name(&self) -> String { + format!("{}_{}_volume", self.name, self.config.tari_network.lower_case()) + } + + /// Checks if the network for this docker configuration exists + pub async fn network_exists(&self, docker: &Docker) -> Result { + let name = self.network_name(); + let options = InspectNetworkOptions { + verbose: false, + scope: "local", + }; + let network = docker.inspect_network(name.as_str(), Some(options)).await; + // hardcore pattern matching yo! + if let Ok(Network { + name: Some(name), + id: Some(id), + .. + }) = network + { + info!("Network {} (id:{}) exists", name, id); + Ok(true) + } else { + info!("Network {} does not exist", name); + Ok(false) + } + } + + /// Create a network in docker to allow the containers in this workspace to communicate with each other. + pub async fn create_network(&self, docker: &Docker) -> Result<(), DockerWrapperError> { + let name = self.network_name(); + let options = CreateNetworkOptions { + name: name.as_str(), + check_duplicate: true, + driver: "bridge", + internal: false, + attachable: false, + ingress: false, + ipam: Default::default(), + enable_ipv6: false, + options: Default::default(), + labels: Default::default(), + }; + let res = docker.create_network(options).await?; + if let Some(id) = &res.id { + info!("Network {} (id:{}) created", name, id); + } + if let Some(warn) = res.warning { + warn!("Creating {} network had warnings: {}", name, warn); + } + Ok(()) + } + + /// Checks whether the blockchain data volume exists + pub async fn volume_exists(&self, docker: &Docker) -> Result { + let name = self.tari_blockchain_volume_name(); + let volume = docker.inspect_volume(name.as_str()).await?; + trace!("Volume {} exists at {}", name, volume.mountpoint); + Ok(true) + } + + /// Tries to create a new blockchain data volume for this workspace. + pub async fn create_volume(&self, docker: &Docker) -> Result<(), DockerWrapperError> { + let name = self.tari_blockchain_volume_name(); + let config = CreateVolumeOptions { + name, + driver: "local".to_string(), + ..Default::default() + }; + let volume = docker.create_volume(config).await?; + info!("Docker volume {} created at {}", volume.name, volume.mountpoint); + Ok(()) + } + + /// Connects a container to the workspace network. This is not typically needed, since the container will + /// automatically be connected to the network when it is created in [`start_service`]. + pub async fn connect_to_network( + &self, + id: &ContainerId, + image: ImageType, + docker: &Docker, + ) -> Result<(), DockerWrapperError> { + let network = self.network_name(); + let options = ConnectNetworkOptions { + container: id.as_str(), + endpoint_config: EndpointSettings { + aliases: Some(vec![image.container_name().to_string()]), + ..Default::default() + }, + }; + info!( + "Connecting container {} ({}) to network {}...", + image.image_name(), + id, + network + ); + docker.connect_network(network.as_str(), options).await?; + info!( + "Docker container {} ({}) connected to network {}", + image.image_name(), + id, + network + ); + Ok(()) + } +} diff --git a/applications/launchpad/backend/src/docker/wrapper.rs b/applications/launchpad/backend/src/docker/wrapper.rs new file mode 100644 index 0000000000..13de2c22f4 --- /dev/null +++ b/applications/launchpad/backend/src/docker/wrapper.rs @@ -0,0 +1,93 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +use std::collections::HashMap; + +use bollard::{ + image::CreateImageOptions, + models::{CreateImageInfo, SystemEventsResponse}, + system::EventsOptions, + Docker, +}; +use futures::{Stream, TryStreamExt}; + +use crate::docker::DockerWrapperError; + +/// A wrapper around a [`bollard::Docker`] instance providing some opinionated convenience methods for Tari workspaces. +pub struct DockerWrapper { + handle: Docker, +} + +impl DockerWrapper { + /// Create a new wrapper + pub fn new() -> Result { + let handle = Docker::connect_with_local_defaults()?; + Ok(Self { handle }) + } + + /// Returns the version of the _docker client_. + pub fn version(&self) -> String { + self.handle.client_version().to_string() + } + + /// Create a (cheap) clone of the [`Docker`] instance, suitable for passing to threads and futures. + pub fn handle(&self) -> Docker { + self.handle.clone() + } + + /// Pull an image from a repository. + /// + /// image_name: The fully qualified name of the image, {registry}/{name}:{tag} + /// To use the default registry and tag, you can call `Self::fully_qualified_image(image, registry, tag)` + /// to build a default full-qualified image name. + pub async fn pull_image( + &self, + image_name: String, + ) -> impl Stream> { + let opts = Some(CreateImageOptions { + from_image: image_name, + ..Default::default() + }); + let stream = self.handle.create_image(opts, None, None); + stream.map_err(DockerWrapperError::from) + } + + /// Returns a stream of relevant events. We're opinionated here, so we filter the stream to only return + /// container, image, network and volume events. + pub async fn events(&self) -> impl Stream> { + let docker = self.handle.clone(); + let mut type_filter = HashMap::new(); + type_filter.insert("type".to_string(), vec![ + "container".to_string(), + "image".to_string(), + "network".to_string(), + "volume".to_string(), + ]); + let options = EventsOptions { + since: None, + until: None, + filters: type_filter, + }; + docker.events(Some(options)).map_err(DockerWrapperError::from) + } +} diff --git a/applications/installer/src/config/wallet.rs b/applications/launchpad/backend/src/error.rs similarity index 56% rename from applications/installer/src/config/wallet.rs rename to applications/launchpad/backend/src/error.rs index 9f2d6fe6fa..cc2907a8e5 100644 --- a/applications/installer/src/config/wallet.rs +++ b/applications/launchpad/backend/src/error.rs @@ -19,12 +19,40 @@ // 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. +// + +use std::error::Error; + +use tauri::{api::Error as TauriApiError, Error as TauriError}; +use thiserror::Error; -use crate::config::{InstallLocation, SourceLocation}; +use crate::docker::DockerWrapperError; + +#[derive(Debug, Error)] +pub enum LauncherError { + #[error("Something went wrong with the Docker Wrapper")] + DockerWrapperError(#[from] DockerWrapperError), + #[error("Something went wrong on your filesystem")] + FileSystemError(#[from] std::io::Error), + #[error("Something went screwy with Tauri")] + TauriError(#[from] TauriError), + #[error("Something went awry with the Tauri API")] + TauriApiError(#[from] TauriApiError), + #[error("A workspace configuration object is required")] + MisingConfig, + #[error("{1} is required because we are creating a {0}")] + ConfigVariableRequired(String, String), +} -pub struct WalletOptions { - // Where to pull the wallet source or binary from - source: SourceLocation, - // Where the wallet and its data will live. SQLite installation will follow the settings chosen here. - install_location: InstallLocation, +impl LauncherError { + /// Combine all error messages down the chain into one string. + pub fn chained_message(&self) -> String { + let mut messages = vec![self.to_string()]; + let mut this = self as &dyn Error; + while let Some(next) = this.source() { + messages.push(next.to_string()); + this = next; + } + messages.join(" caused by:\n") + } } diff --git a/applications/installer/src/utils/mod.rs b/applications/launchpad/backend/src/lib.rs similarity index 96% rename from applications/installer/src/utils/mod.rs rename to applications/launchpad/backend/src/lib.rs index a1a28eef6f..6a771f9b15 100644 --- a/applications/installer/src/utils/mod.rs +++ b/applications/launchpad/backend/src/lib.rs @@ -19,5 +19,8 @@ // 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. +// - +pub mod commands; +pub mod docker; +pub mod error; diff --git a/applications/launchpad/backend/src/main.rs b/applications/launchpad/backend/src/main.rs new file mode 100644 index 0000000000..1622ab7ccc --- /dev/null +++ b/applications/launchpad/backend/src/main.rs @@ -0,0 +1,85 @@ +#![cfg_attr(all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows")] + +use log::*; +use tari_launchpad::{ + __cmd__create_default_workspace, + __cmd__create_new_workspace, + __cmd__events, + __cmd__image_list, + __cmd__launch_docker, + __cmd__pull_images, + __cmd__shutdown, + __cmd__start_service, + __cmd__stop_service, + commands::*, + docker::{DockerWrapper, Workspaces}, +}; +use tauri::{api::cli::get_matches, async_runtime::block_on, utils::config::CliConfig, Event, Manager}; + +fn main() { + env_logger::init(); + let context = tauri::generate_context!(); + let cli_config = context.config().tauri.cli.clone().unwrap(); + + // Handle --help and --version. Exits after printing + handle_cli_options(&cli_config); + + let docker = match DockerWrapper::new() { + Ok(docker) => docker, + Err(err) => { + error!("Could not launch docker backend. {}", err.chained_message()); + std::process::exit(-1); + }, + }; + + // TODO - Load workspace definitions from persistent storage here + let workspaces = Workspaces::default(); + // We're going to attach this to the AppState because Tauri does not expose it for some reason + let package_info = context.package_info().clone(); + info!("Using Docker version: {}", docker.version()); + + let app = tauri::Builder::default() + .manage(AppState::new(docker, workspaces, package_info)) + .invoke_handler(tauri::generate_handler![ + image_list, + pull_images, + create_new_workspace, + create_default_workspace, + events, + launch_docker, + start_service, + stop_service, + shutdown + ]) + .build(context) + .expect("error while running Launchpad"); + + app.run(|app, event| { + if let Event::Exit = event { + info!("Received Exit event"); + block_on(async move { + let state = app.state(); + let _ = shutdown(state).await; + }); + } + }); +} + +fn handle_cli_options(cli_config: &CliConfig) { + match get_matches(cli_config) { + Ok(matches) => { + if let Some(arg_data) = matches.args.get("help") { + debug!("{}", arg_data.value.as_str().unwrap_or("No help available")); + std::process::exit(0); + } + if let Some(arg_data) = matches.args.get("version") { + debug!("{}", arg_data.value.as_str().unwrap_or("No version data available")); + std::process::exit(0); + } + }, + Err(e) => { + error!("{}", e.to_string()); + std::process::exit(1); + }, + } +} diff --git a/applications/launchpad/backend/tauri.conf.json b/applications/launchpad/backend/tauri.conf.json new file mode 100644 index 0000000000..3b61075814 --- /dev/null +++ b/applications/launchpad/backend/tauri.conf.json @@ -0,0 +1,80 @@ +{ + "package": { + "productName": "tari-launchpad", + "version": "0.1.0" + }, + "build": { + "distDir": "../gui-vue/dist", + "devPath": "http://localhost:8080", + "beforeDevCommand": "cd ../gui-vue && npm run start", + "beforeBuildCommand": "cd ../gui-vue && npm run build" + }, + "tauri": { + "cli": { + "description": "A simple single-click UI to launch a Tari node, wallet and miner", + "args": [ + { + "short": "c", + "name": "config-file", + "description": "The path to the configuration file to use for the launcher", + "takesValue": true + } + ], + "subcommands": {} + }, + "bundle": { + "active": true, + "targets": "all", + "identifier": "com.tari.launchpad", + "icon": [ + "icons/favicon-32x32.png", + "icons/apple-icon-120x120.png", + "icons/android-icon-192x192.png" + ], + "resources": ["assets/*"], + "externalBin": [], + "copyright": "(c) The Tari Development community 2021", + "category": "DeveloperTool", + "shortDescription": "", + "longDescription": "", + "deb": { + "depends": [], + "useBootstrapper": false + }, + "macOS": { + "frameworks": [], + "minimumSystemVersion": "", + "useBootstrapper": false, + "exceptionDomain": "", + "signingIdentity": null, + "entitlements": null + }, + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } + }, + "updater": { + "active": false + }, + "allowlist": { + "dialog": { + "open": true + }, + "all": true + }, + "windows": [ + { + "title": "Tari Launchpad", + "width": 1600, + "height": 2400, + "resizable": true, + "fullscreen": false + } + ], + "security": { + "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'" + } + } +} \ No newline at end of file diff --git a/applications/launchpad/build_images.sh b/applications/launchpad/build_images.sh new file mode 100755 index 0000000000..d8b09f7b94 --- /dev/null +++ b/applications/launchpad/build_images.sh @@ -0,0 +1,28 @@ +#!/bin/bash +source versions.txt + +build_image() { + echo "Building $1 image v$VERSION.." + docker build -f docker_rig/$1 --build-arg ARCH=native --build-arg FEATURES=avx2 --build-arg VERSION=$VERSION $3 $4 -t quay.io/tarilabs/$2:latest ./../.. + docker tag quay.io/tarilabs/$2:latest quay.io/tarilabs/$2:$VERSION + docker push quay.io/tarilabs/$2:latest + docker push quay.io/tarilabs/$2:$VERSION +} + +build_image base_node.Dockerfile tari_base_node +build_image console_wallet.Dockerfile tari_console_wallet +build_image mm_proxy.Dockerfile tari_mm_proxy +build_image sha3_miner.Dockerfile tari_sha3_miner +build_image tor.Dockerfile tor +build_image monerod.Dockerfile monerod + +echo "Building XMRig image v$VERSION (XMRig v$XMRIG_VERSION)" +docker build -f docker_rig/xmrig.Dockerfile --build-arg VERSION=$VERSION --build-arg XMRIG_VERSION=$XMRIG_VERSION -t quay.io/tarilabs/xmrig:latest ./../.. +docker tag quay.io/tarilabs/xmrig:latest quay.io/tarilabs/xmrig:$VERSION +docker push quay.io/tarilabs/xmrig:latest +docker push quay.io/tarilabs/xmrig:$VERSION + +docker build -f docker_rig/frontail.Dockerfile -t quay.io/tarilabs/frontail ./docker_rig +docker tag quay.io/tarilabs/frontail:latest quay.io/tarilabs/frontail:$VERSION +docker push quay.io/tarilabs/frontail:latest +docker push quay.io/tarilabs/frontail:$VERSION diff --git a/applications/launchpad/docker_rig/base_node.Dockerfile b/applications/launchpad/docker_rig/base_node.Dockerfile index 14ac002eff..378480a905 100644 --- a/applications/launchpad/docker_rig/base_node.Dockerfile +++ b/applications/launchpad/docker_rig/base_node.Dockerfile @@ -1,17 +1,18 @@ -FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder - +FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder WORKDIR /tari # Adding only necessary things up front and copying the entrypoint script last # to take advantage of layer caching in docker -ADD Cargo.lock . ADD Cargo.toml . ADD applications applications ADD base_layer base_layer +ADD clients clients ADD common common +ADD common_sqlite common_sqlite ADD comms comms ADD infrastructure infrastructure ADD meta meta +ADD Cargo.lock . ADD rust-toolchain.toml . ARG ARCH=native @@ -27,6 +28,7 @@ RUN cargo build --bin tari_base_node --release --features $FEATURES --locked # Create a base minimal image for the executables FROM quay.io/bitnami/minideb:bullseye as base +ARG VERSION=1.0.1 # Disable Prompt During Packages Installation ARG DEBIAN_FRONTEND=noninteractive RUN apt update && apt -y install \ @@ -50,8 +52,9 @@ RUN mkdir -p "/var/tari/base_node/weatherwax" \ && mkdir -p "/var/tari/base_node/mainnet" \ && chown -R tari.tari "/var/tari/base_node" +RUN mkdir /blockchain && chown tari.tari /blockchain && chmod 777 /blockchain USER tari - +ENV dockerfile_version=$VERSION ENV APP_NAME=base_node APP_EXEC=tari_base_node COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/ diff --git a/applications/launchpad/docker_rig/console_wallet.Dockerfile b/applications/launchpad/docker_rig/console_wallet.Dockerfile index 0fc7c456a8..b890dfaa88 100644 --- a/applications/launchpad/docker_rig/console_wallet.Dockerfile +++ b/applications/launchpad/docker_rig/console_wallet.Dockerfile @@ -1,17 +1,18 @@ -FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder - +FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder WORKDIR /tari # Adding only necessary things up front and copying the entrypoint script last # to take advantage of layer caching in docker -ADD Cargo.lock . ADD Cargo.toml . ADD applications applications ADD base_layer base_layer +ADD clients clients ADD common common +ADD common_sqlite common_sqlite ADD comms comms ADD infrastructure infrastructure ADD meta meta +ADD Cargo.lock . ADD rust-toolchain.toml . ARG ARCH=native @@ -27,6 +28,7 @@ RUN cargo build --bin tari_console_wallet --release --features $FEATURES --locke # Create a base minimal image for the executables FROM quay.io/bitnami/minideb:bullseye as base +ARG VERSION=1.0.1 # Disable Prompt During Packages Installation ARG DEBIAN_FRONTEND=noninteractive RUN apt update && apt -y install \ @@ -45,7 +47,7 @@ RUN apt update && apt -y install \ RUN groupadd -g 1000 tari && useradd -s /bin/bash -u 1000 -g 1000 tari USER tari - +ENV dockerfile_version=$VERSION ENV APP_NAME=wallet APP_EXEC=tari_console_wallet COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/ diff --git a/applications/launchpad/docker_rig/docker-compose.yml b/applications/launchpad/docker_rig/docker-compose.yml index f7c0924d27..bacb0b0b6c 100644 --- a/applications/launchpad/docker_rig/docker-compose.yml +++ b/applications/launchpad/docker_rig/docker-compose.yml @@ -11,42 +11,6 @@ services: # - 9050:9050 # - 9051:9051 - - wallet: - image: quay.io/tarilabs/tari_console_wallet:latest - build: - context: ./../../.. - dockerfile: applications/launchpad/docker_rig/console_wallet.Dockerfile - args: - ARCH: native - FEATURES: avx2 - environment: - TARI_LOG_CONFIGURATION: "/var/tari/config/log4rs.yml" - APP_NAME: wallet - APP_EXEC: tari_console_wallet - WAIT_FOR_TOR: ${WAIT_FOR_TOR:-0} - SHELL: "/bin/bash" - TERM: "linux" - TARI_WALLET_PASSWORD: ${TARI_WALLET_PASSWORD:-tari} - TARI_NETWORK: ${TARI_NETWORK:-weatherwax} - TARI_WALLET__WEATHERWAX__TOR_CONTROL_AUTH: "password=${TOR_CONTROL_AUTH:-tari}" - TARI_WALLET__WEATHERWAX__TOR_CONTROL_ADDRESS: "/dns4/tor/tcp/9051" - TARI_WALLET__WEATHERWAX__TOR_SOCKS_ADDRESS_OVERRIDE: "/dns4/tor/tcp/9050" - TARI_WALLET__WEATHERWAX__TOR_FORWARD_ADDRESS: "/dns4/wallet/tcp/18188" - TARI_WALLET__WEATHERWAX__TCP_LISTENER_ADDRESS: "/dns4/wallet/tcp/18188" - TARI_WALLET__GRPC_ADDRESS: "0.0.0.0:18143" - command: ["--non-interactive"] - ports: - - 18188:18188 - - 18143:18143 - depends_on: - - tor - volumes: - - ${DATA_FOLDER}:/var/tari/ - #stdin_open: true - #tty: true - - base_node: image: quay.io/tarilabs/tari_base_node:latest build: @@ -83,6 +47,39 @@ services: stdin_open: true tty: true + wallet: + image: quay.io/tarilabs/tari_console_wallet:latest + build: + context: ./../../.. + dockerfile: applications/launchpad/docker_rig/console_wallet.Dockerfile + args: + ARCH: native + FEATURES: avx2 + environment: + TARI_LOG_CONFIGURATION: "/var/tari/config/log4rs.yml" + APP_NAME: wallet + APP_EXEC: tari_console_wallet + WAIT_FOR_TOR: ${WAIT_FOR_TOR:-0} + SHELL: "/bin/bash" + TERM: "linux" + TARI_WALLET_PASSWORD: ${TARI_WALLET_PASSWORD:-tari} + TARI_NETWORK: ${TARI_NETWORK:-weatherwax} + TARI_WALLET__WEATHERWAX__TOR_CONTROL_AUTH: "password=${TOR_CONTROL_AUTH:-tari}" + TARI_WALLET__WEATHERWAX__TOR_CONTROL_ADDRESS: "/dns4/tor/tcp/9051" + TARI_WALLET__WEATHERWAX__TOR_SOCKS_ADDRESS_OVERRIDE: "/dns4/tor/tcp/9050" + TARI_WALLET__WEATHERWAX__TOR_FORWARD_ADDRESS: "/dns4/wallet/tcp/18188" + TARI_WALLET__WEATHERWAX__TCP_LISTENER_ADDRESS: "/dns4/wallet/tcp/18188" + TARI_BASE_NODE__WEATHERWAX__GRPC_CONSOLE_WALLET_ADDRESS: "0.0.0.0:18143" + command: ["--non-interactive"] + ports: + - 18188:18188 + - 18143:18143 + depends_on: + - tor + volumes: + - ${DATA_FOLDER}:/var/tari/ + #stdin_open: true + #tty: true sha3_miner: image: quay.io/tarilabs/tari_sha3_miner:latest @@ -101,6 +98,7 @@ services: TARI_MINING_NODE__NUM_MINING_THREADS: 2 TARI_MINING_NODE__MINE_ON_TIP_ONLY: 1 TARI_BASE_NODE__WEATHERWAX__GRPC_BASE_NODE_ADDRESS: "/dns4/base_node/tcp/18142" + TARI_BASE_NODE__WEATHERWAX__GRPC_CONSOLE_WALLET_ADDRESS: "/dns4/wallet/tcp/18143" TARI_WALLET__GRPC_ADDRESS: "/dns4/wallet/tcp/18143" command: [ ] depends_on: @@ -158,6 +156,7 @@ services: WAIT_FOR_TOR: 0 TARI_NETWORK: ${TARI_NETWORK} TARI_BASE_NODE__WEATHERWAX__GRPC_BASE_NODE_ADDRESS: "/dns4/base_node/tcp/18142" + TARI_BASE_NODE__WEATHERWAX__GRPC_CONSOLE_WALLET_ADDRESS: "/dns4/wallet/tcp/18143" TARI_WALLET__GRPC_ADDRESS: "/dns4/wallet/tcp/18143" TARI_MERGE_MINING_PROXY__WEATHERWAX__MONEROD_URL: ${TARI_MONEROD_URL:-["http://stagenet.community.xmr.to:38081","http://monero-stagenet.exan.tech:38081","http://stagenet.xmr-tw.org:38081","http://xmr-lux.boldsuck.org:38081","http://singapore.node.xmr.pm:38081"]} TARI_MERGE_MINING_PROXY__WEATHERWAX__MONEROD_USERNAME: ${TARI_MONEROD_USERNAME} diff --git a/applications/launchpad/docker_rig/frontail.Dockerfile b/applications/launchpad/docker_rig/frontail.Dockerfile new file mode 100644 index 0000000000..7951a1a6ae --- /dev/null +++ b/applications/launchpad/docker_rig/frontail.Dockerfile @@ -0,0 +1,9 @@ +FROM node:16-alpine + +RUN npm install -g frontail + +ADD run_frontail.sh /usr/bin/ +WORKDIR /var/tari +ENTRYPOINT ["/usr/bin/run_frontail.sh"] +EXPOSE 9001 +CMD ["--help"] \ No newline at end of file diff --git a/applications/launchpad/docker_rig/mm_proxy.Dockerfile b/applications/launchpad/docker_rig/mm_proxy.Dockerfile index 0454105599..c1e35828b9 100644 --- a/applications/launchpad/docker_rig/mm_proxy.Dockerfile +++ b/applications/launchpad/docker_rig/mm_proxy.Dockerfile @@ -1,17 +1,18 @@ -FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder - +FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder WORKDIR /tari # Adding only necessary things up front and copying the entrypoint script last # to take advantage of layer caching in docker -ADD Cargo.lock . ADD Cargo.toml . ADD applications applications ADD base_layer base_layer +ADD clients clients ADD common common +ADD common_sqlite common_sqlite ADD comms comms ADD infrastructure infrastructure ADD meta meta +ADD Cargo.lock . ADD rust-toolchain.toml . ARG ARCH=native @@ -29,6 +30,7 @@ RUN cargo build --bin tari_merge_mining_proxy --release --locked --features "$FE # Create a base minimal image for the executables FROM quay.io/bitnami/minideb:bullseye as base # Disable Prompt During Packages Installation +ARG VERSION=1.0.1 ARG DEBIAN_FRONTEND=noninteractive RUN apt update && apt -y install \ apt-transport-https \ @@ -42,6 +44,7 @@ FROM base RUN groupadd -g 1000 tari && useradd -s /bin/bash -u 1000 -g 1000 tari USER tari +ENV dockerfile_version=$VERSION ENV APP_NAME=mm_proxy APP_EXEC=tari_merge_mining_proxy COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/ diff --git a/applications/launchpad/docker_rig/monerod.Dockerfile b/applications/launchpad/docker_rig/monerod.Dockerfile index bbf2103b00..34419dbe54 100644 --- a/applications/launchpad/docker_rig/monerod.Dockerfile +++ b/applications/launchpad/docker_rig/monerod.Dockerfile @@ -1,6 +1,5 @@ # Usage: docker run --restart=always -v /var/data/blockchain-xmr:/root/.bitmonero -p 18080:18080 -p 18081:18081 --name=monerod -td kannix/monero-full-node FROM quay.io/bitnami/minideb:bullseye AS build - ENV MONERO_VERSION=0.17.2.3 MONERO_SHA256=8069012ad5e7b35f79e35e6ca71c2424efc54b61f6f93238b182981ba83f2311 @@ -16,6 +15,7 @@ RUN curl https://dlsrc.getmonero.org/cli/monero-linux-x64-v$MONERO_VERSION.tar.b rm -r monero-* FROM quay.io/bitnami/minideb:bullseye +ARG VERSION=1.0.1 RUN groupadd -g 1000 tari && useradd -ms /bin/bash -u 1000 -g 1000 tari \ && mkdir -p /home/tari/.bitmonero \ @@ -27,6 +27,7 @@ COPY --chown=tari:tari --from=build /root/monerod /home/tari/monerod # blockchain location VOLUME /home/tari/.bitmonero +ENV dockerfile_version=$VERSION EXPOSE 18080 18081 diff --git a/applications/launchpad/docker_rig/push_bundle.sh b/applications/launchpad/docker_rig/push_bundle.sh deleted file mode 100755 index 051b8767dd..0000000000 --- a/applications/launchpad/docker_rig/push_bundle.sh +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright 2021. The Tari Project -# -# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -# following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following -# disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the -# following disclaimer in the documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote -# products derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - - #!/usr/local/bin/bash -export DATA_FOLDER="/tmp/push_bundle" - -check_data_folder() { - if [[ ! -d "$DATA_FOLDER" ]]; then - echo "Creating data folder $DATA_FOLDER.." - mkdir -p "$DATA_FOLDER" - mkdir -p "$DATA_FOLDER/tor" - mkdir -p "$DATA_FOLDER/xmrig" - mkdir -p "$DATA_FOLDER/monerod" - mkdir -p "$DATA_FOLDER/mm_proxy" - cp torrc "$DATA_FOLDER/tor" - CREATE_CONFIG=1 - CREATE_ID=1 - echo "Done." - else - echo "Using existing data folder $DATA_FOLDER" - fi -} - -check_data_folder - -declare -A versions - -versions["tari_base_node"]="$(docker compose run --rm base_node --version | awk '/tari_common /{print $NF}')" -versions["wallet"]="$(docker compose run --rm wallet --version | awk '/tari_common /{print $NF}')" -versions["sha3_miner"]="$(docker compose run --rm sha3_miner --version | awk '/tari_common /{print $NF}')" -versions["mm_proxy"]="$(docker compose run --rm mm_proxy --version | awk '/tari_common /{print $NF}')" -versions["xmrig"]="$(docker compose run --rm xmrig --version | awk '/XMRig /{print $NF}')" -versions["tor"]="$(docker compose run --rm tor tor --version | awk '/Tor version /{print $NF}')" -versions["monerod"]="$(docker compose run --rm monerod --version | sed 's/Monero .*(\(.*\)-.*)/\1/')" - -echo "${versions[@]}" - -for i in tari_base_node wallet sha3_miner mm_proxy_ver xmrig_ver tor_ver monerod; do - docker image tag quay.io/tarilabs/$i:latest quay.io/tarilabs/$i:${versions[$i]} - docker push quay.io/tarilabs/$i:${versions[$i]} - docker push quay.io/tarilabs/$i:latest -done \ No newline at end of file diff --git a/applications/launchpad/docker_rig/run_frontail.sh b/applications/launchpad/docker_rig/run_frontail.sh new file mode 100755 index 0000000000..7687a3ceb3 --- /dev/null +++ b/applications/launchpad/docker_rig/run_frontail.sh @@ -0,0 +1,3 @@ +#!/bin/sh +echo Starting frontail log viewer: $@ +frontail $@ \ No newline at end of file diff --git a/applications/launchpad/docker_rig/sha3_miner.Dockerfile b/applications/launchpad/docker_rig/sha3_miner.Dockerfile index 365dbe4418..bba6690c53 100644 --- a/applications/launchpad/docker_rig/sha3_miner.Dockerfile +++ b/applications/launchpad/docker_rig/sha3_miner.Dockerfile @@ -1,17 +1,19 @@ -FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder +FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder WORKDIR /tari # Adding only necessary things up front and copying the entrypoint script last # to take advantage of layer caching in docker -ADD Cargo.lock . ADD Cargo.toml . ADD applications applications ADD base_layer base_layer +ADD clients clients ADD common common +ADD common_sqlite common_sqlite ADD comms comms ADD infrastructure infrastructure ADD meta meta +ADD Cargo.lock . ADD rust-toolchain.toml . ARG ARCH=native @@ -27,6 +29,7 @@ RUN cargo build --bin tari_mining_node --release --features $FEATURES --locked # Create a base minimal image for the executables FROM quay.io/bitnami/minideb:bullseye as base +ARG VERSION=1.0.1 # Disable Prompt During Packages Installation ARG DEBIAN_FRONTEND=noninteractive RUN apt update && apt -y install \ @@ -43,6 +46,7 @@ FROM base RUN groupadd -g 1000 tari && useradd -s /bin/bash -u 1000 -g 1000 tari USER tari +ENV dockerfile_version=$VERSION ENV APP_NAME=sha3_miner APP_EXEC=tari_mining_node COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/ diff --git a/applications/launchpad/docker_rig/tor.Dockerfile b/applications/launchpad/docker_rig/tor.Dockerfile index 856b5f25d2..a532913eb1 100644 --- a/applications/launchpad/docker_rig/tor.Dockerfile +++ b/applications/launchpad/docker_rig/tor.Dockerfile @@ -1,4 +1,5 @@ FROM alpine:latest +ARG VERSION=1.0.1 RUN apk update \ && apk upgrade \ @@ -8,7 +9,7 @@ RUN apk update \ EXPOSE 9050 EXPOSE 9051 -ADD torrc /etc/tor +ENV dockerfile_version=$VERSION USER tor CMD /usr/bin/tor -f /etc/tor/torrc diff --git a/applications/launchpad/docker_rig/xmrig.Dockerfile b/applications/launchpad/docker_rig/xmrig.Dockerfile index 1205749449..a86ec8ebd9 100644 --- a/applications/launchpad/docker_rig/xmrig.Dockerfile +++ b/applications/launchpad/docker_rig/xmrig.Dockerfile @@ -1,6 +1,6 @@ FROM alpine:latest as build -ARG VERSION="v6.15.3" +ARG XMRIG_VERSION="v6.15.3" RUN apk add \ git \ @@ -14,7 +14,7 @@ RUN apk add \ autoconf \ linux-headers -RUN git clone --branch ${VERSION} https://github.com/xmrig/xmrig.git +RUN git clone --branch ${XMRIG_VERSION} https://github.com/xmrig/xmrig.git RUN mkdir xmrig/build WORKDIR /xmrig/scripts RUN ./build_deps.sh @@ -23,13 +23,16 @@ RUN cmake .. -DXMRIG_DEPS=scripts/deps -DBUILD_STATIC=ON RUN make -j$(nproc) FROM alpine:latest as base +ARG VERSION=1.0.1 COPY --from=build /xmrig/build/xmrig /usr/bin/ # Create a user & group -RUN groupadd -g 1000 tari && useradd -ms /bin/bash -u 1000 -g 1000 tari - +RUN addgroup -g 1000 tari && adduser -u 1000 -g 1000 -S tari -G tari +RUN mkdir -p /home/tari && chown tari.tari /home/tari # Chown all the files to the app user. USER tari +ENV dockerfile_version=$VERSION +ENV xmrig_version=$XMRIG_VERSION RUN echo -e "\ {\ @@ -41,6 +44,6 @@ RUN echo -e "\ { \"coin\": \"monero\", \"url\": \"127.0.0.1:18081\", \"user\": \"44\", \"daemon\": true }\ ]\ }\ -" > /home/xmrig/.xmrig.json +" > /home/tari/.xmrig.json ENTRYPOINT [ "/usr/bin/xmrig" ] diff --git a/applications/launchpad/gui-vue/.gitignore b/applications/launchpad/gui-vue/.gitignore new file mode 100644 index 0000000000..403adbc1e5 --- /dev/null +++ b/applications/launchpad/gui-vue/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/applications/launchpad/gui-vue/README.md b/applications/launchpad/gui-vue/README.md new file mode 100644 index 0000000000..06c4379054 --- /dev/null +++ b/applications/launchpad/gui-vue/README.md @@ -0,0 +1,24 @@ +# gui-vue + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/applications/launchpad/gui-vue/babel.config.js b/applications/launchpad/gui-vue/babel.config.js new file mode 100644 index 0000000000..e9558405fd --- /dev/null +++ b/applications/launchpad/gui-vue/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/applications/launchpad/gui-vue/package-lock.json b/applications/launchpad/gui-vue/package-lock.json new file mode 100644 index 0000000000..e047e03dcc --- /dev/null +++ b/applications/launchpad/gui-vue/package-lock.json @@ -0,0 +1,15810 @@ +{ + "name": "gui-vue", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", + "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", + "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.4.tgz", + "integrity": "sha512-RESBNX16eNqnBeEVR5sCJpnW0mHiNLNNvGA8PrRuK/4ZJ4TO+6bHleRUuGQYDERVySOKtOhSya/C4MIhwAMAgg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.16.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz", + "integrity": "sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", + "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", + "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz", + "integrity": "sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@fortawesome/fontawesome-common-types": { + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", + "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + } + }, + "@fortawesome/free-brands-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz", + "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + } + }, + "@fortawesome/free-regular-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.4.tgz", + "integrity": "sha512-9VNNnU3CXHy9XednJ3wzQp6SwNwT3XaM26oS4Rp391GsxVYA+0oDR2J194YCIWf7jNRCYKjUCOduxdceLrx+xw==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", + "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + } + }, + "@fortawesome/vue-fontawesome": { + "version": "3.0.0-5", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.0-5.tgz", + "integrity": "sha512-aNmBT4bOecrFsZTog1l6AJDQHPP3ocXV+WQ3Ogy8WZCqstB/ahfhH4CPu5i4N9Hw0MBKXqE+LX+NbUxcj8cVTw==" + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + } + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@oruga-ui/oruga-next": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@oruga-ui/oruga-next/-/oruga-next-0.4.8.tgz", + "integrity": "sha512-gIN26oHacUcJTeNfQEmgnDWSa0EKOAzGfBqLslFnHpTIHvow/NIiO5raI7N6SqNOvw0q+BU5PKw7AYC2ecAQRw==" + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@tauri-apps/api": { + "version": "1.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.0.0-beta.8.tgz", + "integrity": "sha512-a56lXB7XvQ4+fKtT0pxpkjTSKhyrQ1Vmjyvt2ox3mT9xw3l7s8IOKHJ1WuqW6TA6xdoy3Cyja3Z3prw8hflS7g==" + }, + "@tauri-apps/cli": { + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-1.0.0-beta.10.tgz", + "integrity": "sha512-T0cvV5Y5vCeEw6tQ7DfuGhXxxe26AwW9i3oYT/AQZlwrLG9Xk02Pp0/lKqd/WeddE3X/IFfSm8YMRCz3VElIWQ==", + "dev": true, + "requires": { + "@tauri-apps/toml": "2.2.4", + "chalk": "4.1.2", + "cross-env": "7.0.3", + "cross-spawn": "7.0.3", + "fs-extra": "10.0.0", + "global-agent": "3.0.0", + "got": "11.8.2", + "imagemin": "8.0.1", + "imagemin-optipng": "8.0.0", + "imagemin-zopfli": "7.0.0", + "inquirer": "8.1.2", + "is-png": "3.0.0", + "minimist": "1.2.5", + "ms": "2.1.3", + "png2icons": "2.0.1", + "read-chunk": "3.2.0", + "semver": "7.3.5", + "sharp": "0.28.3", + "update-notifier": "5.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.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 + }, + "inquirer": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz", + "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.3.0", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "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" + } + }, + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@tauri-apps/toml": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/toml/-/toml-2.2.4.tgz", + "integrity": "sha512-NJV/pdgJObDlDWi5+MTHZ2qyNvdL0dlHqQ72nzQYXWbW1LHMPXgCJYl0pLqL1XxxLtxtInYbtVCGVAcwhGxdkw==", + "dev": true + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz", + "integrity": "sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "16.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", + "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@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/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "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.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + } + }, + "@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + } + } + }, + "@vue/babel-preset-app": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.15.tgz", + "integrity": "sha512-J+YttzvwRfV1BPczf8r3qCevznYk+jh531agVF+5EYlHF4Sgh/cGXTz9qkkiux3LQgvhEGXgmCteg1n38WuuKg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.2.4", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + } + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.15.tgz", + "integrity": "sha512-0zI0kANAVmjFO2LWGUIzdGPMeE3+9k+KeRDXsUqB30YfRF7abjfiiRPq5BU9pOzlJbVdpRkisschBrvdJqDuDg==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.15.tgz", + "integrity": "sha512-hBLrwYfFkHldEe34op/YNgPhpOWI5n5DB2Qt9I/1Epeif4M4iFaayrgjvOR9AVM6WbD3Yx7WCFszYpWrQZpBzQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.15", + "@vue/cli-shared-utils": "^4.5.15", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-eslint": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.15.tgz", + "integrity": "sha512-/2Fl6wY/5bz3HD035oSnFRMsKNxDxU396KqBdpCQdwdvqk4mm6JAbXqihpcBRTNPeTO6w+LwGe6FE56PVbJdbg==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.15", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + } + }, + "@vue/cli-plugin-router": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.15.tgz", + "integrity": "sha512-q7Y6kP9b3k55Ca2j59xJ7XPA6x+iSRB+N4ac0ZbcL1TbInVQ4j5wCzyE+uqid40hLy4fUdlpl4X9fHJEwuVxPA==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.15" + } + }, + "@vue/cli-plugin-vuex": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz", + "integrity": "sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==", + "dev": true + }, + "@vue/cli-service": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.15.tgz", + "integrity": "sha512-sFWnLYVCn4zRfu45IcsIE9eXM0YpDV3S11vlM2/DVbIPAGoYo5ySpSof6aHcIvkeGsIsrHFpPHzNvDZ/efs7jA==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.15", + "@vue/cli-plugin-router": "^4.5.15", + "@vue/cli-plugin-vuex": "^4.5.15", + "@vue/cli-shared-utils": "^4.5.15", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^1.4.4", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.1.0", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "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==", + "dev": true, + "optional": 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, + "optional": true + }, + "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, + "optional": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } + } + } + }, + "@vue/cli-shared-utils": { + "version": "4.5.15", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.15.tgz", + "integrity": "sha512-SKaej9hHzzjKSOw1NlFmc6BSE0vcqUQMQiv1cxQ2DhVyy4QxZXBmzmiLBUBe+hYZZs1neXW7n//udeN9bCAY+Q==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "@vue/compiler-core": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.22.tgz", + "integrity": "sha512-uAkovrVeTcjzpiM4ECmVaMrv/bjdgAaLzvjcGqQPBEyUrcqsCgccT9fHJ/+hWVGhyMahmBwLqcn4guULNx7sdw==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.22", + "estree-walker": "^2.0.2", + "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==" + } + } + }, + "@vue/compiler-dom": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.22.tgz", + "integrity": "sha512-VZdsw/VuO1ODs8K7NQwnMQzKITDkIFlYYC03SVnunuf6eNRxBPEonSyqbWNoo6qNaHAEBTG6VVcZC5xC9bAx1g==", + "requires": { + "@vue/compiler-core": "3.2.22", + "@vue/shared": "3.2.22" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.22.tgz", + "integrity": "sha512-tWRQ5ge1tsTDhUwHgueicKJ8rYm6WUVAPTaIpFW3GSwZKcOEJ2rXdfkHFShNVGupeRALz2ET2H84OL0GeRxY0A==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.22", + "@vue/compiler-dom": "3.2.22", + "@vue/compiler-ssr": "3.2.22", + "@vue/ref-transform": "3.2.22", + "@vue/shared": "3.2.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "postcss": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.1.tgz", + "integrity": "sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==", + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.22.tgz", + "integrity": "sha512-Cl6aoLJtXzzBkk1sKod8S0WBJLts3+ugVC91d22gGpbkw/64WnF12tOZi7Rg54PPLi1NovqyNWPsLH/SAFcu+w==", + "requires": { + "@vue/compiler-dom": "3.2.22", + "@vue/shared": "3.2.22" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "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 + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/devtools-api": { + "version": "6.0.0-beta.20.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.0-beta.20.1.tgz", + "integrity": "sha512-R2rfiRY+kZugzWh9ZyITaovx+jpU4vgivAEAiz80kvh3yviiTU3CBuGuyWpSwGz9/C7TkSWVM/FtQRGlZ16n8Q==" + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true + }, + "@vue/reactivity": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.22.tgz", + "integrity": "sha512-xNkLAItjI0xB+lFeDgKCrSItmrHTaAzSnt8LmdSCPQnDyarmzbi/u4ESQnckWvlL7lSRKiEaOvblaNyqAa7OnQ==", + "requires": { + "@vue/shared": "3.2.22" + } + }, + "@vue/ref-transform": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.22.tgz", + "integrity": "sha512-qalVWbq5xWWxLZ0L9OroBg/JZhzavQuCcDXblfErxyDEH6Xc5gIJ4feo1SVCICFzhAUgLgQTdSFLpgjBawbFpw==", + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.22", + "@vue/shared": "3.2.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.22.tgz", + "integrity": "sha512-e7WOC55wmHPvmoVUk9VBe/Z9k5bJfWJfVIlkUkiADJn0bOgQD29oh/GS14Kb3aEJXIHLI17Em6+HxNut1sIh7Q==", + "requires": { + "@vue/reactivity": "3.2.22", + "@vue/shared": "3.2.22" + } + }, + "@vue/runtime-dom": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.22.tgz", + "integrity": "sha512-w7VHYJoliLRTLc5beN77wxuOjla4v9wr2FF22xpZFYBmH4U1V7HkYhoHc1BTuNghI15CXT1tNIMhibI1nrQgdw==", + "requires": { + "@vue/runtime-core": "3.2.22", + "@vue/shared": "3.2.22", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.22.tgz", + "integrity": "sha512-jCwbQgKPXiXoH9VS9F7K+gyEvEMrjutannwEZD1R8fQ9szmOTqC+RRbIY3Uf2ibQjZtZ8DV9a4FjxICvd9zZlQ==", + "requires": { + "@vue/compiler-ssr": "3.2.22", + "@vue/shared": "3.2.22" + } + }, + "@vue/shared": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.22.tgz", + "integrity": "sha512-qWVav014mpjEtbWbEgl0q9pEyrrIySKum8UVYjwhC6njrKzknLZPvfuYdQyVbApsqr94tf/3dP4pCuZmmjdCWQ==" + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true + }, + "@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==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "@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==", + "dev": true + }, + "CBuffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/CBuffer/-/CBuffer-2.2.0.tgz", + "integrity": "sha512-dbfGsL/kaEA07tNX4NdUPwToq/elfc+4IbDnq5INOl+LmYlaAqfTXqwnDCfvUeYtO78Ts2WhaCOUn3bSZgDwZA==" + }, + "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" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + } + }, + "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==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "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": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + } + } + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "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=", + "dev": true + }, + "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==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "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=", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "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==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "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=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "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=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "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" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "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.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true + }, + "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" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "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 + }, + "bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "dev": true, + "requires": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + } + }, + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "dev": true, + "requires": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "bin-wrapper": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "dev": true, + "requires": { + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "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 + } + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "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 + } + } + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "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": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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" + }, + "dependencies": { + "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 + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boolean": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz", + "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "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==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "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-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "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=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "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" + }, + "dependencies": { + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "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" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.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": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001283", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", + "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } + }, + "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" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "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, + "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==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.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, + "optional": true + }, + "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, + "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==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "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==", + "dev": true, + "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=", + "dev": true, + "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=", + "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-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 + } + } + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "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 + } + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "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" + } + }, + "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" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "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==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "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 + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "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=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.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 + } + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "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" + } + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "core-js": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.1.tgz", + "integrity": "sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg==" + }, + "core-js-compat": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", + "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", + "dev": true, + "requires": { + "browserslist": "^4.17.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "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==", + "dev": true, + "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" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "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.32", + "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.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "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 + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "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 + } + } + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "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" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "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=", + "dev": true + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "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" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "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" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "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 + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "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==", + "dev": true, + "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-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "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" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "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-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "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==", + "dev": true + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dev": true, + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "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" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "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" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz", + "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "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.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "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==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "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=", + "dev": true + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-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 + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "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" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-plugin-vue": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", + "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.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==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "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==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "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-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-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" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, + "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": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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 + } + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "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=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "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-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "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": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + } + }, + "file-type": { + "version": "16.5.3", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", + "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", + "dev": true, + "requires": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "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" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "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" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "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=", + "dev": true, + "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 + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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=", + "dev": true, + "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=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": 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" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "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-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, + "requires": { + "npm-conf": "^1.1.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "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" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "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" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "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" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "requires": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } + } + }, + "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 + }, + "globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "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 + }, + "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.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "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 + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "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 + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "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" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "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 + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "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": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "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" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "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" + } + } + } + }, + "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" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.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=", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "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" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "imagemin": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-8.0.1.tgz", + "integrity": "sha512-Q/QaPi+5HuwbZNtQRqUVk6hKacI6z9iWiCSQBisAv7uBynZwO7t1svkryKl7+iSQbkU/6t9DWnHz04cFs2WY7w==", + "dev": true, + "requires": { + "file-type": "^16.5.3", + "globby": "^12.0.0", + "graceful-fs": "^4.2.8", + "junk": "^3.1.0", + "p-pipe": "^4.0.0", + "replace-ext": "^2.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", + "dev": true, + "requires": { + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, + "ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "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 + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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" + } + } + } + }, + "imagemin-optipng": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz", + "integrity": "sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==", + "dev": true, + "requires": { + "exec-buffer": "^3.0.0", + "is-png": "^2.0.0", + "optipng-bin": "^7.0.0" + }, + "dependencies": { + "is-png": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", + "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", + "dev": true + } + } + }, + "imagemin-zopfli": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/imagemin-zopfli/-/imagemin-zopfli-7.0.0.tgz", + "integrity": "sha512-nmffj58rVb0O3AlCZLBBVKGyZ5MYPZZfKxUhvA7bwPGougHl/F7EUKSse9jkgXjdvtJYG2ojJeh5N67mYgBM9g==", + "dev": true, + "requires": { + "exec-buffer": "^3.0.0", + "is-png": "^2.0.0", + "zopflipng-bin": "^6.0.0" + }, + "dependencies": { + "is-png": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz", + "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==", + "dev": true + } + } + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "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" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "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==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "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-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "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==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "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-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "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-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "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-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "dependencies": { + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + } + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "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-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "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-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-png": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-3.0.0.tgz", + "integrity": "sha512-waa2qEuqgLjjYT14KOUQqAEIRRIv7ttkzPVctY/qv+IAKnzXf+JAPKQas50RgO0ECPDUG/iB1zQmwpyB9kkZtQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "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-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "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-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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 + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "requires": { + "easy-stack": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "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==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "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==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "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": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "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" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "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": "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 + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", + "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", + "dev": true, + "requires": { + "launch-editor": "^2.2.1" + } + }, + "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" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "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" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.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==", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + } + } + }, + "loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.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" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "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" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "requires": { + "escape-string-regexp": "^4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "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==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "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 + }, + "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=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "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-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "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 + } + } + }, + "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 + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "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" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.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 + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "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=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "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 + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "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==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "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" + } + }, + "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 + }, + "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 + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "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" + } + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dev": true, + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "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-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + } + }, + "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==", + "dev": true, + "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" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "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 + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "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 + } + } + }, + "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" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "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 + }, + "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=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + } + } + }, + "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" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "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-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "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=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "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" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "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" + } + }, + "optipng-bin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz", + "integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==", + "dev": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "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=", + "dev": true + }, + "os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "dev": true, + "requires": { + "arch": "^2.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "dev": true, + "requires": { + "p-timeout": "^1.1.1" + } + }, + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "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-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-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-4.0.0.tgz", + "integrity": "sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w==", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "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-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "^1.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 + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + } + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + } + } + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "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==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-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.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "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": "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" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "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" + } + }, + "peek-readable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz", + "integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "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 + }, + "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" + } + }, + "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" + } + }, + "png2icons": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/png2icons/-/png2icons-2.0.1.tgz", + "integrity": "sha512-GDEQJr8OG4e6JMp7mABtXFSEpgJa1CCpbQiAR+EjhkHJHnUL9zPPtbOrjsMD8gUbikgv3j7x404b0YJsV3aVFA==", + "dev": true + }, + "pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "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=", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "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 + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.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-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "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 + }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "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 + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "prettier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", + "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "dev": true, + "optional": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "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 + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "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=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "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": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "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==", + "dev": true, + "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" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "read-chunk": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", + "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "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" + } + }, + "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" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "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" + } + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "requires": { + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + } + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "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=", + "dev": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "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" + } + }, + "replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true + }, + "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" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-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 + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "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-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "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 + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "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==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "requires": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "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==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "requires": { + "commander": "^2.8.1" + } + }, + "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.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "dev": true, + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "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": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "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-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "requires": { + "type-fest": "^0.13.1" + }, + "dependencies": { + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "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": { + "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" + } + }, + "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" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "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=", + "dev": true + }, + "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==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "sharp": { + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", + "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==", + "dev": true, + "requires": { + "color": "^3.1.3", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.2.0", + "prebuild-install": "^6.1.2", + "semver": "^7.3.5", + "simple-get": "^3.1.0", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dev": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "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": { + "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-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-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" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "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==", + "dev": true, + "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=", + "dev": true, + "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==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "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" + } + } + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.3" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "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.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "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.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "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" + } + }, + "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": { + "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-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==", + "dev": true, + "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 + }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "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-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 + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "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-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "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-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "strtok3": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz", + "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==", + "dev": true, + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.0.1" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "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" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + } + } + }, + "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" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "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 + }, + "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" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "dev": true, + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "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 + }, + "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 + } + } + }, + "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==", + "dev": true, + "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": { + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "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" + } + }, + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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 + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "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 + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "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==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "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 + }, + "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=", + "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" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "token-types": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz", + "integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==", + "dev": true, + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "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" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "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-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "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" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "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 + } + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "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==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true, + "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=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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 + }, + "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 + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "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" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "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=", + "dev": true + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + } + }, + "url-parse": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "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==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "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" + }, + "dependencies": { + "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=", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "vue": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.22.tgz", + "integrity": "sha512-KD5nZpXVZquOC6926Xnp3zOvswrUyO9Rya7ZUoxWFQEjFDW4iACtwzubRB4Um2Om9kj6CaJOqAVRDSFlqLpdgw==", + "requires": { + "@vue/compiler-dom": "3.2.22", + "@vue/compiler-sfc": "3.2.22", + "@vue/runtime-dom": "3.2.22", + "@vue/server-renderer": "3.2.22", + "@vue/shared": "3.2.22" + } + }, + "vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vuex": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", + "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.11" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "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" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "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=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + } + } + }, + "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" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "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.5.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": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "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 + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "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" + } + }, + "webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "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.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.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": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "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 + }, + "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": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-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" + } + } + } + }, + "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 + }, + "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" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "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" + } + }, + "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-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=", + "dev": true, + "requires": { + "binary-extensions": "^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 + }, + "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" + } + }, + "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" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "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": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-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" + } + } + } + }, + "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" + } + }, + "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": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-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" + } + } + } + }, + "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-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "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 + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "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-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "with-open-file": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + } + }, + "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 + }, + "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==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "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==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "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 + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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 + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "zopflipng-bin": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zopflipng-bin/-/zopflipng-bin-6.0.1.tgz", + "integrity": "sha512-+aybvXv/xafL6I67uSH5yLHrSy4/OaSOV9tniw4yZFIHpINXUcctVHE/WzHxOONrL2GHzJ8Fd4iDrNyaS6TVbg==", + "dev": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.1", + "logalot": "^2.1.0" + } + } + } +} diff --git a/applications/launchpad/gui-vue/package.json b/applications/launchpad/gui-vue/package.json new file mode 100644 index 0000000000..288b5ed967 --- /dev/null +++ b/applications/launchpad/gui-vue/package.json @@ -0,0 +1,53 @@ +{ + "name": "gui-vue", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint", + "tauri": "tauri" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", + "@fortawesome/free-regular-svg-icons": "^5.15.4", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/vue-fontawesome": "^3.0.0-5", + "@oruga-ui/oruga-next": "^0.4.8", + "@tauri-apps/api": "^1.0.0-beta.8", + "CBuffer": "^2.2.0", + "core-js": "^3.6.5", + "vue": "^3.0.0", + "vuex": "^4.0.2" + }, + "devDependencies": { + "@tauri-apps/cli": "^1.0.0-beta.10", + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/compiler-sfc": "^3.0.0", + "babel-eslint": "^10.1.0", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^7.0.0" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/vue3-essential", + "eslint:recommended" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": {} + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/applications/launchpad/gui-vue/public/favicon.ico b/applications/launchpad/gui-vue/public/favicon.ico new file mode 100644 index 0000000000..df36fcfb72 Binary files /dev/null and b/applications/launchpad/gui-vue/public/favicon.ico differ diff --git a/applications/launchpad/gui-vue/public/index.html b/applications/launchpad/gui-vue/public/index.html new file mode 100644 index 0000000000..3e5a139621 --- /dev/null +++ b/applications/launchpad/gui-vue/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/applications/launchpad/gui-vue/src/App.vue b/applications/launchpad/gui-vue/src/App.vue new file mode 100644 index 0000000000..3c8efdf85b --- /dev/null +++ b/applications/launchpad/gui-vue/src/App.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/applications/launchpad/gui-vue/src/assets/logo.png b/applications/launchpad/gui-vue/src/assets/logo.png new file mode 100644 index 0000000000..f3d2503fc2 Binary files /dev/null and b/applications/launchpad/gui-vue/src/assets/logo.png differ diff --git a/applications/launchpad/gui-vue/src/assets/material.css b/applications/launchpad/gui-vue/src/assets/material.css new file mode 100644 index 0000000000..df6736e364 --- /dev/null +++ b/applications/launchpad/gui-vue/src/assets/material.css @@ -0,0 +1,12183 @@ +/* Copyright 2021. The Tari Project */ +/* */ +/* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following */ +/* disclaimer. */ +/* */ +/* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the */ +/* following disclaimer in the documentation and/or other materials provided with the distribution. */ +/* */ +/* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote */ +/* products derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR */ +/* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */ +/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE */ +/* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ + +.card { + font-size: .875rem; + font-weight: 400 +} + +/*! + * Bootstrap v4.0.0 (https://getbootstrap.com) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #2196f3; + --indigo: #3f51b5; + --purple: #9c27b0; + --pink: #e91e63; + --red: #f44336; + --orange: #ff9800; + --yellow: #ffeb3b; + --green: #4caf50; + --teal: #009688; + --cyan: #00bcd4; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #009688; + --secondary: #6c757d; + --success: #4caf50; + --info: #03a9f4; + --warning: #ff5722; + --danger: #f44336; + --light: #f5f5f5; + --dark: #424242; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: "Roboto", "Helvetica", "Arial", sans-serif; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace +} + +*, :after, :before { + box-sizing: border-box +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent +} + +@-ms-viewport { + width: device-width +} + +article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block +} + +body { + margin: 0; + font-family: Roboto, Helvetica, Arial, sans-serif; + font-size: 1rem; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fafafa +} + +[tabindex="-1"]:focus { + outline: 0 !important +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5rem +} + +p { + margin-top: 0; + margin-bottom: 1rem +} + +abbr[data-original-title], abbr[title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0 +} + +address { + font-style: normal; + line-height: inherit +} + +address, dl, ol, ul { + margin-bottom: 1rem +} + +dl, ol, ul { + margin-top: 0 +} + +ol ol, ol ul, ul ol, ul ul { + margin-bottom: 0 +} + +dt { + font-weight: 700 +} + +dd { + margin-bottom: .5rem; + margin-left: 0 +} + +blockquote { + margin: 0 0 1rem +} + +dfn { + font-style: italic +} + +b, strong { + font-weight: bolder +} + +small { + font-size: 80% +} + +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +a { + color: #009688; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects +} + +a:hover { + color: #004a43; + text-decoration: underline +} + +a:not([href]):not([tabindex]), a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none +} + +a:not([href]):not([tabindex]):focus { + outline: 0 +} + +code, kbd, pre, samp { + font-family: monospace, monospace; + font-size: 1em +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar +} + +figure { + margin: 0 0 1rem +} + +img { + vertical-align: middle; + border-style: none +} + +svg:not(:root) { + overflow: hidden +} + +table { + border-collapse: collapse +} + +caption { + padding-top: .75rem; + padding-bottom: .75rem; + color: #6c757d; + text-align: left; + caption-side: bottom +} + +th { + text-align: inherit +} + +label { + display: inline-block; + margin-bottom: .5rem +} + +button { + border-radius: 0 +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color +} + +button, input, optgroup, select, textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +button, input { + overflow: visible +} + +button, select { + text-transform: none +} + +[type=reset], [type=submit], button, html [type=button] { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner { + padding: 0; + border-style: none +} + +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + padding: 0 +} + +input[type=date], input[type=datetime-local], input[type=month], input[type=time] { + -webkit-appearance: listbox +} + +textarea { + overflow: auto; + resize: vertical +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0 +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal +} + +progress { + vertical-align: baseline +} + +[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: none +} + +[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button +} + +output { + display: inline-block +} + +summary { + display: list-item; + cursor: pointer +} + +template { + display: none +} + +[hidden] { + display: none !important +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + margin-bottom: .5rem; + font-family: inherit; + font-weight: 400; + line-height: 1.2; + color: inherit +} + +.h1, h1 { + font-size: 2.5rem +} + +.h2, h2 { + font-size: 2rem +} + +.h3, h3 { + font-size: 1.75rem +} + +.h4, h4 { + font-size: 1.5rem +} + +.h5, h5 { + font-size: 1.25rem +} + +.h6, h6 { + font-size: 1rem +} + +.lead { + font-size: 1.25rem; + font-weight: 300 +} + +.display-1 { + font-size: 7rem +} + +.display-1, .display-2 { + font-weight: 300; + line-height: 1.2 +} + +.display-2 { + font-size: 3.5rem +} + +.display-3 { + font-size: 2.8125rem +} + +.display-3, .display-4 { + font-weight: 300; + line-height: 1.2 +} + +.display-4 { + font-size: 2.125rem +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.small, small { + font-size: 80%; + font-weight: 400 +} + +.mark, mark { + padding: .2em; + background-color: #fcf8e3 +} + +.list-inline, .list-unstyled { + padding-left: 0; + list-style: none +} + +.list-inline-item { + display: inline-block +} + +.list-inline-item:not(:last-child) { + margin-right: .5rem +} + +.initialism { + font-size: 90%; + text-transform: uppercase +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d +} + +.blockquote-footer:before { + content: "\2014 \00A0" +} + +.img-fluid, .img-thumbnail { + max-width: 100%; + height: auto +} + +.img-thumbnail { + padding: .25rem; + background-color: #fafafa; + border: 1px solid #dee2e6; + border-radius: .125rem; + box-shadow: 0 1px 2px rgba(0, 0, 0, .075) +} + +.figure { + display: inline-block +} + +.figure-img { + margin-bottom: .5rem; + line-height: 1 +} + +.figure-caption { + font-size: 90%; + color: #6c757d +} + +code, kbd, pre, samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace +} + +code { + font-size: 87.5%; + color: #e91e63; + word-break: break-word +} + +a > code { + color: inherit +} + +kbd { + padding: .2rem .4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: .0625rem; + box-shadow: inset 0 -.1rem 0 rgba(0, 0, 0, .25) +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + box-shadow: none +} + +pre { + display: block; + font-size: 87.5%; + color: #212529 +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto +} + +@media (min-width: 576px) { + .container { + max-width: 540px + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto +} + +.row { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px +} + +.no-gutters { + margin-right: 0; + margin-left: 0 +} + +.no-gutters > .col, .no-gutters > [class*=col-] { + padding-right: 0; + padding-left: 0 +} + +.col, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-auto, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-auto, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md-auto, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px +} + +.col { + flex-basis: 0; + flex-grow: 1; + max-width: 100% +} + +.col-auto { + flex: 0 0 auto; + width: auto; + max-width: none +} + +.col-1 { + flex: 0 0 8.33333%; + max-width: 8.33333% +} + +.col-2 { + flex: 0 0 16.66667%; + max-width: 16.66667% +} + +.col-3 { + flex: 0 0 25%; + max-width: 25% +} + +.col-4 { + flex: 0 0 33.33333%; + max-width: 33.33333% +} + +.col-5 { + flex: 0 0 41.66667%; + max-width: 41.66667% +} + +.col-6 { + flex: 0 0 50%; + max-width: 50% +} + +.col-7 { + flex: 0 0 58.33333%; + max-width: 58.33333% +} + +.col-8 { + flex: 0 0 66.66667%; + max-width: 66.66667% +} + +.col-9 { + flex: 0 0 75%; + max-width: 75% +} + +.col-10 { + flex: 0 0 83.33333%; + max-width: 83.33333% +} + +.col-11 { + flex: 0 0 91.66667%; + max-width: 91.66667% +} + +.col-12 { + flex: 0 0 100%; + max-width: 100% +} + +.order-first { + order: -1 +} + +.order-last { + order: 13 +} + +.order-0 { + order: 0 +} + +.order-1 { + order: 1 +} + +.order-2 { + order: 2 +} + +.order-3 { + order: 3 +} + +.order-4 { + order: 4 +} + +.order-5 { + order: 5 +} + +.order-6 { + order: 6 +} + +.order-7 { + order: 7 +} + +.order-8 { + order: 8 +} + +.order-9 { + order: 9 +} + +.order-10 { + order: 10 +} + +.order-11 { + order: 11 +} + +.order-12 { + order: 12 +} + +.offset-1 { + margin-left: 8.33333% +} + +.offset-2 { + margin-left: 16.66667% +} + +.offset-3 { + margin-left: 25% +} + +.offset-4 { + margin-left: 33.33333% +} + +.offset-5 { + margin-left: 41.66667% +} + +.offset-6 { + margin-left: 50% +} + +.offset-7 { + margin-left: 58.33333% +} + +.offset-8 { + margin-left: 66.66667% +} + +.offset-9 { + margin-left: 75% +} + +.offset-10 { + margin-left: 83.33333% +} + +.offset-11 { + margin-left: 91.66667% +} + +@media (min-width: 576px) { + .col-sm { + flex-basis: 0; + flex-grow: 1; + max-width: 100% + } + + .col-sm-auto { + flex: 0 0 auto; + width: auto; + max-width: none + } + + .col-sm-1 { + flex: 0 0 8.33333%; + max-width: 8.33333% + } + + .col-sm-2 { + flex: 0 0 16.66667%; + max-width: 16.66667% + } + + .col-sm-3 { + flex: 0 0 25%; + max-width: 25% + } + + .col-sm-4 { + flex: 0 0 33.33333%; + max-width: 33.33333% + } + + .col-sm-5 { + flex: 0 0 41.66667%; + max-width: 41.66667% + } + + .col-sm-6 { + flex: 0 0 50%; + max-width: 50% + } + + .col-sm-7 { + flex: 0 0 58.33333%; + max-width: 58.33333% + } + + .col-sm-8 { + flex: 0 0 66.66667%; + max-width: 66.66667% + } + + .col-sm-9 { + flex: 0 0 75%; + max-width: 75% + } + + .col-sm-10 { + flex: 0 0 83.33333%; + max-width: 83.33333% + } + + .col-sm-11 { + flex: 0 0 91.66667%; + max-width: 91.66667% + } + + .col-sm-12 { + flex: 0 0 100%; + max-width: 100% + } + + .order-sm-first { + order: -1 + } + + .order-sm-last { + order: 13 + } + + .order-sm-0 { + order: 0 + } + + .order-sm-1 { + order: 1 + } + + .order-sm-2 { + order: 2 + } + + .order-sm-3 { + order: 3 + } + + .order-sm-4 { + order: 4 + } + + .order-sm-5 { + order: 5 + } + + .order-sm-6 { + order: 6 + } + + .order-sm-7 { + order: 7 + } + + .order-sm-8 { + order: 8 + } + + .order-sm-9 { + order: 9 + } + + .order-sm-10 { + order: 10 + } + + .order-sm-11 { + order: 11 + } + + .order-sm-12 { + order: 12 + } + + .offset-sm-0 { + margin-left: 0 + } + + .offset-sm-1 { + margin-left: 8.33333% + } + + .offset-sm-2 { + margin-left: 16.66667% + } + + .offset-sm-3 { + margin-left: 25% + } + + .offset-sm-4 { + margin-left: 33.33333% + } + + .offset-sm-5 { + margin-left: 41.66667% + } + + .offset-sm-6 { + margin-left: 50% + } + + .offset-sm-7 { + margin-left: 58.33333% + } + + .offset-sm-8 { + margin-left: 66.66667% + } + + .offset-sm-9 { + margin-left: 75% + } + + .offset-sm-10 { + margin-left: 83.33333% + } + + .offset-sm-11 { + margin-left: 91.66667% + } +} + +@media (min-width: 768px) { + .col-md { + flex-basis: 0; + flex-grow: 1; + max-width: 100% + } + + .col-md-auto { + flex: 0 0 auto; + width: auto; + max-width: none + } + + .col-md-1 { + flex: 0 0 8.33333%; + max-width: 8.33333% + } + + .col-md-2 { + flex: 0 0 16.66667%; + max-width: 16.66667% + } + + .col-md-3 { + flex: 0 0 25%; + max-width: 25% + } + + .col-md-4 { + flex: 0 0 33.33333%; + max-width: 33.33333% + } + + .col-md-5 { + flex: 0 0 41.66667%; + max-width: 41.66667% + } + + .col-md-6 { + flex: 0 0 50%; + max-width: 50% + } + + .col-md-7 { + flex: 0 0 58.33333%; + max-width: 58.33333% + } + + .col-md-8 { + flex: 0 0 66.66667%; + max-width: 66.66667% + } + + .col-md-9 { + flex: 0 0 75%; + max-width: 75% + } + + .col-md-10 { + flex: 0 0 83.33333%; + max-width: 83.33333% + } + + .col-md-11 { + flex: 0 0 91.66667%; + max-width: 91.66667% + } + + .col-md-12 { + flex: 0 0 100%; + max-width: 100% + } + + .order-md-first { + order: -1 + } + + .order-md-last { + order: 13 + } + + .order-md-0 { + order: 0 + } + + .order-md-1 { + order: 1 + } + + .order-md-2 { + order: 2 + } + + .order-md-3 { + order: 3 + } + + .order-md-4 { + order: 4 + } + + .order-md-5 { + order: 5 + } + + .order-md-6 { + order: 6 + } + + .order-md-7 { + order: 7 + } + + .order-md-8 { + order: 8 + } + + .order-md-9 { + order: 9 + } + + .order-md-10 { + order: 10 + } + + .order-md-11 { + order: 11 + } + + .order-md-12 { + order: 12 + } + + .offset-md-0 { + margin-left: 0 + } + + .offset-md-1 { + margin-left: 8.33333% + } + + .offset-md-2 { + margin-left: 16.66667% + } + + .offset-md-3 { + margin-left: 25% + } + + .offset-md-4 { + margin-left: 33.33333% + } + + .offset-md-5 { + margin-left: 41.66667% + } + + .offset-md-6 { + margin-left: 50% + } + + .offset-md-7 { + margin-left: 58.33333% + } + + .offset-md-8 { + margin-left: 66.66667% + } + + .offset-md-9 { + margin-left: 75% + } + + .offset-md-10 { + margin-left: 83.33333% + } + + .offset-md-11 { + margin-left: 91.66667% + } +} + +@media (min-width: 992px) { + .col-lg { + flex-basis: 0; + flex-grow: 1; + max-width: 100% + } + + .col-lg-auto { + flex: 0 0 auto; + width: auto; + max-width: none + } + + .col-lg-1 { + flex: 0 0 8.33333%; + max-width: 8.33333% + } + + .col-lg-2 { + flex: 0 0 16.66667%; + max-width: 16.66667% + } + + .col-lg-3 { + flex: 0 0 25%; + max-width: 25% + } + + .col-lg-4 { + flex: 0 0 33.33333%; + max-width: 33.33333% + } + + .col-lg-5 { + flex: 0 0 41.66667%; + max-width: 41.66667% + } + + .col-lg-6 { + flex: 0 0 50%; + max-width: 50% + } + + .col-lg-7 { + flex: 0 0 58.33333%; + max-width: 58.33333% + } + + .col-lg-8 { + flex: 0 0 66.66667%; + max-width: 66.66667% + } + + .col-lg-9 { + flex: 0 0 75%; + max-width: 75% + } + + .col-lg-10 { + flex: 0 0 83.33333%; + max-width: 83.33333% + } + + .col-lg-11 { + flex: 0 0 91.66667%; + max-width: 91.66667% + } + + .col-lg-12 { + flex: 0 0 100%; + max-width: 100% + } + + .order-lg-first { + order: -1 + } + + .order-lg-last { + order: 13 + } + + .order-lg-0 { + order: 0 + } + + .order-lg-1 { + order: 1 + } + + .order-lg-2 { + order: 2 + } + + .order-lg-3 { + order: 3 + } + + .order-lg-4 { + order: 4 + } + + .order-lg-5 { + order: 5 + } + + .order-lg-6 { + order: 6 + } + + .order-lg-7 { + order: 7 + } + + .order-lg-8 { + order: 8 + } + + .order-lg-9 { + order: 9 + } + + .order-lg-10 { + order: 10 + } + + .order-lg-11 { + order: 11 + } + + .order-lg-12 { + order: 12 + } + + .offset-lg-0 { + margin-left: 0 + } + + .offset-lg-1 { + margin-left: 8.33333% + } + + .offset-lg-2 { + margin-left: 16.66667% + } + + .offset-lg-3 { + margin-left: 25% + } + + .offset-lg-4 { + margin-left: 33.33333% + } + + .offset-lg-5 { + margin-left: 41.66667% + } + + .offset-lg-6 { + margin-left: 50% + } + + .offset-lg-7 { + margin-left: 58.33333% + } + + .offset-lg-8 { + margin-left: 66.66667% + } + + .offset-lg-9 { + margin-left: 75% + } + + .offset-lg-10 { + margin-left: 83.33333% + } + + .offset-lg-11 { + margin-left: 91.66667% + } +} + +@media (min-width: 1200px) { + .col-xl { + flex-basis: 0; + flex-grow: 1; + max-width: 100% + } + + .col-xl-auto { + flex: 0 0 auto; + width: auto; + max-width: none + } + + .col-xl-1 { + flex: 0 0 8.33333%; + max-width: 8.33333% + } + + .col-xl-2 { + flex: 0 0 16.66667%; + max-width: 16.66667% + } + + .col-xl-3 { + flex: 0 0 25%; + max-width: 25% + } + + .col-xl-4 { + flex: 0 0 33.33333%; + max-width: 33.33333% + } + + .col-xl-5 { + flex: 0 0 41.66667%; + max-width: 41.66667% + } + + .col-xl-6 { + flex: 0 0 50%; + max-width: 50% + } + + .col-xl-7 { + flex: 0 0 58.33333%; + max-width: 58.33333% + } + + .col-xl-8 { + flex: 0 0 66.66667%; + max-width: 66.66667% + } + + .col-xl-9 { + flex: 0 0 75%; + max-width: 75% + } + + .col-xl-10 { + flex: 0 0 83.33333%; + max-width: 83.33333% + } + + .col-xl-11 { + flex: 0 0 91.66667%; + max-width: 91.66667% + } + + .col-xl-12 { + flex: 0 0 100%; + max-width: 100% + } + + .order-xl-first { + order: -1 + } + + .order-xl-last { + order: 13 + } + + .order-xl-0 { + order: 0 + } + + .order-xl-1 { + order: 1 + } + + .order-xl-2 { + order: 2 + } + + .order-xl-3 { + order: 3 + } + + .order-xl-4 { + order: 4 + } + + .order-xl-5 { + order: 5 + } + + .order-xl-6 { + order: 6 + } + + .order-xl-7 { + order: 7 + } + + .order-xl-8 { + order: 8 + } + + .order-xl-9 { + order: 9 + } + + .order-xl-10 { + order: 10 + } + + .order-xl-11 { + order: 11 + } + + .order-xl-12 { + order: 12 + } + + .offset-xl-0 { + margin-left: 0 + } + + .offset-xl-1 { + margin-left: 8.33333% + } + + .offset-xl-2 { + margin-left: 16.66667% + } + + .offset-xl-3 { + margin-left: 25% + } + + .offset-xl-4 { + margin-left: 33.33333% + } + + .offset-xl-5 { + margin-left: 41.66667% + } + + .offset-xl-6 { + margin-left: 50% + } + + .offset-xl-7 { + margin-left: 58.33333% + } + + .offset-xl-8 { + margin-left: 66.66667% + } + + .offset-xl-9 { + margin-left: 75% + } + + .offset-xl-10 { + margin-left: 83.33333% + } + + .offset-xl-11 { + margin-left: 91.66667% + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent +} + +.table td, .table th { + padding: .75rem; + vertical-align: top; + border-top: 1px solid rgba(0, 0, 0, .06) +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid rgba(0, 0, 0, .06) +} + +.table tbody + tbody { + border-top: 2px solid rgba(0, 0, 0, .06) +} + +.table .table { + background-color: #fafafa +} + +.table-sm td, .table-sm th { + padding: .3rem +} + +.table-bordered, .table-bordered td, .table-bordered th { + border: 1px solid rgba(0, 0, 0, .06) +} + +.table-bordered thead td, .table-bordered thead th { + border-bottom-width: 2px +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, .05) +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-primary, .table-primary > td, .table-primary > th { + background-color: #b8e2de +} + +.table-hover .table-primary:hover, .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th { + background-color: #a6dbd6 +} + +.table-secondary, .table-secondary > td, .table-secondary > th { + background-color: #d6d8db +} + +.table-hover .table-secondary:hover, .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th { + background-color: #c8cbcf +} + +.table-success, .table-success > td, .table-success > th { + background-color: #cde9ce +} + +.table-hover .table-success:hover, .table-hover .table-success:hover > td, .table-hover .table-success:hover > th { + background-color: #bbe1bd +} + +.table-info, .table-info > td, .table-info > th { + background-color: #b8e7fc +} + +.table-hover .table-info:hover, .table-hover .table-info:hover > td, .table-hover .table-info:hover > th { + background-color: #a0dffb +} + +.table-warning, .table-warning > td, .table-warning > th { + background-color: #ffd0c1 +} + +.table-hover .table-warning:hover, .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th { + background-color: #ffbda8 +} + +.table-danger, .table-danger > td, .table-danger > th { + background-color: #fccac7 +} + +.table-hover .table-danger:hover, .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th { + background-color: #fbb3af +} + +.table-light, .table-light > td, .table-light > th { + background-color: #fcfcfc +} + +.table-hover .table-light:hover, .table-hover .table-light:hover > td, .table-hover .table-light:hover > th { + background-color: #efefef +} + +.table-dark, .table-dark > td, .table-dark > th { + background-color: #cacaca +} + +.table-hover .table-dark:hover, .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th { + background-color: #bdbdbd +} + +.table-active, .table-active > td, .table-active > th, .table-hover .table-active:hover, .table-hover .table-active:hover > td, .table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, .075) +} + +.table .thead-dark th { + color: #fafafa; + background-color: #212529; + border-color: #32383e +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: rgba(0, 0, 0, .06) +} + +.table-dark { + color: #fafafa; + background-color: #212529 +} + +.table-dark td, .table-dark th, .table-dark thead th { + border-color: #32383e +} + +.table-dark.table-bordered { + border: 0 +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: hsla(0, 0%, 100%, .05) +} + +.table-dark.table-hover tbody tr:hover { + background-color: hsla(0, 0%, 100%, .075) +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar + } + + .table-responsive-sm > .table-bordered { + border: 0 + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar + } + + .table-responsive-md > .table-bordered { + border: 0 + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar + } + + .table-responsive-lg > .table-bordered { + border: 0 + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar + } + + .table-responsive-xl > .table-bordered { + border: 0 + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar +} + +.table-responsive > .table-bordered { + border: 0 +} + +.custom-file-control, .form-control { + display: block; + width: 100%; + padding: .4375rem 0; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: transparent; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .26); + border-radius: 0; + box-shadow: none; + transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out +} + +.custom-file-control::-ms-expand, .form-control::-ms-expand { + background-color: transparent; + border: 0 +} + +.custom-file-control:focus, .form-control:focus { + color: #495057; + background-color: transparent; + border-color: #17ffe9; + outline: 0; + box-shadow: none, 0 0 0 .2rem rgba(0, 150, 136, .25) +} + +.custom-file-control::placeholder, .form-control::placeholder { + color: #6c757d; + opacity: 1 +} + +.custom-file-control:disabled, .form-control:disabled, .form-control[readonly], [readonly].custom-file-control { + background-color: #e9ecef; + opacity: 1 +} + +select.custom-file-control:not([size]):not([multiple]), select.form-control:not([size]):not([multiple]) { + height: calc(2.4375rem + 2px) +} + +select.custom-file-control:focus::-ms-value, select.form-control:focus::-ms-value { + color: #495057; + background-color: transparent +} + +.form-control-file, .form-control-range { + display: block; + width: 100% +} + +.col-form-label { + padding-top: calc(.4375rem + 1px); + padding-bottom: calc(.4375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5 +} + +.col-form-label-lg { + padding-top: calc(.5625rem + 1px); + padding-bottom: calc(.5625rem + 1px); + font-size: 1.25rem; + line-height: 1.5 +} + +.col-form-label-sm { + padding-top: calc(.25rem + 1px); + padding-bottom: calc(.25rem + 1px); + font-size: .875rem; + line-height: 1.5 +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: .4375rem; + padding-bottom: .4375rem; + margin-bottom: 0; + line-height: 1.5; + background-color: transparent; + border: solid transparent; + border-width: 1px 0 +} + +.form-control-plaintext.form-control-lg, .form-control-plaintext.form-control-sm, .input-group-lg > .form-control-plaintext.custom-file-control, .input-group-lg > .form-control-plaintext.form-control, .input-group-lg > .input-group-append > .form-control-plaintext.btn, .input-group-lg > .input-group-append > .form-control-plaintext.custom-file-control:before, .input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, .input-group-lg > .input-group-prepend > .form-control-plaintext.btn, .input-group-lg > .input-group-prepend > .form-control-plaintext.custom-file-control:before, .input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, .input-group-sm > .form-control-plaintext.custom-file-control, .input-group-sm > .form-control-plaintext.form-control, .input-group-sm > .input-group-append > .form-control-plaintext.btn, .input-group-sm > .input-group-append > .form-control-plaintext.custom-file-control:before, .input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, .input-group-sm > .input-group-prepend > .form-control-plaintext.btn, .input-group-sm > .input-group-prepend > .form-control-plaintext.custom-file-control:before, .input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text { + padding-right: 0; + padding-left: 0 +} + +.form-control-sm, .input-group-sm > .custom-file-control, .input-group-sm > .form-control, .input-group-sm > .input-group-append > .btn, .input-group-sm > .input-group-append > .custom-file-control:before, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-prepend > .custom-file-control:before, .input-group-sm > .input-group-prepend > .input-group-text { + padding: .25rem 0; + font-size: .875rem; + line-height: 1.5; + border-radius: .0625rem +} + +.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]), .input-group-sm > .input-group-append > select.custom-file-control:not([size]):not([multiple]):before, .input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), .input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), .input-group-sm > .input-group-prepend > select.custom-file-control:not([size]):not([multiple]):before, .input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), .input-group-sm > select.custom-file-control:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), select.form-control-sm:not([size]):not([multiple]) { + height: calc(2.125rem + 2px) +} + +.form-control-lg, .input-group-lg > .custom-file-control, .input-group-lg > .form-control, .input-group-lg > .input-group-append > .btn, .input-group-lg > .input-group-append > .custom-file-control:before, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-prepend > .custom-file-control:before, .input-group-lg > .input-group-prepend > .input-group-text { + padding: .5625rem 0; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]), .input-group-lg > .input-group-append > select.custom-file-control:not([size]):not([multiple]):before, .input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), .input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), .input-group-lg > .input-group-prepend > select.custom-file-control:not([size]):not([multiple]):before, .input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), .input-group-lg > select.custom-file-control:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), select.form-control-lg:not([size]):not([multiple]) { + height: calc(2.875rem + 2px) +} + +.form-group { + margin-bottom: 1rem +} + +.form-text { + display: block; + margin-top: .25rem +} + +.form-row { + display: flex; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px +} + +.form-row > .col, .form-row > [class*=col-] { + padding-right: 5px; + padding-left: 5px +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem +} + +.form-check-input { + position: absolute; + margin-top: .3rem; + margin-left: -1.25rem +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d +} + +.form-check-label { + margin-bottom: 0 +} + +.form-check-inline { + display: inline-flex; + align-items: center; + padding-left: 0; + margin-right: .75rem +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: .3125rem; + margin-left: 0 +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #4caf50 +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(76, 175, 80, .8); + border-radius: .2rem +} + +.custom-select.is-valid, .form-control.is-valid, .is-valid.custom-file-control, .was-validated .custom-file-control:valid, .was-validated .custom-select:valid, .was-validated .form-control:valid { + border-color: #4caf50 +} + +.custom-select.is-valid:focus, .form-control.is-valid:focus, .is-valid.custom-file-control:focus, .was-validated .custom-file-control:valid:focus, .was-validated .custom-select:valid:focus, .was-validated .form-control:valid:focus { + border-color: #4caf50; + box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25) +} + +.custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, .form-control.is-valid ~ .valid-tooltip, .is-valid.custom-file-control ~ .valid-feedback, .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .custom-file-control:valid ~ .valid-feedback, .was-validated .custom-file-control:valid ~ .valid-tooltip, .was-validated .custom-select:valid ~ .valid-feedback, .was-validated .custom-select:valid ~ .valid-tooltip, .was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip { + display: block +} + +.form-check-input.is-valid ~ .form-check-label, .was-validated .form-check-input:valid ~ .form-check-label { + color: #4caf50 +} + +.form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip, .was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.custom-control-input.is-valid ~ .custom-control-label, .was-validated .custom-control-input:valid ~ .custom-control-label { + color: #4caf50 +} + +.custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .custom-control-input:valid ~ .custom-control-label:before { + background-color: #a3d7a5 +} + +.custom-control-input.is-valid ~ .valid-feedback, .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: #6ec071 +} + +.custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(76, 175, 80, .25) +} + +.custom-file-input.is-valid ~ .custom-file-label, .was-validated .custom-file-input:valid ~ .custom-file-label { + border-color: #4caf50 +} + +.custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.custom-file-input.is-valid ~ .valid-feedback, .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25) +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #f44336 +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(244, 67, 54, .8); + border-radius: .2rem +} + +.custom-select.is-invalid, .form-control.is-invalid, .is-invalid.custom-file-control, .was-validated .custom-file-control:invalid, .was-validated .custom-select:invalid, .was-validated .form-control:invalid { + border-color: #f44336 +} + +.custom-select.is-invalid:focus, .form-control.is-invalid:focus, .is-invalid.custom-file-control:focus, .was-validated .custom-file-control:invalid:focus, .was-validated .custom-select:invalid:focus, .was-validated .form-control:invalid:focus { + border-color: #f44336; + box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25) +} + +.custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, .form-control.is-invalid ~ .invalid-tooltip, .is-invalid.custom-file-control ~ .invalid-feedback, .is-invalid.custom-file-control ~ .invalid-tooltip, .was-validated .custom-file-control:invalid ~ .invalid-feedback, .was-validated .custom-file-control:invalid ~ .invalid-tooltip, .was-validated .custom-select:invalid ~ .invalid-feedback, .was-validated .custom-select:invalid ~ .invalid-tooltip, .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip { + display: block +} + +.form-check-input.is-invalid ~ .form-check-label, .was-validated .form-check-input:invalid ~ .form-check-label { + color: #f44336 +} + +.form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip, .was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip { + display: block +} + +.custom-control-input.is-invalid ~ .custom-control-label, .was-validated .custom-control-input:invalid ~ .custom-control-label { + color: #f44336 +} + +.custom-control-input.is-invalid ~ .custom-control-label:before, .was-validated .custom-control-input:invalid ~ .custom-control-label:before { + background-color: #fbb4af +} + +.custom-control-input.is-invalid ~ .invalid-feedback, .custom-control-input.is-invalid ~ .invalid-tooltip, .was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip { + display: block +} + +.custom-control-input.is-invalid:checked ~ .custom-control-label:before, .was-validated .custom-control-input:invalid:checked ~ .custom-control-label:before { + background-color: #f77066 +} + +.custom-control-input.is-invalid:focus ~ .custom-control-label:before, .was-validated .custom-control-input:invalid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(244, 67, 54, .25) +} + +.custom-file-input.is-invalid ~ .custom-file-label, .was-validated .custom-file-input:invalid ~ .custom-file-label { + border-color: #f44336 +} + +.custom-file-input.is-invalid ~ .custom-file-label:before, .was-validated .custom-file-input:invalid ~ .custom-file-label:before { + border-color: inherit +} + +.custom-file-input.is-invalid ~ .invalid-feedback, .custom-file-input.is-invalid ~ .invalid-tooltip, .was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip { + display: block +} + +.custom-file-input.is-invalid:focus ~ .custom-file-label, .was-validated .custom-file-input:invalid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25) +} + +.form-inline { + display: flex; + flex-flow: row wrap; + align-items: center +} + +.form-inline .form-check { + width: 100% +} + +@media (min-width: 576px) { + .form-inline label { + justify-content: center + } + + .form-inline .form-group, .form-inline label { + display: flex; + align-items: center; + margin-bottom: 0 + } + + .form-inline .form-group { + flex: 0 0 auto; + flex-flow: row wrap + } + + .form-inline .custom-file-control, .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .form-inline .form-control-plaintext { + display: inline-block + } + + .form-inline .input-group { + width: auto + } + + .form-inline .form-check { + display: flex; + align-items: center; + justify-content: center; + width: auto; + padding-left: 0 + } + + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: .25rem; + margin-left: 0 + } + + .form-inline .custom-control { + align-items: center; + justify-content: center + } + + .form-inline .custom-control-label { + margin-bottom: 0 + } +} + +.btn, .custom-file-control:before { + display: inline-block; + font-weight: 500; + text-align: center; + white-space: nowrap; + vertical-align: middle; + user-select: none; + border: 1px solid transparent; + padding: .46875rem 1rem; + font-size: 1rem; + line-height: 1.5; + border-radius: .125rem; + transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out +} + +.btn:focus, .btn:hover, .custom-file-control:focus:before, .custom-file-control:hover:before { + text-decoration: none +} + +.btn.focus, .btn:focus, .custom-file-control:focus:before, .focus.custom-file-control:before { + outline: 0; + box-shadow: none +} + +.btn.disabled, .btn:disabled, .custom-file-control:disabled:before, .disabled.custom-file-control:before { + opacity: .65; + box-shadow: none +} + +.btn:not(:disabled):not(.disabled), .custom-file-control:not(:disabled):not(.disabled):before { + cursor: pointer +} + +.btn:not(:disabled):not(.disabled).active, .btn:not(:disabled):not(.disabled):active, .custom-file-control:not(:disabled):not(.disabled).active:before, .custom-file-control:not(:disabled):not(.disabled):active:before { + background-image: none; + box-shadow: none +} + +.btn:not(:disabled):not(.disabled).active:focus, .btn:not(:disabled):not(.disabled):active:focus, .custom-file-control:not(:disabled):not(.disabled).active:focus:before, .custom-file-control:not(:disabled):not(.disabled):active:focus:before { + box-shadow: none, none +} + +a.btn.disabled, a.disabled.custom-file-control:before, fieldset:disabled a.btn, fieldset:disabled a.custom-file-control:before { + pointer-events: none +} + +.btn-primary { + color: #fff; + background-color: #009688; + border-color: #009688; + box-shadow: none +} + +.btn-primary:hover { + color: #fff; + background-color: #007065; + border-color: #00635a +} + +.btn-primary.focus, .btn-primary:focus { + box-shadow: none, 0 0 0 .2rem rgba(0, 150, 136, .5) +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #009688; + border-color: #009688 +} + +.btn-primary:not(:disabled):not(.disabled).active, .btn-primary:not(:disabled):not(.disabled):active, .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #00635a; + border-color: #00564e +} + +.btn-primary:not(:disabled):not(.disabled).active:focus, .btn-primary:not(:disabled):not(.disabled):active:focus, .show > .btn-primary.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem rgba(0, 150, 136, .5) +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; + box-shadow: none +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62 +} + +.btn-secondary.focus, .btn-secondary:focus { + box-shadow: none, 0 0 0 .2rem hsla(208, 7%, 46%, .5) +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.btn-secondary:not(:disabled):not(.disabled).active, .btn-secondary:not(:disabled):not(.disabled):active, .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b +} + +.btn-secondary:not(:disabled):not(.disabled).active:focus, .btn-secondary:not(:disabled):not(.disabled):active:focus, .show > .btn-secondary.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem hsla(208, 7%, 46%, .5) +} + +.btn-success { + color: #fff; + background-color: #4caf50; + border-color: #4caf50; + box-shadow: none +} + +.btn-success:hover { + color: #fff; + background-color: #409444; + border-color: #3d8b40 +} + +.btn-success.focus, .btn-success:focus { + box-shadow: none, 0 0 0 .2rem rgba(76, 175, 80, .5) +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #4caf50; + border-color: #4caf50 +} + +.btn-success:not(:disabled):not(.disabled).active, .btn-success:not(:disabled):not(.disabled):active, .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #3d8b40; + border-color: #39833c +} + +.btn-success:not(:disabled):not(.disabled).active:focus, .btn-success:not(:disabled):not(.disabled):active:focus, .show > .btn-success.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem rgba(76, 175, 80, .5) +} + +.btn-info { + color: #fff; + background-color: #03a9f4; + border-color: #03a9f4; + box-shadow: none +} + +.btn-info:hover { + color: #fff; + background-color: #038fce; + border-color: #0286c2 +} + +.btn-info.focus, .btn-info:focus { + box-shadow: none, 0 0 0 .2rem rgba(3, 169, 244, .5) +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #03a9f4; + border-color: #03a9f4 +} + +.btn-info:not(:disabled):not(.disabled).active, .btn-info:not(:disabled):not(.disabled):active, .show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #0286c2; + border-color: #027db5 +} + +.btn-info:not(:disabled):not(.disabled).active:focus, .btn-info:not(:disabled):not(.disabled):active:focus, .show > .btn-info.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem rgba(3, 169, 244, .5) +} + +.btn-warning { + color: #fff; + background-color: #ff5722; + border-color: #ff5722; + box-shadow: none +} + +.btn-warning:hover { + color: #fff; + background-color: #fb3c00; + border-color: #ee3900 +} + +.btn-warning.focus, .btn-warning:focus { + box-shadow: none, 0 0 0 .2rem rgba(255, 87, 34, .5) +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #fff; + background-color: #ff5722; + border-color: #ff5722 +} + +.btn-warning:not(:disabled):not(.disabled).active, .btn-warning:not(:disabled):not(.disabled):active, .show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ee3900; + border-color: #e13600 +} + +.btn-warning:not(:disabled):not(.disabled).active:focus, .btn-warning:not(:disabled):not(.disabled):active:focus, .show > .btn-warning.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem rgba(255, 87, 34, .5) +} + +.btn-danger { + color: #fff; + background-color: #f44336; + border-color: #f44336; + box-shadow: none +} + +.btn-danger:hover { + color: #fff; + background-color: #f22112; + border-color: #ea1c0d +} + +.btn-danger.focus, .btn-danger:focus { + box-shadow: none, 0 0 0 .2rem rgba(244, 67, 54, .5) +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #f44336; + border-color: #f44336 +} + +.btn-danger:not(:disabled):not(.disabled).active, .btn-danger:not(:disabled):not(.disabled):active, .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #ea1c0d; + border-color: #de1b0c +} + +.btn-danger:not(:disabled):not(.disabled).active:focus, .btn-danger:not(:disabled):not(.disabled):active:focus, .show > .btn-danger.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem rgba(244, 67, 54, .5) +} + +.btn-light { + color: #212529; + background-color: #f5f5f5; + border-color: #f5f5f5; + box-shadow: none +} + +.btn-light:hover { + color: #212529; + background-color: #e2e2e2; + border-color: #dcdcdc +} + +.btn-light.focus, .btn-light:focus { + box-shadow: none, 0 0 0 .2rem hsla(0, 0%, 96%, .5) +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f5f5f5; + border-color: #f5f5f5 +} + +.btn-light:not(:disabled):not(.disabled).active, .btn-light:not(:disabled):not(.disabled):active, .show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dcdcdc; + border-color: #d5d5d5 +} + +.btn-light:not(:disabled):not(.disabled).active:focus, .btn-light:not(:disabled):not(.disabled):active:focus, .show > .btn-light.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem hsla(0, 0%, 96%, .5) +} + +.btn-dark { + color: #fff; + background-color: #424242; + border-color: #424242; + box-shadow: none +} + +.btn-dark:hover { + color: #fff; + background-color: #2f2f2f; + border-color: #292929 +} + +.btn-dark.focus, .btn-dark:focus { + box-shadow: none, 0 0 0 .2rem rgba(66, 66, 66, .5) +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #424242; + border-color: #424242 +} + +.btn-dark:not(:disabled):not(.disabled).active, .btn-dark:not(:disabled):not(.disabled):active, .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #292929; + border-color: #222 +} + +.btn-dark:not(:disabled):not(.disabled).active:focus, .btn-dark:not(:disabled):not(.disabled):active:focus, .show > .btn-dark.dropdown-toggle:focus { + box-shadow: none, 0 0 0 .2rem rgba(66, 66, 66, .5) +} + +.btn-outline-primary { + color: #009688; + background-color: transparent; + background-image: none; + border-color: #009688 +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #009688; + border-color: #009688 +} + +.btn-outline-primary.focus, .btn-outline-primary:focus { + box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .5) +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #009688; + background-color: transparent +} + +.btn-outline-primary:not(:disabled):not(.disabled).active, .btn-outline-primary:not(:disabled):not(.disabled):active, .show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #009688; + border-color: #009688 +} + +.btn-outline-primary:not(:disabled):not(.disabled).active:focus, .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .5) +} + +.btn-outline-secondary { + color: #6c757d; + background-color: transparent; + background-image: none; + border-color: #6c757d +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.btn-outline-secondary.focus, .btn-outline-secondary:focus { + box-shadow: 0 0 0 .2rem hsla(208, 7%, 46%, .5) +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent +} + +.btn-outline-secondary:not(:disabled):not(.disabled).active, .btn-outline-secondary:not(:disabled):not(.disabled):active, .show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem hsla(208, 7%, 46%, .5) +} + +.btn-outline-success { + color: #4caf50; + background-color: transparent; + background-image: none; + border-color: #4caf50 +} + +.btn-outline-success:hover { + color: #fff; + background-color: #4caf50; + border-color: #4caf50 +} + +.btn-outline-success.focus, .btn-outline-success:focus { + box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .5) +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #4caf50; + background-color: transparent +} + +.btn-outline-success:not(:disabled):not(.disabled).active, .btn-outline-success:not(:disabled):not(.disabled):active, .show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #4caf50; + border-color: #4caf50 +} + +.btn-outline-success:not(:disabled):not(.disabled).active:focus, .btn-outline-success:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .5) +} + +.btn-outline-info { + color: #03a9f4; + background-color: transparent; + background-image: none; + border-color: #03a9f4 +} + +.btn-outline-info:hover { + color: #fff; + background-color: #03a9f4; + border-color: #03a9f4 +} + +.btn-outline-info.focus, .btn-outline-info:focus { + box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .5) +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #03a9f4; + background-color: transparent +} + +.btn-outline-info:not(:disabled):not(.disabled).active, .btn-outline-info:not(:disabled):not(.disabled):active, .show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #03a9f4; + border-color: #03a9f4 +} + +.btn-outline-info:not(:disabled):not(.disabled).active:focus, .btn-outline-info:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .5) +} + +.btn-outline-warning { + color: #ff5722; + background-color: transparent; + background-image: none; + border-color: #ff5722 +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #ff5722; + border-color: #ff5722 +} + +.btn-outline-warning.focus, .btn-outline-warning:focus { + box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .5) +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ff5722; + background-color: transparent +} + +.btn-outline-warning:not(:disabled):not(.disabled).active, .btn-outline-warning:not(:disabled):not(.disabled):active, .show > .btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #ff5722; + border-color: #ff5722 +} + +.btn-outline-warning:not(:disabled):not(.disabled).active:focus, .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .5) +} + +.btn-outline-danger { + color: #f44336; + background-color: transparent; + background-image: none; + border-color: #f44336 +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #f44336; + border-color: #f44336 +} + +.btn-outline-danger.focus, .btn-outline-danger:focus { + box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .5) +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #f44336; + background-color: transparent +} + +.btn-outline-danger:not(:disabled):not(.disabled).active, .btn-outline-danger:not(:disabled):not(.disabled):active, .show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #f44336; + border-color: #f44336 +} + +.btn-outline-danger:not(:disabled):not(.disabled).active:focus, .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .5) +} + +.btn-outline-light { + color: #f5f5f5; + background-color: transparent; + background-image: none; + border-color: #f5f5f5 +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f5f5f5; + border-color: #f5f5f5 +} + +.btn-outline-light.focus, .btn-outline-light:focus { + box-shadow: 0 0 0 .2rem hsla(0, 0%, 96%, .5) +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f5f5f5; + background-color: transparent +} + +.btn-outline-light:not(:disabled):not(.disabled).active, .btn-outline-light:not(:disabled):not(.disabled):active, .show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f5f5f5; + border-color: #f5f5f5 +} + +.btn-outline-light:not(:disabled):not(.disabled).active:focus, .btn-outline-light:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem hsla(0, 0%, 96%, .5) +} + +.btn-outline-dark { + color: #424242; + background-color: transparent; + background-image: none; + border-color: #424242 +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #424242; + border-color: #424242 +} + +.btn-outline-dark.focus, .btn-outline-dark:focus { + box-shadow: 0 0 0 .2rem rgba(66, 66, 66, .5) +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #424242; + background-color: transparent +} + +.btn-outline-dark:not(:disabled):not(.disabled).active, .btn-outline-dark:not(:disabled):not(.disabled):active, .show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #424242; + border-color: #424242 +} + +.btn-outline-dark:not(:disabled):not(.disabled).active:focus, .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 .2rem rgba(66, 66, 66, .5) +} + +.btn-link { + font-weight: 400; + color: #009688; + background-color: transparent +} + +.btn-link:hover { + color: #004a43; + background-color: transparent +} + +.btn-link.focus, .btn-link:focus, .btn-link:hover { + text-decoration: underline; + border-color: transparent +} + +.btn-link.focus, .btn-link:focus { + box-shadow: none +} + +.btn-link.disabled, .btn-link:disabled { + color: rgba(0, 0, 0, .26) +} + +.btn-group-lg > .btn, .btn-group-lg > .custom-file-control:before, .btn-lg { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.btn-group-sm > .btn, .btn-group-sm > .custom-file-control:before, .btn-sm { + padding: .40625rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .0625rem +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block + .btn-block { + margin-top: .5rem +} + +input[type=button].btn-block, input[type=reset].btn-block, input[type=submit].btn-block { + width: 100% +} + +.fade { + opacity: 0; + transition: opacity .15s linear +} + +.fade.show { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.show { + display: block +} + +tr.collapse.show { + display: table-row +} + +tbody.collapse.show { + display: table-row-group +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height .35s ease +} + +.collapsing, .dropdown, .dropup { + position: relative +} + +.dropdown-toggle:after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid; + border-right: .3em solid transparent; + border-bottom: 0; + border-left: .3em solid transparent +} + +.dropdown-toggle:empty:after { + margin-left: 0 +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + float: left; + min-width: 10rem; + padding: .5rem 0; + margin: .125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .125rem; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12) +} + +.dropup .dropdown-menu { + margin-top: 0; + margin-bottom: .125rem +} + +.dropup .dropdown-toggle:after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: 0; + border-right: .3em solid transparent; + border-bottom: .3em solid; + border-left: .3em solid transparent +} + +.dropup .dropdown-toggle:empty:after { + margin-left: 0 +} + +.dropright .dropdown-menu { + margin-top: 0; + margin-left: .125rem +} + +.dropright .dropdown-toggle:after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid transparent; + border-bottom: .3em solid transparent; + border-left: .3em solid +} + +.dropright .dropdown-toggle:empty:after { + margin-left: 0 +} + +.dropright .dropdown-toggle:after { + vertical-align: 0 +} + +.dropleft .dropdown-menu { + margin-top: 0; + margin-right: .125rem +} + +.dropleft .dropdown-toggle:after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + display: none +} + +.dropleft .dropdown-toggle:before { + display: inline-block; + width: 0; + height: 0; + margin-right: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid transparent; + border-right: .3em solid; + border-bottom: .3em solid transparent +} + +.dropleft .dropdown-toggle:empty:after { + margin-left: 0 +} + +.dropleft .dropdown-toggle:before { + vertical-align: 0 +} + +.dropdown-divider { + height: 0; + margin: .5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef +} + +.dropdown-item { + display: block; + width: 100%; + padding: .25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0 +} + +.dropdown-item:focus, .dropdown-item:hover { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #009688 +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + background-color: transparent +} + +.dropdown-menu.show { + display: block +} + +.dropdown-header { + display: block; + padding: .5rem 1.5rem; + margin-bottom: 0; + font-size: .875rem; + color: #6c757d; + white-space: nowrap +} + +.btn-group, .btn-group-vertical { + display: inline-flex; + vertical-align: middle +} + +.btn-group-vertical > .btn, .btn-group-vertical > .custom-file-control:before, .btn-group > .btn, .btn-group > .custom-file-control:before { + position: relative; + flex: 0 1 auto +} + +.btn-group-vertical > .active.custom-file-control:before, .btn-group-vertical > .btn.active, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:hover, .btn-group-vertical > .custom-file-control:active:before, .btn-group-vertical > .custom-file-control:focus:before, .btn-group-vertical > .custom-file-control:hover:before, .btn-group > .active.custom-file-control:before, .btn-group > .btn.active, .btn-group > .btn:active, .btn-group > .btn:focus, .btn-group > .btn:hover, .btn-group > .custom-file-control:active:before, .btn-group > .custom-file-control:focus:before, .btn-group > .custom-file-control:hover:before { + z-index: 1 +} + +.btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .btn-group, .btn-group-vertical .btn + .custom-file-control:before, .btn-group-vertical .btn-group + .btn, .btn-group-vertical .btn-group + .btn-group, .btn-group-vertical .btn-group + .custom-file-control:before, .btn-group-vertical .custom-file-control:before + .btn, .btn-group-vertical .custom-file-control:before + .btn-group, .btn-group-vertical .custom-file-control:before + .custom-file-control:before, .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn + .custom-file-control:before, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .btn-group .btn-group + .custom-file-control:before, .btn-group .custom-file-control:before + .btn, .btn-group .custom-file-control:before + .btn-group, .btn-group .custom-file-control:before + .custom-file-control:before { + margin-left: -1px +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start +} + +.btn-toolbar .input-group { + width: auto +} + +.btn-group > .btn:first-child, .btn-group > .custom-file-control:first-child:before { + margin-left: 0 +} + +.btn-group > .btn-group:not(:last-child) > .btn, .btn-group > .btn-group:not(:last-child) > .custom-file-control:before, .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .custom-file-control:not(:last-child):not(.dropdown-toggle):before { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group > .btn-group:not(:first-child) > .btn, .btn-group > .btn-group:not(:first-child) > .custom-file-control:before, .btn-group > .btn:not(:first-child), .btn-group > .custom-file-control:not(:first-child):before { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.dropdown-toggle-split { + padding-right: .75rem; + padding-left: .75rem +} + +.dropdown-toggle-split:after { + margin-left: 0 +} + +.btn-group-sm > .btn + .dropdown-toggle-split, .btn-group-sm > .custom-file-control:before + .dropdown-toggle-split, .btn-sm + .dropdown-toggle-split { + padding-right: .375rem; + padding-left: .375rem +} + +.btn-group-lg > .btn + .dropdown-toggle-split, .btn-group-lg > .custom-file-control:before + .dropdown-toggle-split, .btn-lg + .dropdown-toggle-split { + padding-right: .75rem; + padding-left: .75rem +} + +.btn-group.show .dropdown-toggle, .btn-group.show .dropdown-toggle.btn-link { + box-shadow: none +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center +} + +.btn-group-vertical .btn, .btn-group-vertical .btn-group, .btn-group-vertical .custom-file-control:before { + width: 100% +} + +.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn + .custom-file-control:before, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group, .btn-group-vertical > .btn-group + .custom-file-control:before, .btn-group-vertical > .custom-file-control:before + .btn, .btn-group-vertical > .custom-file-control:before + .btn-group, .btn-group-vertical > .custom-file-control:before + .custom-file-control:before { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical > .btn-group:not(:last-child) > .btn, .btn-group-vertical > .btn-group:not(:last-child) > .custom-file-control:before, .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .custom-file-control:not(:last-child):not(.dropdown-toggle):before { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:not(:first-child) > .btn, .btn-group-vertical > .btn-group:not(:first-child) > .custom-file-control:before, .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .custom-file-control:not(:first-child):before { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.btn-group-toggle > .btn, .btn-group-toggle > .btn-group > .btn, .btn-group-toggle > .btn-group > .custom-file-control:before, .btn-group-toggle > .custom-file-control:before { + margin-bottom: 0 +} + +.btn-group-toggle > .btn-group > .btn input[type=checkbox], .btn-group-toggle > .btn-group > .btn input[type=radio], .btn-group-toggle > .btn-group > .custom-file-control:before input[type=checkbox], .btn-group-toggle > .btn-group > .custom-file-control:before input[type=radio], .btn-group-toggle > .btn input[type=checkbox], .btn-group-toggle > .btn input[type=radio], .btn-group-toggle > .custom-file-control:before input[type=checkbox], .btn-group-toggle > .custom-file-control:before input[type=radio] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100% +} + +.input-group > .custom-file, .input-group > .custom-file-control, .input-group > .custom-select, .input-group > .form-control { + position: relative; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0 +} + +.input-group > .custom-file-control:focus, .input-group > .custom-file:focus, .input-group > .custom-select:focus, .input-group > .form-control:focus { + z-index: 3 +} + +.input-group > .custom-file + .custom-file, .input-group > .custom-file + .custom-file-control, .input-group > .custom-file + .custom-select, .input-group > .custom-file + .form-control, .input-group > .custom-file-control + .custom-file, .input-group > .custom-file-control + .custom-file-control, .input-group > .custom-file-control + .custom-select, .input-group > .custom-file-control + .form-control, .input-group > .custom-select + .custom-file, .input-group > .custom-select + .custom-file-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .form-control, .input-group > .form-control + .custom-file, .input-group > .form-control + .custom-file-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .form-control { + margin-left: -1px +} + +.input-group > .custom-file-control:not(:last-child), .input-group > .custom-select:not(:last-child), .input-group > .form-control:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group > .custom-file-control:not(:first-child), .input-group > .custom-select:not(:first-child), .input-group > .form-control:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.input-group > .custom-file { + display: flex; + align-items: center +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label:before { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group > .custom-file:not(:first-child) .custom-file-label, .input-group > .custom-file:not(:first-child) .custom-file-label:before { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.input-group-append, .input-group-prepend { + display: flex +} + +.input-group-append .btn, .input-group-append .custom-file-control:before, .input-group-prepend .btn, .input-group-prepend .custom-file-control:before { + position: relative; + z-index: 2 +} + +.input-group-append .btn + .btn, .input-group-append .btn + .custom-file-control:before, .input-group-append .btn + .input-group-text, .input-group-append .custom-file-control:before + .btn, .input-group-append .custom-file-control:before + .custom-file-control:before, .input-group-append .custom-file-control:before + .input-group-text, .input-group-append .input-group-text + .btn, .input-group-append .input-group-text + .custom-file-control:before, .input-group-append .input-group-text + .input-group-text, .input-group-prepend .btn + .btn, .input-group-prepend .btn + .custom-file-control:before, .input-group-prepend .btn + .input-group-text, .input-group-prepend .custom-file-control:before + .btn, .input-group-prepend .custom-file-control:before + .custom-file-control:before, .input-group-prepend .custom-file-control:before + .input-group-text, .input-group-prepend .input-group-text + .btn, .input-group-prepend .input-group-text + .custom-file-control:before, .input-group-prepend .input-group-text + .input-group-text { + margin-left: -1px +} + +.input-group-prepend { + margin-right: -1px +} + +.input-group-append { + margin-left: -1px +} + +.input-group-text { + display: flex; + align-items: center; + padding: .4375rem 0; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0 +} + +.input-group-text input[type=checkbox], .input-group-text input[type=radio] { + margin-top: 0 +} + +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .custom-file-control:not(:last-child):not(.dropdown-toggle):before, .input-group > .input-group-append:last-child > .input-group-text:not(:last-child), .input-group > .input-group-append:not(:last-child) > .btn, .input-group > .input-group-append:not(:last-child) > .custom-file-control:before, .input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .custom-file-control:before, .input-group > .input-group-prepend > .input-group-text { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group > .input-group-append > .btn, .input-group > .input-group-append > .custom-file-control:before, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .custom-file-control:not(:first-child):before, .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child), .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .custom-file-control:before, .input-group > .input-group-prepend:not(:first-child) > .input-group-text { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem +} + +.custom-control-inline { + display: inline-flex; + margin-right: 1rem +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0 +} + +.custom-control-input:checked ~ .custom-control-label:before { + color: #fff; + background-color: #009688; + box-shadow: none +} + +.custom-control-input:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(0, 150, 136, .25) +} + +.custom-control-input:active ~ .custom-control-label:before { + color: #fff; + background-color: #4affee; + box-shadow: none +} + +.custom-control-input:disabled ~ .custom-control-label { + color: #6c757d +} + +.custom-control-input:disabled ~ .custom-control-label:before { + background-color: #e9ecef +} + +.custom-control-label { + margin-bottom: 0 +} + +.custom-control-label:before { + pointer-events: none; + user-select: none; + background-color: #dee2e6; + box-shadow: inset 0 .25rem .25rem rgba(0, 0, 0, .1) +} + +.custom-control-label:after, .custom-control-label:before { + position: absolute; + top: .25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + content: "" +} + +.custom-control-label:after { + background-repeat: no-repeat; + background-position: 50%; + background-size: 50% 50% +} + +.custom-checkbox .custom-control-label:before { + border-radius: .125rem +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label:before { + background-color: #009688 +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label:after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E") +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label:before { + background-color: #009688; + box-shadow: none +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label:after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E") +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label:before { + background-color: rgba(0, 150, 136, .5) +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label:before { + background-color: rgba(0, 150, 136, .5) +} + +.custom-radio .custom-control-label:before { + border-radius: 50% +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label:before { + background-color: #009688 +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label:after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E") +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label:before { + background-color: rgba(0, 150, 136, .5) +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(2.4375rem + 2px); + padding: .375rem 1.75rem .375rem .75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, .26); + border-radius: .125rem; + appearance: none +} + +.custom-select:focus { + border-color: #17ffe9; + outline: 0; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 5px rgba(23, 255, 233, .5) +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: transparent +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: .75rem; + background-image: none +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef +} + +.custom-select::-ms-expand { + opacity: 0 +} + +.custom-select-sm { + height: calc(2.125rem + 2px); + font-size: 75% +} + +.custom-select-lg, .custom-select-sm { + padding-top: .375rem; + padding-bottom: .375rem +} + +.custom-select-lg { + height: calc(2.875rem + 2px); + font-size: 125% +} + +.custom-file { + display: inline-block; + margin-bottom: 0 +} + +.custom-file, .custom-file-input { + position: relative; + width: 100%; + height: calc(2.4375rem + 2px) +} + +.custom-file-input { + z-index: 2; + margin: 0; + opacity: 0 +} + +.custom-file-input:focus ~ .custom-file-control { + border-color: #17ffe9; + box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .25) +} + +.custom-file-input:focus ~ .custom-file-control:before { + border-color: #17ffe9 +} + +.custom-file-input:lang(en) ~ .custom-file-label:after { + content: "Browse" +} + +.custom-file-label { + left: 0; + z-index: 1; + height: calc(2.4375rem + 2px); + border: 0 solid rgba(0, 0, 0, .26); + border-radius: 0; + box-shadow: none +} + +.custom-file-label, .custom-file-label:after { + position: absolute; + top: 0; + right: 0; + padding: .46875rem 1rem; + line-height: 1.3; + color: #495057; + background-color: transparent +} + +.custom-file-label:after { + bottom: 0; + z-index: 3; + display: block; + height: calc((2.4375rem + 2px) - 0 * 2); + content: "Browse"; + border-left: 0 solid rgba(0, 0, 0, .26); + border-radius: 0 0 0 0 +} + +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.nav-link { + display: block; + padding: .5rem 1rem +} + +.nav-link:focus, .nav-link:hover { + text-decoration: none +} + +.nav-link.disabled { + color: #6c757d +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6 +} + +.nav-tabs .nav-item { + margin-bottom: -1px +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: .125rem; + border-top-right-radius: .125rem +} + +.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { + border-color: #e9ecef #e9ecef #dee2e6 +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent +} + +.nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active { + color: #495057; + background-color: #fafafa; + border-color: #dee2e6 #dee2e6 #fafafa +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.nav-pills .nav-link { + border-radius: .125rem +} + +.nav-pills .nav-link.active, .nav-pills .show > .nav-link { + color: #fff; + background-color: #009688 +} + +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center +} + +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center +} + +.tab-content > .tab-pane { + display: none +} + +.tab-content > .active { + display: block +} + +.navbar { + position: relative; + padding: .5rem 1rem +} + +.navbar, .navbar > .container, .navbar > .container-fluid { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between +} + +.navbar-brand { + display: inline-block; + padding-top: .3125rem; + padding-bottom: .3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap +} + +.navbar-brand:focus, .navbar-brand:hover { + text-decoration: none +} + +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0 +} + +.navbar-nav .dropdown-menu { + position: static; + float: none +} + +.navbar-text { + display: inline-block; + padding-top: .5rem; + padding-bottom: .5rem +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center +} + +.navbar-toggler { + padding: .25rem .75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: .125rem +} + +.navbar-toggler:focus, .navbar-toggler:hover { + text-decoration: none +} + +.navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat 50%; + background-size: 100% 100% +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start + } + + .navbar-expand-sm .navbar-nav { + flex-direction: row + } + + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute + } + + .navbar-expand-sm .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + + .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { + flex-wrap: nowrap + } + + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto + } + + .navbar-expand-sm .navbar-toggler { + display: none + } + + .navbar-expand-sm .dropup .dropdown-menu { + top: auto; + bottom: 100% + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + flex-flow: row nowrap; + justify-content: flex-start + } + + .navbar-expand-md .navbar-nav { + flex-direction: row + } + + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute + } + + .navbar-expand-md .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + + .navbar-expand-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + + .navbar-expand-md > .container, .navbar-expand-md > .container-fluid { + flex-wrap: nowrap + } + + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto + } + + .navbar-expand-md .navbar-toggler { + display: none + } + + .navbar-expand-md .dropup .dropdown-menu { + top: auto; + bottom: 100% + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-flow: row nowrap; + justify-content: flex-start + } + + .navbar-expand-lg .navbar-nav { + flex-direction: row + } + + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute + } + + .navbar-expand-lg .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + + .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid { + flex-wrap: nowrap + } + + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto + } + + .navbar-expand-lg .navbar-toggler { + display: none + } + + .navbar-expand-lg .dropup .dropdown-menu { + top: auto; + bottom: 100% + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-flow: row nowrap; + justify-content: flex-start + } + + .navbar-expand-xl .navbar-nav { + flex-direction: row + } + + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute + } + + .navbar-expand-xl .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + + .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid { + flex-wrap: nowrap + } + + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto + } + + .navbar-expand-xl .navbar-toggler { + display: none + } + + .navbar-expand-xl .dropup .dropdown-menu { + top: auto; + bottom: 100% + } +} + +.navbar-expand { + flex-flow: row nowrap; + justify-content: flex-start +} + +.navbar-expand > .container, .navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0 +} + +.navbar-expand .navbar-nav { + flex-direction: row +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute +} + +.navbar-expand .navbar-nav .dropdown-menu-right { + right: 0; + left: auto +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem +} + +.navbar-expand > .container, .navbar-expand > .container-fluid { + flex-wrap: nowrap +} + +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto +} + +.navbar-expand .navbar-toggler { + display: none +} + +.navbar-expand .dropup .dropdown-menu { + top: auto; + bottom: 100% +} + +.navbar-light .navbar-brand, .navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, .5) +} + +.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, .7) +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, .3) +} + +.navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show > .nav-link { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, .5); + border-color: rgba(0, 0, 0, .1) +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, .5) +} + +.navbar-light .navbar-text a, .navbar-light .navbar-text a:focus, .navbar-light .navbar-text a:hover { + color: rgba(0, 0, 0, .9) +} + +.navbar-dark .navbar-brand, .navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover { + color: #fff +} + +.navbar-dark .navbar-nav .nav-link { + color: hsla(0, 0%, 100%, .5) +} + +.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover { + color: hsla(0, 0%, 100%, .75) +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: hsla(0, 0%, 100%, .25) +} + +.navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.active, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .show > .nav-link { + color: #fff +} + +.navbar-dark .navbar-toggler { + color: hsla(0, 0%, 100%, .5); + border-color: hsla(0, 0%, 100%, .1) +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") +} + +.navbar-dark .navbar-text { + color: hsla(0, 0%, 100%, .5) +} + +.navbar-dark .navbar-text a, .navbar-dark .navbar-text a:focus, .navbar-dark .navbar-text a:hover { + color: #fff +} + +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, .12); + border-radius: .125rem +} + +.card > hr { + margin-right: 0; + margin-left: 0 +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: .125rem; + border-top-right-radius: .125rem +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: .125rem; + border-bottom-left-radius: .125rem +} + +.card-body { + flex: 1 1 auto; + padding: 1.25rem +} + +.card-title { + margin-bottom: .75rem +} + +.card-subtitle { + margin-top: -.375rem +} + +.card-subtitle, .card-text:last-child { + margin-bottom: 0 +} + +.card-link:hover { + text-decoration: none +} + +.card-link + .card-link { + margin-left: 1.25rem +} + +.card-header { + padding: .75rem 1.25rem; + margin-bottom: 0; + background-color: #fff; + border-bottom: 1px solid rgba(0, 0, 0, .12) +} + +.card-header:first-child { + border-radius: calc(.125rem - 1px) calc(.125rem - 1px) 0 0 +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0 +} + +.card-footer { + padding: .75rem 1.25rem; + background-color: #fff; + border-top: 1px solid rgba(0, 0, 0, .12) +} + +.card-footer:last-child { + border-radius: 0 0 calc(.125rem - 1px) calc(.125rem - 1px) +} + +.card-header-tabs { + margin-bottom: -.75rem; + border-bottom: 0 +} + +.card-header-pills, .card-header-tabs { + margin-right: -.625rem; + margin-left: -.625rem +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem +} + +.card-img { + width: 100%; + border-radius: calc(.125rem - 1px) +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(.125rem - 1px); + border-top-right-radius: calc(.125rem - 1px) +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(.125rem - 1px); + border-bottom-left-radius: calc(.125rem - 1px) +} + +.card-deck { + display: flex; + flex-direction: column +} + +.card-deck .card { + margin-bottom: 15px +} + +@media (min-width: 576px) { + .card-deck { + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px + } + + .card-deck .card { + display: flex; + flex: 1 0 0%; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px + } +} + +.card-group { + display: flex; + flex-direction: column +} + +.card-group > .card { + margin-bottom: 15px +} + +@media (min-width: 576px) { + .card-group { + flex-flow: row wrap + } + + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0 + } + + .card-group > .card + .card { + margin-left: 0; + border-left: 0 + } + + .card-group > .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0 + } + + .card-group > .card:first-child .card-header, .card-group > .card:first-child .card-img-top { + border-top-right-radius: 0 + } + + .card-group > .card:first-child .card-footer, .card-group > .card:first-child .card-img-bottom { + border-bottom-right-radius: 0 + } + + .card-group > .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0 + } + + .card-group > .card:last-child .card-header, .card-group > .card:last-child .card-img-top { + border-top-left-radius: 0 + } + + .card-group > .card:last-child .card-footer, .card-group > .card:last-child .card-img-bottom { + border-bottom-left-radius: 0 + } + + .card-group > .card:only-child { + border-radius: .125rem + } + + .card-group > .card:only-child .card-header, .card-group > .card:only-child .card-img-top { + border-top-left-radius: .125rem; + border-top-right-radius: .125rem + } + + .card-group > .card:only-child .card-footer, .card-group > .card:only-child .card-img-bottom { + border-bottom-right-radius: .125rem; + border-bottom-left-radius: .125rem + } + + .card-group > .card:not(:first-child):not(:last-child):not(:only-child), .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top { + border-radius: 0 + } +} + +.card-columns .card { + margin-bottom: .75rem +} + +@media (min-width: 576px) { + .card-columns { + column-count: 3; + column-gap: 1.25rem + } + + .card-columns .card { + display: inline-block; + width: 100% + } +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: .75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: .125rem +} + +.breadcrumb-item + .breadcrumb-item:before { + display: inline-block; + padding-right: .5rem; + padding-left: .5rem; + color: #6c757d; + content: "/" +} + +.breadcrumb-item + .breadcrumb-item:hover:before { + text-decoration: underline; + text-decoration: none +} + +.breadcrumb-item.active { + color: #6c757d +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; + border-radius: .125rem +} + +.page-link { + position: relative; + display: block; + padding: .5rem .75rem; + margin-left: 0; + line-height: 1.25; + color: #009688; + background-color: transparent; + border: 0 solid #dee2e6 +} + +.page-link:hover { + color: #004a43; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6 +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .25) +} + +.page-link:not(:disabled):not(.disabled) { + cursor: pointer +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: .125rem; + border-bottom-left-radius: .125rem +} + +.page-item:last-child .page-link { + border-top-right-radius: .125rem; + border-bottom-right-radius: .125rem +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #009688; + border-color: #009688 +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: transparent; + border-color: #dee2e6 +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: .3rem; + border-bottom-left-radius: .3rem +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: .3rem; + border-bottom-right-radius: .3rem +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: .0625rem; + border-bottom-left-radius: .0625rem +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: .0625rem; + border-bottom-right-radius: .0625rem +} + +.badge { + display: inline-block; + padding: .25em .4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .125rem +} + +.badge:empty { + display: none +} + +.btn .badge, .custom-file-control:before .badge { + position: relative; + top: -1px +} + +.badge-pill { + padding-right: .6em; + padding-left: .6em; + border-radius: 10rem +} + +.badge-primary { + color: #fff; + background-color: #009688 +} + +.badge-primary[href]:focus, .badge-primary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #00635a +} + +.badge-secondary { + color: #fff; + background-color: #6c757d +} + +.badge-secondary[href]:focus, .badge-secondary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #545b62 +} + +.badge-success { + color: #fff; + background-color: #4caf50 +} + +.badge-success[href]:focus, .badge-success[href]:hover { + color: #fff; + text-decoration: none; + background-color: #3d8b40 +} + +.badge-info { + color: #fff; + background-color: #03a9f4 +} + +.badge-info[href]:focus, .badge-info[href]:hover { + color: #fff; + text-decoration: none; + background-color: #0286c2 +} + +.badge-warning { + color: #fff; + background-color: #ff5722 +} + +.badge-warning[href]:focus, .badge-warning[href]:hover { + color: #fff; + text-decoration: none; + background-color: #ee3900 +} + +.badge-danger { + color: #fff; + background-color: #f44336 +} + +.badge-danger[href]:focus, .badge-danger[href]:hover { + color: #fff; + text-decoration: none; + background-color: #ea1c0d +} + +.badge-light { + color: #212529; + background-color: #f5f5f5 +} + +.badge-light[href]:focus, .badge-light[href]:hover { + color: #212529; + text-decoration: none; + background-color: #dcdcdc +} + +.badge-dark { + color: #fff; + background-color: #424242 +} + +.badge-dark[href]:focus, .badge-dark[href]:hover { + color: #fff; + text-decoration: none; + background-color: #292929 +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: .3rem +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0 +} + +.alert { + position: relative; + padding: .75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: .125rem +} + +.alert-heading { + color: inherit +} + +.alert-link { + font-weight: 700 +} + +.alert-dismissible { + padding-right: 4rem +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: .75rem 1.25rem; + color: inherit +} + +.alert-primary { + color: #004e47; + background-color: #cceae7; + border-color: #b8e2de +} + +.alert-primary hr { + border-top-color: #a6dbd6 +} + +.alert-primary .alert-link { + color: #001b19 +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db +} + +.alert-secondary hr { + border-top-color: #c8cbcf +} + +.alert-secondary .alert-link { + color: #202326 +} + +.alert-success { + color: #285b2a; + background-color: #dbefdc; + border-color: #cde9ce +} + +.alert-success hr { + border-top-color: #bbe1bd +} + +.alert-success .alert-link { + color: #18381a +} + +.alert-info { + color: #02587f; + background-color: #cdeefd; + border-color: #b8e7fc +} + +.alert-info hr { + border-top-color: #a0dffb +} + +.alert-info .alert-link { + color: #01354d +} + +.alert-warning { + color: #852d12; + background-color: #ffddd3; + border-color: #ffd0c1 +} + +.alert-warning hr { + border-top-color: #ffbda8 +} + +.alert-warning .alert-link { + color: #581e0c +} + +.alert-danger { + color: #7f231c; + background-color: #fdd9d7; + border-color: #fccac7 +} + +.alert-danger hr { + border-top-color: #fbb3af +} + +.alert-danger .alert-link { + color: #551713 +} + +.alert-light { + color: #7f7f7f; + background-color: #fdfdfd; + border-color: #fcfcfc +} + +.alert-light hr { + border-top-color: #efefef +} + +.alert-light .alert-link { + color: #666 +} + +.alert-dark { + color: #222; + background-color: #d9d9d9; + border-color: #cacaca +} + +.alert-dark hr { + border-top-color: #bdbdbd +} + +.alert-dark .alert-link { + color: #090909 +} + +@keyframes a { + 0% { + background-position: 1rem 0 + } + to { + background-position: 0 0 + } +} + +.progress { + display: flex; + height: 1rem; + overflow: hidden; + font-size: .75rem; + background-color: #e9ecef; + border-radius: .125rem; + box-shadow: inset 0 .1rem .1rem rgba(0, 0, 0, .1) +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + color: #fff; + text-align: center; + background-color: #009688; + transition: width .6s ease +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent); + background-size: 1rem 1rem +} + +.progress-bar-animated { + animation: a 1s linear infinite +} + +.media { + display: flex; + align-items: flex-start +} + +.media-body { + flex: 1 +} + +.list-group { + padding-left: 0; + margin-bottom: 0 +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit +} + +.list-group-item-action:focus, .list-group-item-action:hover { + color: #495057; + text-decoration: none; + background-color: #f8f9fa +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef +} + +.list-group-item { + position: relative; + display: block; + padding: .75rem 1.25rem; + margin-bottom: 0; + background-color: inherit; + border: 0 solid rgba(0, 0, 0, .125) +} + +.list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.list-group-item:focus, .list-group-item:hover { + z-index: 1; + text-decoration: none +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + background-color: inherit +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #009688; + border-color: #009688 +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0 +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0 +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0 +} + +.list-group-item-primary { + color: #004e47; + background-color: #b8e2de +} + +.list-group-item-primary.list-group-item-action:focus, .list-group-item-primary.list-group-item-action:hover { + color: #004e47; + background-color: #a6dbd6 +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004e47; + border-color: #004e47 +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db +} + +.list-group-item-secondary.list-group-item-action:focus, .list-group-item-secondary.list-group-item-action:hover { + color: #383d41; + background-color: #c8cbcf +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41 +} + +.list-group-item-success { + color: #285b2a; + background-color: #cde9ce +} + +.list-group-item-success.list-group-item-action:focus, .list-group-item-success.list-group-item-action:hover { + color: #285b2a; + background-color: #bbe1bd +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #285b2a; + border-color: #285b2a +} + +.list-group-item-info { + color: #02587f; + background-color: #b8e7fc +} + +.list-group-item-info.list-group-item-action:focus, .list-group-item-info.list-group-item-action:hover { + color: #02587f; + background-color: #a0dffb +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #02587f; + border-color: #02587f +} + +.list-group-item-warning { + color: #852d12; + background-color: #ffd0c1 +} + +.list-group-item-warning.list-group-item-action:focus, .list-group-item-warning.list-group-item-action:hover { + color: #852d12; + background-color: #ffbda8 +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #852d12; + border-color: #852d12 +} + +.list-group-item-danger { + color: #7f231c; + background-color: #fccac7 +} + +.list-group-item-danger.list-group-item-action:focus, .list-group-item-danger.list-group-item-action:hover { + color: #7f231c; + background-color: #fbb3af +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #7f231c; + border-color: #7f231c +} + +.list-group-item-light { + color: #7f7f7f; + background-color: #fcfcfc +} + +.list-group-item-light.list-group-item-action:focus, .list-group-item-light.list-group-item-action:hover { + color: #7f7f7f; + background-color: #efefef +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #7f7f7f; + border-color: #7f7f7f +} + +.list-group-item-dark { + color: #222; + background-color: #cacaca +} + +.list-group-item-dark.list-group-item-action:focus, .list-group-item-dark.list-group-item-action:hover { + color: #222; + background-color: #bdbdbd +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #222; + border-color: #222 +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5 +} + +.close:focus, .close:hover { + color: #000; + text-decoration: none; + opacity: .75 +} + +.close:not(:disabled):not(.disabled) { + cursor: pointer +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none +} + +.modal, .modal-open { + overflow: hidden +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + outline: 0 +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto +} + +.modal-dialog { + position: relative; + width: auto; + margin: .5rem; + pointer-events: none +} + +.modal.fade .modal-dialog { + transition: transform .3s ease-out; + transform: translateY(-25%) +} + +.modal.show .modal-dialog { + transform: translate(0) +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem) +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + box-shadow: 0 .25rem .5rem rgba(0, 0, 0, .5); + outline: 0 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0 +} + +.modal-backdrop.show { + opacity: .26 +} + +.modal-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 1rem; + border-bottom: 1px solid #e9ecef; + border-top-left-radius: .3rem; + border-top-right-radius: .3rem +} + +.modal-header .close { + padding: 1rem; + margin: -1rem -1rem -1rem auto +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5 +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem +} + +.modal-footer { + display: flex; + align-items: center; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #e9ecef +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto + } + + .modal-dialog-centered { + min-height: calc(100% - 3.5rem) + } + + .modal-content { + box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .5) + } + + .modal-sm { + max-width: 300px + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: Roboto, Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: .875rem; + word-wrap: break-word; + opacity: 0 +} + +.tooltip.show { + opacity: .9 +} + +.tooltip .arrow { + position: absolute; + display: block; + width: .8rem; + height: .4rem +} + +.tooltip .arrow:before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid +} + +.bs-tooltip-auto[x-placement^=top], .bs-tooltip-top { + padding: .4rem 0 +} + +.bs-tooltip-auto[x-placement^=top] .arrow, .bs-tooltip-top .arrow { + bottom: 0 +} + +.bs-tooltip-auto[x-placement^=top] .arrow:before, .bs-tooltip-top .arrow:before { + top: 0; + border-width: .4rem .4rem 0; + border-top-color: rgba(97, 97, 97, .9) +} + +.bs-tooltip-auto[x-placement^=right], .bs-tooltip-right { + padding: 0 .4rem +} + +.bs-tooltip-auto[x-placement^=right] .arrow, .bs-tooltip-right .arrow { + left: 0; + width: .4rem; + height: .8rem +} + +.bs-tooltip-auto[x-placement^=right] .arrow:before, .bs-tooltip-right .arrow:before { + right: 0; + border-width: .4rem .4rem .4rem 0; + border-right-color: rgba(97, 97, 97, .9) +} + +.bs-tooltip-auto[x-placement^=bottom], .bs-tooltip-bottom { + padding: .4rem 0 +} + +.bs-tooltip-auto[x-placement^=bottom] .arrow, .bs-tooltip-bottom .arrow { + top: 0 +} + +.bs-tooltip-auto[x-placement^=bottom] .arrow:before, .bs-tooltip-bottom .arrow:before { + bottom: 0; + border-width: 0 .4rem .4rem; + border-bottom-color: rgba(97, 97, 97, .9) +} + +.bs-tooltip-auto[x-placement^=left], .bs-tooltip-left { + padding: 0 .4rem +} + +.bs-tooltip-auto[x-placement^=left] .arrow, .bs-tooltip-left .arrow { + right: 0; + width: .4rem; + height: .8rem +} + +.bs-tooltip-auto[x-placement^=left] .arrow:before, .bs-tooltip-left .arrow:before { + left: 0; + border-width: .4rem 0 .4rem .4rem; + border-left-color: rgba(97, 97, 97, .9) +} + +.tooltip-inner { + max-width: 200px; + padding: .25rem .5rem; + color: #fff; + text-align: center; + background-color: rgba(97, 97, 97, .9); + border-radius: .125rem +} + +.popover { + top: 0; + left: 0; + z-index: 1060; + max-width: 276px; + font-family: Roboto, Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: .875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + box-shadow: 0 .25rem .5rem rgba(0, 0, 0, .2) +} + +.popover, .popover .arrow { + position: absolute; + display: block +} + +.popover .arrow { + width: 1rem; + height: .5rem; + margin: 0 .3rem +} + +.popover .arrow:after, .popover .arrow:before { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid +} + +.bs-popover-auto[x-placement^=top], .bs-popover-top { + margin-bottom: .5rem +} + +.bs-popover-auto[x-placement^=top] .arrow, .bs-popover-top .arrow { + bottom: calc((.5rem + 1px) * -1) +} + +.bs-popover-auto[x-placement^=top] .arrow:after, .bs-popover-auto[x-placement^=top] .arrow:before, .bs-popover-top .arrow:after, .bs-popover-top .arrow:before { + border-width: .5rem .5rem 0 +} + +.bs-popover-auto[x-placement^=top] .arrow:before, .bs-popover-top .arrow:before { + bottom: 0; + border-top-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=top] .arrow:after, .bs-popover-top .arrow:after { + bottom: 1px; + border-top-color: #fff +} + +.bs-popover-auto[x-placement^=right], .bs-popover-right { + margin-left: .5rem +} + +.bs-popover-auto[x-placement^=right] .arrow, .bs-popover-right .arrow { + left: calc((.5rem + 1px) * -1); + width: .5rem; + height: 1rem; + margin: .3rem 0 +} + +.bs-popover-auto[x-placement^=right] .arrow:after, .bs-popover-auto[x-placement^=right] .arrow:before, .bs-popover-right .arrow:after, .bs-popover-right .arrow:before { + border-width: .5rem .5rem .5rem 0 +} + +.bs-popover-auto[x-placement^=right] .arrow:before, .bs-popover-right .arrow:before { + left: 0; + border-right-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=right] .arrow:after, .bs-popover-right .arrow:after { + left: 1px; + border-right-color: #fff +} + +.bs-popover-auto[x-placement^=bottom], .bs-popover-bottom { + margin-top: .5rem +} + +.bs-popover-auto[x-placement^=bottom] .arrow, .bs-popover-bottom .arrow { + top: calc((.5rem + 1px) * -1) +} + +.bs-popover-auto[x-placement^=bottom] .arrow:after, .bs-popover-auto[x-placement^=bottom] .arrow:before, .bs-popover-bottom .arrow:after, .bs-popover-bottom .arrow:before { + border-width: 0 .5rem .5rem +} + +.bs-popover-auto[x-placement^=bottom] .arrow:before, .bs-popover-bottom .arrow:before { + top: 0; + border-bottom-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=bottom] .arrow:after, .bs-popover-bottom .arrow:after { + top: 1px; + border-bottom-color: #fff +} + +.bs-popover-auto[x-placement^=bottom] .popover-header:before, .bs-popover-bottom .popover-header:before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7 +} + +.bs-popover-auto[x-placement^=left], .bs-popover-left { + margin-right: .5rem +} + +.bs-popover-auto[x-placement^=left] .arrow, .bs-popover-left .arrow { + right: calc((.5rem + 1px) * -1); + width: .5rem; + height: 1rem; + margin: .3rem 0 +} + +.bs-popover-auto[x-placement^=left] .arrow:after, .bs-popover-auto[x-placement^=left] .arrow:before, .bs-popover-left .arrow:after, .bs-popover-left .arrow:before { + border-width: .5rem 0 .5rem .5rem +} + +.bs-popover-auto[x-placement^=left] .arrow:before, .bs-popover-left .arrow:before { + right: 0; + border-left-color: rgba(0, 0, 0, .25) +} + +.bs-popover-auto[x-placement^=left] .arrow:after, .bs-popover-left .arrow:after { + right: 1px; + border-left-color: #fff +} + +.popover-header { + padding: .5rem .75rem; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(.3rem - 1px); + border-top-right-radius: calc(.3rem - 1px) +} + +.popover-header:empty { + display: none +} + +.popover-body { + padding: .5rem .75rem; + color: #212529 +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden +} + +.carousel-item { + position: relative; + display: none; + align-items: center; + width: 100%; + transition: transform .6s ease; + backface-visibility: hidden; + perspective: 1000px +} + +.carousel-item-next, .carousel-item-prev, .carousel-item.active { + display: block +} + +.carousel-item-next, .carousel-item-prev { + position: absolute; + top: 0 +} + +.carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { + transform: translateX(0) +} + +@supports (transform-style:preserve-3d) { + .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { + transform: translateZ(0) + } +} + +.active.carousel-item-right, .carousel-item-next { + transform: translateX(100%) +} + +@supports (transform-style:preserve-3d) { + .active.carousel-item-right, .carousel-item-next { + transform: translate3d(100%, 0, 0) + } +} + +.active.carousel-item-left, .carousel-item-prev { + transform: translateX(-100%) +} + +@supports (transform-style:preserve-3d) { + .active.carousel-item-left, .carousel-item-prev { + transform: translate3d(-100%, 0, 0) + } +} + +.carousel-control-next, .carousel-control-prev { + position: absolute; + top: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: .5 +} + +.carousel-control-next:focus, .carousel-control-next:hover, .carousel-control-prev:focus, .carousel-control-prev:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9 +} + +.carousel-control-prev { + left: 0 +} + +.carousel-control-next { + right: 0 +} + +.carousel-control-next-icon, .carousel-control-prev-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat 50%; + background-size: 100% 100% +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E") +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E") +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: flex; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none +} + +.carousel-indicators li { + position: relative; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: hsla(0, 0%, 100%, .5) +} + +.carousel-indicators li:before { + top: -10px +} + +.carousel-indicators li:after, .carousel-indicators li:before { + position: absolute; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: "" +} + +.carousel-indicators li:after { + bottom: -10px +} + +.carousel-indicators .active { + background-color: #fff +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center +} + +.align-baseline { + vertical-align: baseline !important +} + +.align-top { + vertical-align: top !important +} + +.align-middle { + vertical-align: middle !important +} + +.align-bottom { + vertical-align: bottom !important +} + +.align-text-bottom { + vertical-align: text-bottom !important +} + +.align-text-top { + vertical-align: text-top !important +} + +.bg-primary { + background-color: #009688 !important +} + +a.bg-primary:focus, a.bg-primary:hover, button.bg-primary:focus, button.bg-primary:hover { + background-color: #00635a !important +} + +.bg-secondary { + background-color: #6c757d !important +} + +a.bg-secondary:focus, a.bg-secondary:hover, button.bg-secondary:focus, button.bg-secondary:hover { + background-color: #545b62 !important +} + +.bg-success { + background-color: #4caf50 !important +} + +a.bg-success:focus, a.bg-success:hover, button.bg-success:focus, button.bg-success:hover { + background-color: #3d8b40 !important +} + +.bg-info { + background-color: #03a9f4 !important +} + +a.bg-info:focus, a.bg-info:hover, button.bg-info:focus, button.bg-info:hover { + background-color: #0286c2 !important +} + +.bg-warning { + background-color: #ff5722 !important +} + +a.bg-warning:focus, a.bg-warning:hover, button.bg-warning:focus, button.bg-warning:hover { + background-color: #ee3900 !important +} + +.bg-danger { + background-color: #f44336 !important +} + +a.bg-danger:focus, a.bg-danger:hover, button.bg-danger:focus, button.bg-danger:hover { + background-color: #ea1c0d !important +} + +.bg-light { + background-color: #f5f5f5 !important +} + +a.bg-light:focus, a.bg-light:hover, button.bg-light:focus, button.bg-light:hover { + background-color: #dcdcdc !important +} + +.bg-dark { + background-color: #424242 !important +} + +a.bg-dark:focus, a.bg-dark:hover, button.bg-dark:focus, button.bg-dark:hover { + background-color: #292929 !important +} + +.bg-white { + background-color: #fff !important +} + +.bg-transparent { + background-color: transparent !important +} + +.border { + border: 1px solid #dee2e6 !important +} + +.border-top { + border-top: 1px solid #dee2e6 !important +} + +.border-right { + border-right: 1px solid #dee2e6 !important +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important +} + +.border-left { + border-left: 1px solid #dee2e6 !important +} + +.border-0 { + border: 0 !important +} + +.border-top-0 { + border-top: 0 !important +} + +.border-right-0 { + border-right: 0 !important +} + +.border-bottom-0 { + border-bottom: 0 !important +} + +.border-left-0 { + border-left: 0 !important +} + +.border-primary { + border-color: #009688 !important +} + +.border-secondary { + border-color: #6c757d !important +} + +.border-success { + border-color: #4caf50 !important +} + +.border-info { + border-color: #03a9f4 !important +} + +.border-warning { + border-color: #ff5722 !important +} + +.border-danger { + border-color: #f44336 !important +} + +.border-light { + border-color: #f5f5f5 !important +} + +.border-dark { + border-color: #424242 !important +} + +.border-white { + border-color: #fff !important +} + +.rounded { + border-radius: .125rem !important +} + +.rounded-top { + border-top-left-radius: .125rem !important +} + +.rounded-right, .rounded-top { + border-top-right-radius: .125rem !important +} + +.rounded-bottom, .rounded-right { + border-bottom-right-radius: .125rem !important +} + +.rounded-bottom, .rounded-left { + border-bottom-left-radius: .125rem !important +} + +.rounded-left { + border-top-left-radius: .125rem !important +} + +.rounded-circle { + border-radius: 50% !important +} + +.rounded-0 { + border-radius: 0 !important +} + +.clearfix:after { + display: block; + clear: both; + content: "" +} + +.d-none { + display: none !important +} + +.d-inline { + display: inline !important +} + +.d-inline-block { + display: inline-block !important +} + +.d-block { + display: block !important +} + +.d-table { + display: table !important +} + +.d-table-row { + display: table-row !important +} + +.d-table-cell { + display: table-cell !important +} + +.d-flex { + display: flex !important +} + +.d-inline-flex { + display: inline-flex !important +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important + } + + .d-sm-inline { + display: inline !important + } + + .d-sm-inline-block { + display: inline-block !important + } + + .d-sm-block { + display: block !important + } + + .d-sm-table { + display: table !important + } + + .d-sm-table-row { + display: table-row !important + } + + .d-sm-table-cell { + display: table-cell !important + } + + .d-sm-flex { + display: flex !important + } + + .d-sm-inline-flex { + display: inline-flex !important + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important + } + + .d-md-inline { + display: inline !important + } + + .d-md-inline-block { + display: inline-block !important + } + + .d-md-block { + display: block !important + } + + .d-md-table { + display: table !important + } + + .d-md-table-row { + display: table-row !important + } + + .d-md-table-cell { + display: table-cell !important + } + + .d-md-flex { + display: flex !important + } + + .d-md-inline-flex { + display: inline-flex !important + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important + } + + .d-lg-inline { + display: inline !important + } + + .d-lg-inline-block { + display: inline-block !important + } + + .d-lg-block { + display: block !important + } + + .d-lg-table { + display: table !important + } + + .d-lg-table-row { + display: table-row !important + } + + .d-lg-table-cell { + display: table-cell !important + } + + .d-lg-flex { + display: flex !important + } + + .d-lg-inline-flex { + display: inline-flex !important + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important + } + + .d-xl-inline { + display: inline !important + } + + .d-xl-inline-block { + display: inline-block !important + } + + .d-xl-block { + display: block !important + } + + .d-xl-table { + display: table !important + } + + .d-xl-table-row { + display: table-row !important + } + + .d-xl-table-cell { + display: table-cell !important + } + + .d-xl-flex { + display: flex !important + } + + .d-xl-inline-flex { + display: inline-flex !important + } +} + +@media print { + .d-print-none { + display: none !important + } + + .d-print-inline { + display: inline !important + } + + .d-print-inline-block { + display: inline-block !important + } + + .d-print-block { + display: block !important + } + + .d-print-table { + display: table !important + } + + .d-print-table-row { + display: table-row !important + } + + .d-print-table-cell { + display: table-cell !important + } + + .d-print-flex { + display: flex !important + } + + .d-print-inline-flex { + display: inline-flex !important + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden +} + +.embed-responsive:before { + display: block; + content: "" +} + +.embed-responsive .embed-responsive-item, .embed-responsive embed, .embed-responsive iframe, .embed-responsive object, .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0 +} + +.embed-responsive-21by9:before { + padding-top: 42.85714% +} + +.embed-responsive-16by9:before { + padding-top: 56.25% +} + +.embed-responsive-4by3:before { + padding-top: 75% +} + +.embed-responsive-1by1:before { + padding-top: 100% +} + +.flex-row { + flex-direction: row !important +} + +.flex-column { + flex-direction: column !important +} + +.flex-row-reverse { + flex-direction: row-reverse !important +} + +.flex-column-reverse { + flex-direction: column-reverse !important +} + +.flex-wrap { + flex-wrap: wrap !important +} + +.flex-nowrap { + flex-wrap: nowrap !important +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important +} + +.justify-content-start { + justify-content: flex-start !important +} + +.justify-content-end { + justify-content: flex-end !important +} + +.justify-content-center { + justify-content: center !important +} + +.justify-content-between { + justify-content: space-between !important +} + +.justify-content-around { + justify-content: space-around !important +} + +.align-items-start { + align-items: flex-start !important +} + +.align-items-end { + align-items: flex-end !important +} + +.align-items-center { + align-items: center !important +} + +.align-items-baseline { + align-items: baseline !important +} + +.align-items-stretch { + align-items: stretch !important +} + +.align-content-start { + align-content: flex-start !important +} + +.align-content-end { + align-content: flex-end !important +} + +.align-content-center { + align-content: center !important +} + +.align-content-between { + align-content: space-between !important +} + +.align-content-around { + align-content: space-around !important +} + +.align-content-stretch { + align-content: stretch !important +} + +.align-self-auto { + align-self: auto !important +} + +.align-self-start { + align-self: flex-start !important +} + +.align-self-end { + align-self: flex-end !important +} + +.align-self-center { + align-self: center !important +} + +.align-self-baseline { + align-self: baseline !important +} + +.align-self-stretch { + align-self: stretch !important +} + +@media (min-width: 576px) { + .flex-sm-row { + flex-direction: row !important + } + + .flex-sm-column { + flex-direction: column !important + } + + .flex-sm-row-reverse { + flex-direction: row-reverse !important + } + + .flex-sm-column-reverse { + flex-direction: column-reverse !important + } + + .flex-sm-wrap { + flex-wrap: wrap !important + } + + .flex-sm-nowrap { + flex-wrap: nowrap !important + } + + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important + } + + .justify-content-sm-start { + justify-content: flex-start !important + } + + .justify-content-sm-end { + justify-content: flex-end !important + } + + .justify-content-sm-center { + justify-content: center !important + } + + .justify-content-sm-between { + justify-content: space-between !important + } + + .justify-content-sm-around { + justify-content: space-around !important + } + + .align-items-sm-start { + align-items: flex-start !important + } + + .align-items-sm-end { + align-items: flex-end !important + } + + .align-items-sm-center { + align-items: center !important + } + + .align-items-sm-baseline { + align-items: baseline !important + } + + .align-items-sm-stretch { + align-items: stretch !important + } + + .align-content-sm-start { + align-content: flex-start !important + } + + .align-content-sm-end { + align-content: flex-end !important + } + + .align-content-sm-center { + align-content: center !important + } + + .align-content-sm-between { + align-content: space-between !important + } + + .align-content-sm-around { + align-content: space-around !important + } + + .align-content-sm-stretch { + align-content: stretch !important + } + + .align-self-sm-auto { + align-self: auto !important + } + + .align-self-sm-start { + align-self: flex-start !important + } + + .align-self-sm-end { + align-self: flex-end !important + } + + .align-self-sm-center { + align-self: center !important + } + + .align-self-sm-baseline { + align-self: baseline !important + } + + .align-self-sm-stretch { + align-self: stretch !important + } +} + +@media (min-width: 768px) { + .flex-md-row { + flex-direction: row !important + } + + .flex-md-column { + flex-direction: column !important + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important + } + + .flex-md-wrap { + flex-wrap: wrap !important + } + + .flex-md-nowrap { + flex-wrap: nowrap !important + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important + } + + .justify-content-md-start { + justify-content: flex-start !important + } + + .justify-content-md-end { + justify-content: flex-end !important + } + + .justify-content-md-center { + justify-content: center !important + } + + .justify-content-md-between { + justify-content: space-between !important + } + + .justify-content-md-around { + justify-content: space-around !important + } + + .align-items-md-start { + align-items: flex-start !important + } + + .align-items-md-end { + align-items: flex-end !important + } + + .align-items-md-center { + align-items: center !important + } + + .align-items-md-baseline { + align-items: baseline !important + } + + .align-items-md-stretch { + align-items: stretch !important + } + + .align-content-md-start { + align-content: flex-start !important + } + + .align-content-md-end { + align-content: flex-end !important + } + + .align-content-md-center { + align-content: center !important + } + + .align-content-md-between { + align-content: space-between !important + } + + .align-content-md-around { + align-content: space-around !important + } + + .align-content-md-stretch { + align-content: stretch !important + } + + .align-self-md-auto { + align-self: auto !important + } + + .align-self-md-start { + align-self: flex-start !important + } + + .align-self-md-end { + align-self: flex-end !important + } + + .align-self-md-center { + align-self: center !important + } + + .align-self-md-baseline { + align-self: baseline !important + } + + .align-self-md-stretch { + align-self: stretch !important + } +} + +@media (min-width: 992px) { + .flex-lg-row { + flex-direction: row !important + } + + .flex-lg-column { + flex-direction: column !important + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important + } + + .flex-lg-wrap { + flex-wrap: wrap !important + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important + } + + .justify-content-lg-start { + justify-content: flex-start !important + } + + .justify-content-lg-end { + justify-content: flex-end !important + } + + .justify-content-lg-center { + justify-content: center !important + } + + .justify-content-lg-between { + justify-content: space-between !important + } + + .justify-content-lg-around { + justify-content: space-around !important + } + + .align-items-lg-start { + align-items: flex-start !important + } + + .align-items-lg-end { + align-items: flex-end !important + } + + .align-items-lg-center { + align-items: center !important + } + + .align-items-lg-baseline { + align-items: baseline !important + } + + .align-items-lg-stretch { + align-items: stretch !important + } + + .align-content-lg-start { + align-content: flex-start !important + } + + .align-content-lg-end { + align-content: flex-end !important + } + + .align-content-lg-center { + align-content: center !important + } + + .align-content-lg-between { + align-content: space-between !important + } + + .align-content-lg-around { + align-content: space-around !important + } + + .align-content-lg-stretch { + align-content: stretch !important + } + + .align-self-lg-auto { + align-self: auto !important + } + + .align-self-lg-start { + align-self: flex-start !important + } + + .align-self-lg-end { + align-self: flex-end !important + } + + .align-self-lg-center { + align-self: center !important + } + + .align-self-lg-baseline { + align-self: baseline !important + } + + .align-self-lg-stretch { + align-self: stretch !important + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + flex-direction: row !important + } + + .flex-xl-column { + flex-direction: column !important + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important + } + + .flex-xl-wrap { + flex-wrap: wrap !important + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important + } + + .justify-content-xl-start { + justify-content: flex-start !important + } + + .justify-content-xl-end { + justify-content: flex-end !important + } + + .justify-content-xl-center { + justify-content: center !important + } + + .justify-content-xl-between { + justify-content: space-between !important + } + + .justify-content-xl-around { + justify-content: space-around !important + } + + .align-items-xl-start { + align-items: flex-start !important + } + + .align-items-xl-end { + align-items: flex-end !important + } + + .align-items-xl-center { + align-items: center !important + } + + .align-items-xl-baseline { + align-items: baseline !important + } + + .align-items-xl-stretch { + align-items: stretch !important + } + + .align-content-xl-start { + align-content: flex-start !important + } + + .align-content-xl-end { + align-content: flex-end !important + } + + .align-content-xl-center { + align-content: center !important + } + + .align-content-xl-between { + align-content: space-between !important + } + + .align-content-xl-around { + align-content: space-around !important + } + + .align-content-xl-stretch { + align-content: stretch !important + } + + .align-self-xl-auto { + align-self: auto !important + } + + .align-self-xl-start { + align-self: flex-start !important + } + + .align-self-xl-end { + align-self: flex-end !important + } + + .align-self-xl-center { + align-self: center !important + } + + .align-self-xl-baseline { + align-self: baseline !important + } + + .align-self-xl-stretch { + align-self: stretch !important + } +} + +.float-left { + float: left !important +} + +.float-right { + float: right !important +} + +.float-none { + float: none !important +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important + } + + .float-sm-right { + float: right !important + } + + .float-sm-none { + float: none !important + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important + } + + .float-md-right { + float: right !important + } + + .float-md-none { + float: none !important + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important + } + + .float-lg-right { + float: right !important + } + + .float-lg-none { + float: none !important + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important + } + + .float-xl-right { + float: right !important + } + + .float-xl-none { + float: none !important + } +} + +.position-static { + position: static !important +} + +.position-relative { + position: relative !important +} + +.position-absolute { + position: absolute !important +} + +.position-fixed { + position: fixed !important +} + +.position-sticky { + position: sticky !important +} + +.fixed-top { + top: 0 +} + +.fixed-bottom, .fixed-top { + position: fixed; + right: 0; + left: 0; + z-index: 1030 +} + +.fixed-bottom { + bottom: 0 +} + +@supports (position:sticky) { + .sticky-top { + position: sticky; + top: 0; + z-index: 1020 + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + clip-path: inset(50%); + border: 0 +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + clip-path: none +} + +.w-25 { + width: 25% !important +} + +.w-50 { + width: 50% !important +} + +.w-75 { + width: 75% !important +} + +.w-100 { + width: 100% !important +} + +.h-25 { + height: 25% !important +} + +.h-50 { + height: 50% !important +} + +.h-75 { + height: 75% !important +} + +.h-100 { + height: 100% !important +} + +.mw-100 { + max-width: 100% !important +} + +.mh-100 { + max-height: 100% !important +} + +.m-0 { + margin: 0 !important +} + +.mt-0, .my-0 { + margin-top: 0 !important +} + +.mr-0, .mx-0 { + margin-right: 0 !important +} + +.mb-0, .my-0 { + margin-bottom: 0 !important +} + +.ml-0, .mx-0 { + margin-left: 0 !important +} + +.m-1 { + margin: .25rem !important +} + +.mt-1, .my-1 { + margin-top: .25rem !important +} + +.mr-1, .mx-1 { + margin-right: .25rem !important +} + +.mb-1, .my-1 { + margin-bottom: .25rem !important +} + +.ml-1, .mx-1 { + margin-left: .25rem !important +} + +.m-2 { + margin: .5rem !important +} + +.mt-2, .my-2 { + margin-top: .5rem !important +} + +.mr-2, .mx-2 { + margin-right: .5rem !important +} + +.mb-2, .my-2 { + margin-bottom: .5rem !important +} + +.ml-2, .mx-2 { + margin-left: .5rem !important +} + +.m-3 { + margin: 1rem !important +} + +.mt-3, .my-3 { + margin-top: 1rem !important +} + +.mr-3, .mx-3 { + margin-right: 1rem !important +} + +.mb-3, .my-3 { + margin-bottom: 1rem !important +} + +.ml-3, .mx-3 { + margin-left: 1rem !important +} + +.m-4 { + margin: 1.5rem !important +} + +.mt-4, .my-4 { + margin-top: 1.5rem !important +} + +.mr-4, .mx-4 { + margin-right: 1.5rem !important +} + +.mb-4, .my-4 { + margin-bottom: 1.5rem !important +} + +.ml-4, .mx-4 { + margin-left: 1.5rem !important +} + +.m-5 { + margin: 3rem !important +} + +.mt-5, .my-5 { + margin-top: 3rem !important +} + +.mr-5, .mx-5 { + margin-right: 3rem !important +} + +.mb-5, .my-5 { + margin-bottom: 3rem !important +} + +.ml-5, .mx-5 { + margin-left: 3rem !important +} + +.p-0 { + padding: 0 !important +} + +.pt-0, .py-0 { + padding-top: 0 !important +} + +.pr-0, .px-0 { + padding-right: 0 !important +} + +.pb-0, .py-0 { + padding-bottom: 0 !important +} + +.pl-0, .px-0 { + padding-left: 0 !important +} + +.p-1 { + padding: .25rem !important +} + +.pt-1, .py-1 { + padding-top: .25rem !important +} + +.pr-1, .px-1 { + padding-right: .25rem !important +} + +.pb-1, .py-1 { + padding-bottom: .25rem !important +} + +.pl-1, .px-1 { + padding-left: .25rem !important +} + +.p-2 { + padding: .5rem !important +} + +.pt-2, .py-2 { + padding-top: .5rem !important +} + +.pr-2, .px-2 { + padding-right: .5rem !important +} + +.pb-2, .py-2 { + padding-bottom: .5rem !important +} + +.pl-2, .px-2 { + padding-left: .5rem !important +} + +.p-3 { + padding: 1rem !important +} + +.pt-3, .py-3 { + padding-top: 1rem !important +} + +.pr-3, .px-3 { + padding-right: 1rem !important +} + +.pb-3, .py-3 { + padding-bottom: 1rem !important +} + +.pl-3, .px-3 { + padding-left: 1rem !important +} + +.p-4 { + padding: 1.5rem !important +} + +.pt-4, .py-4 { + padding-top: 1.5rem !important +} + +.pr-4, .px-4 { + padding-right: 1.5rem !important +} + +.pb-4, .py-4 { + padding-bottom: 1.5rem !important +} + +.pl-4, .px-4 { + padding-left: 1.5rem !important +} + +.p-5 { + padding: 3rem !important +} + +.pt-5, .py-5 { + padding-top: 3rem !important +} + +.pr-5, .px-5 { + padding-right: 3rem !important +} + +.pb-5, .py-5 { + padding-bottom: 3rem !important +} + +.pl-5, .px-5 { + padding-left: 3rem !important +} + +.m-auto { + margin: auto !important +} + +.mt-auto, .my-auto { + margin-top: auto !important +} + +.mr-auto, .mx-auto { + margin-right: auto !important +} + +.mb-auto, .my-auto { + margin-bottom: auto !important +} + +.ml-auto, .mx-auto { + margin-left: auto !important +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important + } + + .mt-sm-0, .my-sm-0 { + margin-top: 0 !important + } + + .mr-sm-0, .mx-sm-0 { + margin-right: 0 !important + } + + .mb-sm-0, .my-sm-0 { + margin-bottom: 0 !important + } + + .ml-sm-0, .mx-sm-0 { + margin-left: 0 !important + } + + .m-sm-1 { + margin: .25rem !important + } + + .mt-sm-1, .my-sm-1 { + margin-top: .25rem !important + } + + .mr-sm-1, .mx-sm-1 { + margin-right: .25rem !important + } + + .mb-sm-1, .my-sm-1 { + margin-bottom: .25rem !important + } + + .ml-sm-1, .mx-sm-1 { + margin-left: .25rem !important + } + + .m-sm-2 { + margin: .5rem !important + } + + .mt-sm-2, .my-sm-2 { + margin-top: .5rem !important + } + + .mr-sm-2, .mx-sm-2 { + margin-right: .5rem !important + } + + .mb-sm-2, .my-sm-2 { + margin-bottom: .5rem !important + } + + .ml-sm-2, .mx-sm-2 { + margin-left: .5rem !important + } + + .m-sm-3 { + margin: 1rem !important + } + + .mt-sm-3, .my-sm-3 { + margin-top: 1rem !important + } + + .mr-sm-3, .mx-sm-3 { + margin-right: 1rem !important + } + + .mb-sm-3, .my-sm-3 { + margin-bottom: 1rem !important + } + + .ml-sm-3, .mx-sm-3 { + margin-left: 1rem !important + } + + .m-sm-4 { + margin: 1.5rem !important + } + + .mt-sm-4, .my-sm-4 { + margin-top: 1.5rem !important + } + + .mr-sm-4, .mx-sm-4 { + margin-right: 1.5rem !important + } + + .mb-sm-4, .my-sm-4 { + margin-bottom: 1.5rem !important + } + + .ml-sm-4, .mx-sm-4 { + margin-left: 1.5rem !important + } + + .m-sm-5 { + margin: 3rem !important + } + + .mt-sm-5, .my-sm-5 { + margin-top: 3rem !important + } + + .mr-sm-5, .mx-sm-5 { + margin-right: 3rem !important + } + + .mb-sm-5, .my-sm-5 { + margin-bottom: 3rem !important + } + + .ml-sm-5, .mx-sm-5 { + margin-left: 3rem !important + } + + .p-sm-0 { + padding: 0 !important + } + + .pt-sm-0, .py-sm-0 { + padding-top: 0 !important + } + + .pr-sm-0, .px-sm-0 { + padding-right: 0 !important + } + + .pb-sm-0, .py-sm-0 { + padding-bottom: 0 !important + } + + .pl-sm-0, .px-sm-0 { + padding-left: 0 !important + } + + .p-sm-1 { + padding: .25rem !important + } + + .pt-sm-1, .py-sm-1 { + padding-top: .25rem !important + } + + .pr-sm-1, .px-sm-1 { + padding-right: .25rem !important + } + + .pb-sm-1, .py-sm-1 { + padding-bottom: .25rem !important + } + + .pl-sm-1, .px-sm-1 { + padding-left: .25rem !important + } + + .p-sm-2 { + padding: .5rem !important + } + + .pt-sm-2, .py-sm-2 { + padding-top: .5rem !important + } + + .pr-sm-2, .px-sm-2 { + padding-right: .5rem !important + } + + .pb-sm-2, .py-sm-2 { + padding-bottom: .5rem !important + } + + .pl-sm-2, .px-sm-2 { + padding-left: .5rem !important + } + + .p-sm-3 { + padding: 1rem !important + } + + .pt-sm-3, .py-sm-3 { + padding-top: 1rem !important + } + + .pr-sm-3, .px-sm-3 { + padding-right: 1rem !important + } + + .pb-sm-3, .py-sm-3 { + padding-bottom: 1rem !important + } + + .pl-sm-3, .px-sm-3 { + padding-left: 1rem !important + } + + .p-sm-4 { + padding: 1.5rem !important + } + + .pt-sm-4, .py-sm-4 { + padding-top: 1.5rem !important + } + + .pr-sm-4, .px-sm-4 { + padding-right: 1.5rem !important + } + + .pb-sm-4, .py-sm-4 { + padding-bottom: 1.5rem !important + } + + .pl-sm-4, .px-sm-4 { + padding-left: 1.5rem !important + } + + .p-sm-5 { + padding: 3rem !important + } + + .pt-sm-5, .py-sm-5 { + padding-top: 3rem !important + } + + .pr-sm-5, .px-sm-5 { + padding-right: 3rem !important + } + + .pb-sm-5, .py-sm-5 { + padding-bottom: 3rem !important + } + + .pl-sm-5, .px-sm-5 { + padding-left: 3rem !important + } + + .m-sm-auto { + margin: auto !important + } + + .mt-sm-auto, .my-sm-auto { + margin-top: auto !important + } + + .mr-sm-auto, .mx-sm-auto { + margin-right: auto !important + } + + .mb-sm-auto, .my-sm-auto { + margin-bottom: auto !important + } + + .ml-sm-auto, .mx-sm-auto { + margin-left: auto !important + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important + } + + .mt-md-0, .my-md-0 { + margin-top: 0 !important + } + + .mr-md-0, .mx-md-0 { + margin-right: 0 !important + } + + .mb-md-0, .my-md-0 { + margin-bottom: 0 !important + } + + .ml-md-0, .mx-md-0 { + margin-left: 0 !important + } + + .m-md-1 { + margin: .25rem !important + } + + .mt-md-1, .my-md-1 { + margin-top: .25rem !important + } + + .mr-md-1, .mx-md-1 { + margin-right: .25rem !important + } + + .mb-md-1, .my-md-1 { + margin-bottom: .25rem !important + } + + .ml-md-1, .mx-md-1 { + margin-left: .25rem !important + } + + .m-md-2 { + margin: .5rem !important + } + + .mt-md-2, .my-md-2 { + margin-top: .5rem !important + } + + .mr-md-2, .mx-md-2 { + margin-right: .5rem !important + } + + .mb-md-2, .my-md-2 { + margin-bottom: .5rem !important + } + + .ml-md-2, .mx-md-2 { + margin-left: .5rem !important + } + + .m-md-3 { + margin: 1rem !important + } + + .mt-md-3, .my-md-3 { + margin-top: 1rem !important + } + + .mr-md-3, .mx-md-3 { + margin-right: 1rem !important + } + + .mb-md-3, .my-md-3 { + margin-bottom: 1rem !important + } + + .ml-md-3, .mx-md-3 { + margin-left: 1rem !important + } + + .m-md-4 { + margin: 1.5rem !important + } + + .mt-md-4, .my-md-4 { + margin-top: 1.5rem !important + } + + .mr-md-4, .mx-md-4 { + margin-right: 1.5rem !important + } + + .mb-md-4, .my-md-4 { + margin-bottom: 1.5rem !important + } + + .ml-md-4, .mx-md-4 { + margin-left: 1.5rem !important + } + + .m-md-5 { + margin: 3rem !important + } + + .mt-md-5, .my-md-5 { + margin-top: 3rem !important + } + + .mr-md-5, .mx-md-5 { + margin-right: 3rem !important + } + + .mb-md-5, .my-md-5 { + margin-bottom: 3rem !important + } + + .ml-md-5, .mx-md-5 { + margin-left: 3rem !important + } + + .p-md-0 { + padding: 0 !important + } + + .pt-md-0, .py-md-0 { + padding-top: 0 !important + } + + .pr-md-0, .px-md-0 { + padding-right: 0 !important + } + + .pb-md-0, .py-md-0 { + padding-bottom: 0 !important + } + + .pl-md-0, .px-md-0 { + padding-left: 0 !important + } + + .p-md-1 { + padding: .25rem !important + } + + .pt-md-1, .py-md-1 { + padding-top: .25rem !important + } + + .pr-md-1, .px-md-1 { + padding-right: .25rem !important + } + + .pb-md-1, .py-md-1 { + padding-bottom: .25rem !important + } + + .pl-md-1, .px-md-1 { + padding-left: .25rem !important + } + + .p-md-2 { + padding: .5rem !important + } + + .pt-md-2, .py-md-2 { + padding-top: .5rem !important + } + + .pr-md-2, .px-md-2 { + padding-right: .5rem !important + } + + .pb-md-2, .py-md-2 { + padding-bottom: .5rem !important + } + + .pl-md-2, .px-md-2 { + padding-left: .5rem !important + } + + .p-md-3 { + padding: 1rem !important + } + + .pt-md-3, .py-md-3 { + padding-top: 1rem !important + } + + .pr-md-3, .px-md-3 { + padding-right: 1rem !important + } + + .pb-md-3, .py-md-3 { + padding-bottom: 1rem !important + } + + .pl-md-3, .px-md-3 { + padding-left: 1rem !important + } + + .p-md-4 { + padding: 1.5rem !important + } + + .pt-md-4, .py-md-4 { + padding-top: 1.5rem !important + } + + .pr-md-4, .px-md-4 { + padding-right: 1.5rem !important + } + + .pb-md-4, .py-md-4 { + padding-bottom: 1.5rem !important + } + + .pl-md-4, .px-md-4 { + padding-left: 1.5rem !important + } + + .p-md-5 { + padding: 3rem !important + } + + .pt-md-5, .py-md-5 { + padding-top: 3rem !important + } + + .pr-md-5, .px-md-5 { + padding-right: 3rem !important + } + + .pb-md-5, .py-md-5 { + padding-bottom: 3rem !important + } + + .pl-md-5, .px-md-5 { + padding-left: 3rem !important + } + + .m-md-auto { + margin: auto !important + } + + .mt-md-auto, .my-md-auto { + margin-top: auto !important + } + + .mr-md-auto, .mx-md-auto { + margin-right: auto !important + } + + .mb-md-auto, .my-md-auto { + margin-bottom: auto !important + } + + .ml-md-auto, .mx-md-auto { + margin-left: auto !important + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important + } + + .mt-lg-0, .my-lg-0 { + margin-top: 0 !important + } + + .mr-lg-0, .mx-lg-0 { + margin-right: 0 !important + } + + .mb-lg-0, .my-lg-0 { + margin-bottom: 0 !important + } + + .ml-lg-0, .mx-lg-0 { + margin-left: 0 !important + } + + .m-lg-1 { + margin: .25rem !important + } + + .mt-lg-1, .my-lg-1 { + margin-top: .25rem !important + } + + .mr-lg-1, .mx-lg-1 { + margin-right: .25rem !important + } + + .mb-lg-1, .my-lg-1 { + margin-bottom: .25rem !important + } + + .ml-lg-1, .mx-lg-1 { + margin-left: .25rem !important + } + + .m-lg-2 { + margin: .5rem !important + } + + .mt-lg-2, .my-lg-2 { + margin-top: .5rem !important + } + + .mr-lg-2, .mx-lg-2 { + margin-right: .5rem !important + } + + .mb-lg-2, .my-lg-2 { + margin-bottom: .5rem !important + } + + .ml-lg-2, .mx-lg-2 { + margin-left: .5rem !important + } + + .m-lg-3 { + margin: 1rem !important + } + + .mt-lg-3, .my-lg-3 { + margin-top: 1rem !important + } + + .mr-lg-3, .mx-lg-3 { + margin-right: 1rem !important + } + + .mb-lg-3, .my-lg-3 { + margin-bottom: 1rem !important + } + + .ml-lg-3, .mx-lg-3 { + margin-left: 1rem !important + } + + .m-lg-4 { + margin: 1.5rem !important + } + + .mt-lg-4, .my-lg-4 { + margin-top: 1.5rem !important + } + + .mr-lg-4, .mx-lg-4 { + margin-right: 1.5rem !important + } + + .mb-lg-4, .my-lg-4 { + margin-bottom: 1.5rem !important + } + + .ml-lg-4, .mx-lg-4 { + margin-left: 1.5rem !important + } + + .m-lg-5 { + margin: 3rem !important + } + + .mt-lg-5, .my-lg-5 { + margin-top: 3rem !important + } + + .mr-lg-5, .mx-lg-5 { + margin-right: 3rem !important + } + + .mb-lg-5, .my-lg-5 { + margin-bottom: 3rem !important + } + + .ml-lg-5, .mx-lg-5 { + margin-left: 3rem !important + } + + .p-lg-0 { + padding: 0 !important + } + + .pt-lg-0, .py-lg-0 { + padding-top: 0 !important + } + + .pr-lg-0, .px-lg-0 { + padding-right: 0 !important + } + + .pb-lg-0, .py-lg-0 { + padding-bottom: 0 !important + } + + .pl-lg-0, .px-lg-0 { + padding-left: 0 !important + } + + .p-lg-1 { + padding: .25rem !important + } + + .pt-lg-1, .py-lg-1 { + padding-top: .25rem !important + } + + .pr-lg-1, .px-lg-1 { + padding-right: .25rem !important + } + + .pb-lg-1, .py-lg-1 { + padding-bottom: .25rem !important + } + + .pl-lg-1, .px-lg-1 { + padding-left: .25rem !important + } + + .p-lg-2 { + padding: .5rem !important + } + + .pt-lg-2, .py-lg-2 { + padding-top: .5rem !important + } + + .pr-lg-2, .px-lg-2 { + padding-right: .5rem !important + } + + .pb-lg-2, .py-lg-2 { + padding-bottom: .5rem !important + } + + .pl-lg-2, .px-lg-2 { + padding-left: .5rem !important + } + + .p-lg-3 { + padding: 1rem !important + } + + .pt-lg-3, .py-lg-3 { + padding-top: 1rem !important + } + + .pr-lg-3, .px-lg-3 { + padding-right: 1rem !important + } + + .pb-lg-3, .py-lg-3 { + padding-bottom: 1rem !important + } + + .pl-lg-3, .px-lg-3 { + padding-left: 1rem !important + } + + .p-lg-4 { + padding: 1.5rem !important + } + + .pt-lg-4, .py-lg-4 { + padding-top: 1.5rem !important + } + + .pr-lg-4, .px-lg-4 { + padding-right: 1.5rem !important + } + + .pb-lg-4, .py-lg-4 { + padding-bottom: 1.5rem !important + } + + .pl-lg-4, .px-lg-4 { + padding-left: 1.5rem !important + } + + .p-lg-5 { + padding: 3rem !important + } + + .pt-lg-5, .py-lg-5 { + padding-top: 3rem !important + } + + .pr-lg-5, .px-lg-5 { + padding-right: 3rem !important + } + + .pb-lg-5, .py-lg-5 { + padding-bottom: 3rem !important + } + + .pl-lg-5, .px-lg-5 { + padding-left: 3rem !important + } + + .m-lg-auto { + margin: auto !important + } + + .mt-lg-auto, .my-lg-auto { + margin-top: auto !important + } + + .mr-lg-auto, .mx-lg-auto { + margin-right: auto !important + } + + .mb-lg-auto, .my-lg-auto { + margin-bottom: auto !important + } + + .ml-lg-auto, .mx-lg-auto { + margin-left: auto !important + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important + } + + .mt-xl-0, .my-xl-0 { + margin-top: 0 !important + } + + .mr-xl-0, .mx-xl-0 { + margin-right: 0 !important + } + + .mb-xl-0, .my-xl-0 { + margin-bottom: 0 !important + } + + .ml-xl-0, .mx-xl-0 { + margin-left: 0 !important + } + + .m-xl-1 { + margin: .25rem !important + } + + .mt-xl-1, .my-xl-1 { + margin-top: .25rem !important + } + + .mr-xl-1, .mx-xl-1 { + margin-right: .25rem !important + } + + .mb-xl-1, .my-xl-1 { + margin-bottom: .25rem !important + } + + .ml-xl-1, .mx-xl-1 { + margin-left: .25rem !important + } + + .m-xl-2 { + margin: .5rem !important + } + + .mt-xl-2, .my-xl-2 { + margin-top: .5rem !important + } + + .mr-xl-2, .mx-xl-2 { + margin-right: .5rem !important + } + + .mb-xl-2, .my-xl-2 { + margin-bottom: .5rem !important + } + + .ml-xl-2, .mx-xl-2 { + margin-left: .5rem !important + } + + .m-xl-3 { + margin: 1rem !important + } + + .mt-xl-3, .my-xl-3 { + margin-top: 1rem !important + } + + .mr-xl-3, .mx-xl-3 { + margin-right: 1rem !important + } + + .mb-xl-3, .my-xl-3 { + margin-bottom: 1rem !important + } + + .ml-xl-3, .mx-xl-3 { + margin-left: 1rem !important + } + + .m-xl-4 { + margin: 1.5rem !important + } + + .mt-xl-4, .my-xl-4 { + margin-top: 1.5rem !important + } + + .mr-xl-4, .mx-xl-4 { + margin-right: 1.5rem !important + } + + .mb-xl-4, .my-xl-4 { + margin-bottom: 1.5rem !important + } + + .ml-xl-4, .mx-xl-4 { + margin-left: 1.5rem !important + } + + .m-xl-5 { + margin: 3rem !important + } + + .mt-xl-5, .my-xl-5 { + margin-top: 3rem !important + } + + .mr-xl-5, .mx-xl-5 { + margin-right: 3rem !important + } + + .mb-xl-5, .my-xl-5 { + margin-bottom: 3rem !important + } + + .ml-xl-5, .mx-xl-5 { + margin-left: 3rem !important + } + + .p-xl-0 { + padding: 0 !important + } + + .pt-xl-0, .py-xl-0 { + padding-top: 0 !important + } + + .pr-xl-0, .px-xl-0 { + padding-right: 0 !important + } + + .pb-xl-0, .py-xl-0 { + padding-bottom: 0 !important + } + + .pl-xl-0, .px-xl-0 { + padding-left: 0 !important + } + + .p-xl-1 { + padding: .25rem !important + } + + .pt-xl-1, .py-xl-1 { + padding-top: .25rem !important + } + + .pr-xl-1, .px-xl-1 { + padding-right: .25rem !important + } + + .pb-xl-1, .py-xl-1 { + padding-bottom: .25rem !important + } + + .pl-xl-1, .px-xl-1 { + padding-left: .25rem !important + } + + .p-xl-2 { + padding: .5rem !important + } + + .pt-xl-2, .py-xl-2 { + padding-top: .5rem !important + } + + .pr-xl-2, .px-xl-2 { + padding-right: .5rem !important + } + + .pb-xl-2, .py-xl-2 { + padding-bottom: .5rem !important + } + + .pl-xl-2, .px-xl-2 { + padding-left: .5rem !important + } + + .p-xl-3 { + padding: 1rem !important + } + + .pt-xl-3, .py-xl-3 { + padding-top: 1rem !important + } + + .pr-xl-3, .px-xl-3 { + padding-right: 1rem !important + } + + .pb-xl-3, .py-xl-3 { + padding-bottom: 1rem !important + } + + .pl-xl-3, .px-xl-3 { + padding-left: 1rem !important + } + + .p-xl-4 { + padding: 1.5rem !important + } + + .pt-xl-4, .py-xl-4 { + padding-top: 1.5rem !important + } + + .pr-xl-4, .px-xl-4 { + padding-right: 1.5rem !important + } + + .pb-xl-4, .py-xl-4 { + padding-bottom: 1.5rem !important + } + + .pl-xl-4, .px-xl-4 { + padding-left: 1.5rem !important + } + + .p-xl-5 { + padding: 3rem !important + } + + .pt-xl-5, .py-xl-5 { + padding-top: 3rem !important + } + + .pr-xl-5, .px-xl-5 { + padding-right: 3rem !important + } + + .pb-xl-5, .py-xl-5 { + padding-bottom: 3rem !important + } + + .pl-xl-5, .px-xl-5 { + padding-left: 3rem !important + } + + .m-xl-auto { + margin: auto !important + } + + .mt-xl-auto, .my-xl-auto { + margin-top: auto !important + } + + .mr-xl-auto, .mx-xl-auto { + margin-right: auto !important + } + + .mb-xl-auto, .my-xl-auto { + margin-bottom: auto !important + } + + .ml-xl-auto, .mx-xl-auto { + margin-left: auto !important + } +} + +.text-justify { + text-align: justify !important +} + +.text-nowrap { + white-space: nowrap !important +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.text-left { + text-align: left !important +} + +.text-right { + text-align: right !important +} + +.text-center { + text-align: center !important +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important + } + + .text-sm-right { + text-align: right !important + } + + .text-sm-center { + text-align: center !important + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important + } + + .text-md-right { + text-align: right !important + } + + .text-md-center { + text-align: center !important + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important + } + + .text-lg-right { + text-align: right !important + } + + .text-lg-center { + text-align: center !important + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important + } + + .text-xl-right { + text-align: right !important + } + + .text-xl-center { + text-align: center !important + } +} + +.text-lowercase { + text-transform: lowercase !important +} + +.text-uppercase { + text-transform: uppercase !important +} + +.text-capitalize { + text-transform: capitalize !important +} + +.font-weight-light { + font-weight: 300 !important +} + +.font-weight-normal { + font-weight: 400 !important +} + +.font-weight-bold { + font-weight: 700 !important +} + +.font-italic { + font-style: italic !important +} + +.text-white { + color: #fff !important +} + +.text-primary { + color: #009688 !important +} + +a.text-primary:focus, a.text-primary:hover { + color: #00635a !important +} + +.text-secondary { + color: #6c757d !important +} + +a.text-secondary:focus, a.text-secondary:hover { + color: #545b62 !important +} + +.text-success { + color: #4caf50 !important +} + +a.text-success:focus, a.text-success:hover { + color: #3d8b40 !important +} + +.text-info { + color: #03a9f4 !important +} + +a.text-info:focus, a.text-info:hover { + color: #0286c2 !important +} + +.text-warning { + color: #ff5722 !important +} + +a.text-warning:focus, a.text-warning:hover { + color: #ee3900 !important +} + +.text-danger { + color: #f44336 !important +} + +a.text-danger:focus, a.text-danger:hover { + color: #ea1c0d !important +} + +.text-light { + color: #f5f5f5 !important +} + +a.text-light:focus, a.text-light:hover { + color: #dcdcdc !important +} + +.text-dark { + color: #424242 !important +} + +a.text-dark:focus, a.text-dark:hover { + color: #292929 !important +} + +.bmd-help, .text-muted { + color: #6c757d !important +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.visible { + visibility: visible !important +} + +.invisible { + visibility: hidden !important +} + +@media print { + *, :after, :before { + text-shadow: none !important; + box-shadow: none !important + } + + a:not(.btn):not(.custom-file-control:before) { + text-decoration: underline + } + + abbr[title]:after { + content: " (" attr(title) ")" + } + + pre { + white-space: pre-wrap !important + } + + blockquote, pre { + border: 1px solid #999; + page-break-inside: avoid + } + + thead { + display: table-header-group + } + + img, tr { + page-break-inside: avoid + } + + h2, h3, p { + orphans: 3; + widows: 3 + } + + h2, h3 { + page-break-after: avoid + } + + @page { + size: a3 + } + + .container, body { + min-width: 992px !important + } + + .navbar { + display: none + } + + .badge { + border: 1px solid #000 + } + + .table { + border-collapse: collapse !important + } + + .table td, .table th { + background-color: #fff !important + } + + .table-bordered td, .table-bordered th { + border: 1px solid #ddd !important + } +} + +body { + font-weight: 400 +} + +a:focus, button:focus { + outline: none +} + +.bmd-layout-canvas { + display: flex; + flex-direction: column; + width: 100%; + height: 100% +} + +.bmd-layout-container { + position: relative; + flex: 1; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + overflow: hidden +} + +.bmd-layout-header { + z-index: 3; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + flex-shrink: 0; + justify-content: flex-start; + width: 100%; + max-height: 1000px; + transform: translateZ(0) +} + +.bmd-layout-content, .bmd-layout-header { + transition-duration: .2s; + transition-timing-function: cubic-bezier(.4, 0, .2, 1) +} + +.bmd-layout-content { + position: relative; + z-index: 1; + display: inline-block; + flex-grow: 1; + overflow-x: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch +} + +.bmd-layout-spacer { + flex-grow: 1 +} + +.bmd-layout-backdrop { + position: absolute; + top: 0; + left: 0; + z-index: 4; + width: 100%; + height: 100%; + visibility: hidden; + background-color: transparent; + transition-property: background-color; + transition-duration: .2s; + transition-timing-function: cubic-bezier(.4, 0, .2, 1) +} + +@supports (pointer-events:auto) { + .bmd-layout-backdrop { + background-color: rgba(0, 0, 0, .5); + opacity: 0; + transition-property: opacity; + visibility: visible; + pointer-events: none + } +} + +.btn, .custom-file-control:before { + position: relative; + margin-bottom: .3125rem; + font-size: .875rem; + text-decoration: none; + text-transform: uppercase; + letter-spacing: 0; + cursor: pointer; + border: 0; + outline: 0; + transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1), background-color .2s cubic-bezier(.4, 0, .2, 1), color .2s cubic-bezier(.4, 0, .2, 1); + will-change: box-shadow, transform; + color: rgba(0, 0, 0, .87); + background-color: transparent; + border-color: #ccc +} + +.active.custom-file-control:before, .btn.active, .btn.focus, .btn:active, .btn:focus, .btn:hover, .custom-file-control:active:before, .custom-file-control:focus:before, .custom-file-control:hover:before, .focus.custom-file-control:before, .open > .btn.dropdown-toggle, .open > .dropdown-toggle.custom-file-control:before { + color: rgba(0, 0, 0, .87); + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.active.custom-file-control:focus:before, .active.custom-file-control:hover:before, .active.focus.custom-file-control:before, .btn.active.focus, .btn.active:focus, .btn.active:hover, .btn:active.focus, .btn:active:focus, .btn:active:hover, .custom-file-control:active.focus:before, .custom-file-control:active:focus:before, .custom-file-control:active:hover:before, .open > .btn.dropdown-toggle.focus, .open > .btn.dropdown-toggle:focus, .open > .btn.dropdown-toggle:hover, .open > .dropdown-toggle.custom-file-control:focus:before, .open > .dropdown-toggle.custom-file-control:hover:before, .open > .dropdown-toggle.focus.custom-file-control:before { + color: rgba(0, 0, 0, .87); + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn.dropdown-toggle.bmd-btn-icon, .open > .dropdown-toggle.bmd-btn-icon.custom-file-control:before { + color: inherit; + background-color: transparent +} + +.open > .btn.dropdown-toggle.bmd-btn-icon:hover, .open > .dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn.disabled.focus, .btn.disabled:focus, .btn.disabled:hover, .btn:disabled.focus, .btn:disabled:focus, .btn:disabled:hover, .custom-file-control:disabled.focus:before, .custom-file-control:disabled:focus:before, .custom-file-control:disabled:hover:before, .disabled.custom-file-control:focus:before, .disabled.custom-file-control:hover:before, .disabled.focus.custom-file-control:before { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn, .bg-inverse .custom-file-control:before { + color: rgba(0, 0, 0, .87); + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .active.custom-file-control:before, .bg-inverse .btn.active, .bg-inverse .btn.focus, .bg-inverse .btn:active, .bg-inverse .btn:focus, .bg-inverse .btn:hover, .bg-inverse .custom-file-control:active:before, .bg-inverse .custom-file-control:focus:before, .bg-inverse .custom-file-control:hover:before, .bg-inverse .focus.custom-file-control:before, .open > .bg-inverse .btn.dropdown-toggle, .open > .bg-inverse .dropdown-toggle.custom-file-control:before { + color: rgba(0, 0, 0, .87); + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .active.custom-file-control:focus:before, .bg-inverse .active.custom-file-control:hover:before, .bg-inverse .active.focus.custom-file-control:before, .bg-inverse .btn.active.focus, .bg-inverse .btn.active:focus, .bg-inverse .btn.active:hover, .bg-inverse .btn:active.focus, .bg-inverse .btn:active:focus, .bg-inverse .btn:active:hover, .bg-inverse .custom-file-control:active.focus:before, .bg-inverse .custom-file-control:active:focus:before, .bg-inverse .custom-file-control:active:hover:before, .open > .bg-inverse .btn.dropdown-toggle.focus, .open > .bg-inverse .btn.dropdown-toggle:focus, .open > .bg-inverse .btn.dropdown-toggle:hover, .open > .bg-inverse .dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .dropdown-toggle.focus.custom-file-control:before { + color: rgba(0, 0, 0, .87); + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn.dropdown-toggle.bmd-btn-icon, .open > .bg-inverse .dropdown-toggle.bmd-btn-icon.custom-file-control:before { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn.dropdown-toggle.bmd-btn-icon:hover, .open > .bg-inverse .dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn.disabled.focus, .bg-inverse .btn.disabled:focus, .bg-inverse .btn.disabled:hover, .bg-inverse .btn:disabled.focus, .bg-inverse .btn:disabled:focus, .bg-inverse .btn:disabled:hover, .bg-inverse .custom-file-control:disabled.focus:before, .bg-inverse .custom-file-control:disabled:focus:before, .bg-inverse .custom-file-control:disabled:hover:before, .bg-inverse .disabled.custom-file-control:focus:before, .bg-inverse .disabled.custom-file-control:hover:before, .bg-inverse .disabled.focus.custom-file-control:before { + background-color: transparent; + border-color: #ccc +} + +.btn-link.custom-file-control:before, .btn.btn-link { + background-color: transparent +} + +.btn-primary.custom-file-control:before, .btn.btn-primary { + color: #009688; + background-color: transparent; + border-color: #ccc +} + +.btn-primary.active.custom-file-control:before, .btn-primary.custom-file-control:active:before, .btn-primary.custom-file-control:focus:before, .btn-primary.custom-file-control:hover:before, .btn-primary.focus.custom-file-control:before, .btn.btn-primary.active, .btn.btn-primary.focus, .btn.btn-primary:active, .btn.btn-primary:focus, .btn.btn-primary:hover, .open > .btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-primary.dropdown-toggle { + color: #009688; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-primary.active.custom-file-control:focus:before, .btn-primary.active.custom-file-control:hover:before, .btn-primary.active.focus.custom-file-control:before, .btn-primary.custom-file-control:active.focus:before, .btn-primary.custom-file-control:active:focus:before, .btn-primary.custom-file-control:active:hover:before, .btn.btn-primary.active.focus, .btn.btn-primary.active:focus, .btn.btn-primary.active:hover, .btn.btn-primary:active.focus, .btn.btn-primary:active:focus, .btn.btn-primary:active:hover, .open > .btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-primary.dropdown-toggle.focus, .open > .btn.btn-primary.dropdown-toggle:focus, .open > .btn.btn-primary.dropdown-toggle:hover { + color: #009688; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-primary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-primary.custom-file-control:disabled.focus:before, .btn-primary.custom-file-control:disabled:focus:before, .btn-primary.custom-file-control:disabled:hover:before, .btn-primary.disabled.custom-file-control:focus:before, .btn-primary.disabled.custom-file-control:hover:before, .btn-primary.disabled.focus.custom-file-control:before, .btn.btn-primary.disabled.focus, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:hover, .btn.btn-primary:disabled.focus, .btn.btn-primary:disabled:focus, .btn.btn-primary:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-primary.custom-file-control:before, .bg-inverse .btn.btn-primary { + color: #009688; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-primary.active.custom-file-control:before, .bg-inverse .btn-primary.custom-file-control:active:before, .bg-inverse .btn-primary.custom-file-control:focus:before, .bg-inverse .btn-primary.custom-file-control:hover:before, .bg-inverse .btn-primary.focus.custom-file-control:before, .bg-inverse .btn.btn-primary.active, .bg-inverse .btn.btn-primary.focus, .bg-inverse .btn.btn-primary:active, .bg-inverse .btn.btn-primary:focus, .bg-inverse .btn.btn-primary:hover, .open > .bg-inverse .btn-primary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle { + color: #009688; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-primary.active.custom-file-control:focus:before, .bg-inverse .btn-primary.active.custom-file-control:hover:before, .bg-inverse .btn-primary.active.focus.custom-file-control:before, .bg-inverse .btn-primary.custom-file-control:active.focus:before, .bg-inverse .btn-primary.custom-file-control:active:focus:before, .bg-inverse .btn-primary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-primary.active.focus, .bg-inverse .btn.btn-primary.active:focus, .bg-inverse .btn.btn-primary.active:hover, .bg-inverse .btn.btn-primary:active.focus, .bg-inverse .btn.btn-primary:active:focus, .bg-inverse .btn.btn-primary:active:hover, .open > .bg-inverse .btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-primary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-primary.dropdown-toggle:hover { + color: #009688; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-primary.custom-file-control:disabled.focus:before, .bg-inverse .btn-primary.custom-file-control:disabled:focus:before, .bg-inverse .btn-primary.custom-file-control:disabled:hover:before, .bg-inverse .btn-primary.disabled.custom-file-control:focus:before, .bg-inverse .btn-primary.disabled.custom-file-control:hover:before, .bg-inverse .btn-primary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-primary.disabled.focus, .bg-inverse .btn.btn-primary.disabled:focus, .bg-inverse .btn.btn-primary.disabled:hover, .bg-inverse .btn.btn-primary:disabled.focus, .bg-inverse .btn.btn-primary:disabled:focus, .bg-inverse .btn.btn-primary:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-primary.btn-link.custom-file-control:before, .btn.btn-primary.btn-link { + background-color: transparent +} + +.btn-secondary.custom-file-control:before, .btn.btn-secondary { + color: #6c757d; + background-color: transparent; + border-color: #ccc +} + +.btn-secondary.active.custom-file-control:before, .btn-secondary.custom-file-control:active:before, .btn-secondary.custom-file-control:focus:before, .btn-secondary.custom-file-control:hover:before, .btn-secondary.focus.custom-file-control:before, .btn.btn-secondary.active, .btn.btn-secondary.focus, .btn.btn-secondary:active, .btn.btn-secondary:focus, .btn.btn-secondary:hover, .open > .btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-secondary.dropdown-toggle { + color: #6c757d; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-secondary.active.custom-file-control:focus:before, .btn-secondary.active.custom-file-control:hover:before, .btn-secondary.active.focus.custom-file-control:before, .btn-secondary.custom-file-control:active.focus:before, .btn-secondary.custom-file-control:active:focus:before, .btn-secondary.custom-file-control:active:hover:before, .btn.btn-secondary.active.focus, .btn.btn-secondary.active:focus, .btn.btn-secondary.active:hover, .btn.btn-secondary:active.focus, .btn.btn-secondary:active:focus, .btn.btn-secondary:active:hover, .open > .btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-secondary.dropdown-toggle.focus, .open > .btn.btn-secondary.dropdown-toggle:focus, .open > .btn.btn-secondary.dropdown-toggle:hover { + color: #6c757d; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-secondary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-secondary.custom-file-control:disabled.focus:before, .btn-secondary.custom-file-control:disabled:focus:before, .btn-secondary.custom-file-control:disabled:hover:before, .btn-secondary.disabled.custom-file-control:focus:before, .btn-secondary.disabled.custom-file-control:hover:before, .btn-secondary.disabled.focus.custom-file-control:before, .btn.btn-secondary.disabled.focus, .btn.btn-secondary.disabled:focus, .btn.btn-secondary.disabled:hover, .btn.btn-secondary:disabled.focus, .btn.btn-secondary:disabled:focus, .btn.btn-secondary:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-secondary.custom-file-control:before, .bg-inverse .btn.btn-secondary { + color: #6c757d; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-secondary.active.custom-file-control:before, .bg-inverse .btn-secondary.custom-file-control:active:before, .bg-inverse .btn-secondary.custom-file-control:focus:before, .bg-inverse .btn-secondary.custom-file-control:hover:before, .bg-inverse .btn-secondary.focus.custom-file-control:before, .bg-inverse .btn.btn-secondary.active, .bg-inverse .btn.btn-secondary.focus, .bg-inverse .btn.btn-secondary:active, .bg-inverse .btn.btn-secondary:focus, .bg-inverse .btn.btn-secondary:hover, .open > .bg-inverse .btn-secondary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle { + color: #6c757d; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-secondary.active.custom-file-control:focus:before, .bg-inverse .btn-secondary.active.custom-file-control:hover:before, .bg-inverse .btn-secondary.active.focus.custom-file-control:before, .bg-inverse .btn-secondary.custom-file-control:active.focus:before, .bg-inverse .btn-secondary.custom-file-control:active:focus:before, .bg-inverse .btn-secondary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-secondary.active.focus, .bg-inverse .btn.btn-secondary.active:focus, .bg-inverse .btn.btn-secondary.active:hover, .bg-inverse .btn.btn-secondary:active.focus, .bg-inverse .btn.btn-secondary:active:focus, .bg-inverse .btn.btn-secondary:active:hover, .open > .bg-inverse .btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle:hover { + color: #6c757d; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-secondary.custom-file-control:disabled.focus:before, .bg-inverse .btn-secondary.custom-file-control:disabled:focus:before, .bg-inverse .btn-secondary.custom-file-control:disabled:hover:before, .bg-inverse .btn-secondary.disabled.custom-file-control:focus:before, .bg-inverse .btn-secondary.disabled.custom-file-control:hover:before, .bg-inverse .btn-secondary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-secondary.disabled.focus, .bg-inverse .btn.btn-secondary.disabled:focus, .bg-inverse .btn.btn-secondary.disabled:hover, .bg-inverse .btn.btn-secondary:disabled.focus, .bg-inverse .btn.btn-secondary:disabled:focus, .bg-inverse .btn.btn-secondary:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-secondary.btn-link.custom-file-control:before, .btn.btn-secondary.btn-link { + background-color: transparent +} + +.btn-success.custom-file-control:before, .btn.btn-success { + color: #4caf50; + background-color: transparent; + border-color: #ccc +} + +.btn-success.active.custom-file-control:before, .btn-success.custom-file-control:active:before, .btn-success.custom-file-control:focus:before, .btn-success.custom-file-control:hover:before, .btn-success.focus.custom-file-control:before, .btn.btn-success.active, .btn.btn-success.focus, .btn.btn-success:active, .btn.btn-success:focus, .btn.btn-success:hover, .open > .btn-success.dropdown-toggle.custom-file-control:before, .open > .btn.btn-success.dropdown-toggle { + color: #4caf50; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-success.active.custom-file-control:focus:before, .btn-success.active.custom-file-control:hover:before, .btn-success.active.focus.custom-file-control:before, .btn-success.custom-file-control:active.focus:before, .btn-success.custom-file-control:active:focus:before, .btn-success.custom-file-control:active:hover:before, .btn.btn-success.active.focus, .btn.btn-success.active:focus, .btn.btn-success.active:hover, .btn.btn-success:active.focus, .btn.btn-success:active:focus, .btn.btn-success:active:hover, .open > .btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-success.dropdown-toggle.focus, .open > .btn.btn-success.dropdown-toggle:focus, .open > .btn.btn-success.dropdown-toggle:hover { + color: #4caf50; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-success.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-success.custom-file-control:disabled.focus:before, .btn-success.custom-file-control:disabled:focus:before, .btn-success.custom-file-control:disabled:hover:before, .btn-success.disabled.custom-file-control:focus:before, .btn-success.disabled.custom-file-control:hover:before, .btn-success.disabled.focus.custom-file-control:before, .btn.btn-success.disabled.focus, .btn.btn-success.disabled:focus, .btn.btn-success.disabled:hover, .btn.btn-success:disabled.focus, .btn.btn-success:disabled:focus, .btn.btn-success:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-success.custom-file-control:before, .bg-inverse .btn.btn-success { + color: #4caf50; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-success.active.custom-file-control:before, .bg-inverse .btn-success.custom-file-control:active:before, .bg-inverse .btn-success.custom-file-control:focus:before, .bg-inverse .btn-success.custom-file-control:hover:before, .bg-inverse .btn-success.focus.custom-file-control:before, .bg-inverse .btn.btn-success.active, .bg-inverse .btn.btn-success.focus, .bg-inverse .btn.btn-success:active, .bg-inverse .btn.btn-success:focus, .bg-inverse .btn.btn-success:hover, .open > .bg-inverse .btn-success.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle { + color: #4caf50; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-success.active.custom-file-control:focus:before, .bg-inverse .btn-success.active.custom-file-control:hover:before, .bg-inverse .btn-success.active.focus.custom-file-control:before, .bg-inverse .btn-success.custom-file-control:active.focus:before, .bg-inverse .btn-success.custom-file-control:active:focus:before, .bg-inverse .btn-success.custom-file-control:active:hover:before, .bg-inverse .btn.btn-success.active.focus, .bg-inverse .btn.btn-success.active:focus, .bg-inverse .btn.btn-success.active:hover, .bg-inverse .btn.btn-success:active.focus, .bg-inverse .btn.btn-success:active:focus, .bg-inverse .btn.btn-success:active:hover, .open > .bg-inverse .btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-success.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-success.dropdown-toggle:hover { + color: #4caf50; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-success.custom-file-control:disabled.focus:before, .bg-inverse .btn-success.custom-file-control:disabled:focus:before, .bg-inverse .btn-success.custom-file-control:disabled:hover:before, .bg-inverse .btn-success.disabled.custom-file-control:focus:before, .bg-inverse .btn-success.disabled.custom-file-control:hover:before, .bg-inverse .btn-success.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-success.disabled.focus, .bg-inverse .btn.btn-success.disabled:focus, .bg-inverse .btn.btn-success.disabled:hover, .bg-inverse .btn.btn-success:disabled.focus, .bg-inverse .btn.btn-success:disabled:focus, .bg-inverse .btn.btn-success:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-success.btn-link.custom-file-control:before, .btn.btn-success.btn-link { + background-color: transparent +} + +.btn-info.custom-file-control:before, .btn.btn-info { + color: #03a9f4; + background-color: transparent; + border-color: #ccc +} + +.btn-info.active.custom-file-control:before, .btn-info.custom-file-control:active:before, .btn-info.custom-file-control:focus:before, .btn-info.custom-file-control:hover:before, .btn-info.focus.custom-file-control:before, .btn.btn-info.active, .btn.btn-info.focus, .btn.btn-info:active, .btn.btn-info:focus, .btn.btn-info:hover, .open > .btn-info.dropdown-toggle.custom-file-control:before, .open > .btn.btn-info.dropdown-toggle { + color: #03a9f4; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-info.active.custom-file-control:focus:before, .btn-info.active.custom-file-control:hover:before, .btn-info.active.focus.custom-file-control:before, .btn-info.custom-file-control:active.focus:before, .btn-info.custom-file-control:active:focus:before, .btn-info.custom-file-control:active:hover:before, .btn.btn-info.active.focus, .btn.btn-info.active:focus, .btn.btn-info.active:hover, .btn.btn-info:active.focus, .btn.btn-info:active:focus, .btn.btn-info:active:hover, .open > .btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-info.dropdown-toggle.focus, .open > .btn.btn-info.dropdown-toggle:focus, .open > .btn.btn-info.dropdown-toggle:hover { + color: #03a9f4; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-info.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-info.custom-file-control:disabled.focus:before, .btn-info.custom-file-control:disabled:focus:before, .btn-info.custom-file-control:disabled:hover:before, .btn-info.disabled.custom-file-control:focus:before, .btn-info.disabled.custom-file-control:hover:before, .btn-info.disabled.focus.custom-file-control:before, .btn.btn-info.disabled.focus, .btn.btn-info.disabled:focus, .btn.btn-info.disabled:hover, .btn.btn-info:disabled.focus, .btn.btn-info:disabled:focus, .btn.btn-info:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-info.custom-file-control:before, .bg-inverse .btn.btn-info { + color: #03a9f4; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-info.active.custom-file-control:before, .bg-inverse .btn-info.custom-file-control:active:before, .bg-inverse .btn-info.custom-file-control:focus:before, .bg-inverse .btn-info.custom-file-control:hover:before, .bg-inverse .btn-info.focus.custom-file-control:before, .bg-inverse .btn.btn-info.active, .bg-inverse .btn.btn-info.focus, .bg-inverse .btn.btn-info:active, .bg-inverse .btn.btn-info:focus, .bg-inverse .btn.btn-info:hover, .open > .bg-inverse .btn-info.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle { + color: #03a9f4; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-info.active.custom-file-control:focus:before, .bg-inverse .btn-info.active.custom-file-control:hover:before, .bg-inverse .btn-info.active.focus.custom-file-control:before, .bg-inverse .btn-info.custom-file-control:active.focus:before, .bg-inverse .btn-info.custom-file-control:active:focus:before, .bg-inverse .btn-info.custom-file-control:active:hover:before, .bg-inverse .btn.btn-info.active.focus, .bg-inverse .btn.btn-info.active:focus, .bg-inverse .btn.btn-info.active:hover, .bg-inverse .btn.btn-info:active.focus, .bg-inverse .btn.btn-info:active:focus, .bg-inverse .btn.btn-info:active:hover, .open > .bg-inverse .btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-info.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-info.dropdown-toggle:hover { + color: #03a9f4; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-info.custom-file-control:disabled.focus:before, .bg-inverse .btn-info.custom-file-control:disabled:focus:before, .bg-inverse .btn-info.custom-file-control:disabled:hover:before, .bg-inverse .btn-info.disabled.custom-file-control:focus:before, .bg-inverse .btn-info.disabled.custom-file-control:hover:before, .bg-inverse .btn-info.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-info.disabled.focus, .bg-inverse .btn.btn-info.disabled:focus, .bg-inverse .btn.btn-info.disabled:hover, .bg-inverse .btn.btn-info:disabled.focus, .bg-inverse .btn.btn-info:disabled:focus, .bg-inverse .btn.btn-info:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-info.btn-link.custom-file-control:before, .btn.btn-info.btn-link { + background-color: transparent +} + +.btn-warning.custom-file-control:before, .btn.btn-warning { + color: #ff5722; + background-color: transparent; + border-color: #ccc +} + +.btn-warning.active.custom-file-control:before, .btn-warning.custom-file-control:active:before, .btn-warning.custom-file-control:focus:before, .btn-warning.custom-file-control:hover:before, .btn-warning.focus.custom-file-control:before, .btn.btn-warning.active, .btn.btn-warning.focus, .btn.btn-warning:active, .btn.btn-warning:focus, .btn.btn-warning:hover, .open > .btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn.btn-warning.dropdown-toggle { + color: #ff5722; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-warning.active.custom-file-control:focus:before, .btn-warning.active.custom-file-control:hover:before, .btn-warning.active.focus.custom-file-control:before, .btn-warning.custom-file-control:active.focus:before, .btn-warning.custom-file-control:active:focus:before, .btn-warning.custom-file-control:active:hover:before, .btn.btn-warning.active.focus, .btn.btn-warning.active:focus, .btn.btn-warning.active:hover, .btn.btn-warning:active.focus, .btn.btn-warning:active:focus, .btn.btn-warning:active:hover, .open > .btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-warning.dropdown-toggle.focus, .open > .btn.btn-warning.dropdown-toggle:focus, .open > .btn.btn-warning.dropdown-toggle:hover { + color: #ff5722; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-warning.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-warning.custom-file-control:disabled.focus:before, .btn-warning.custom-file-control:disabled:focus:before, .btn-warning.custom-file-control:disabled:hover:before, .btn-warning.disabled.custom-file-control:focus:before, .btn-warning.disabled.custom-file-control:hover:before, .btn-warning.disabled.focus.custom-file-control:before, .btn.btn-warning.disabled.focus, .btn.btn-warning.disabled:focus, .btn.btn-warning.disabled:hover, .btn.btn-warning:disabled.focus, .btn.btn-warning:disabled:focus, .btn.btn-warning:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-warning.custom-file-control:before, .bg-inverse .btn.btn-warning { + color: #ff5722; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-warning.active.custom-file-control:before, .bg-inverse .btn-warning.custom-file-control:active:before, .bg-inverse .btn-warning.custom-file-control:focus:before, .bg-inverse .btn-warning.custom-file-control:hover:before, .bg-inverse .btn-warning.focus.custom-file-control:before, .bg-inverse .btn.btn-warning.active, .bg-inverse .btn.btn-warning.focus, .bg-inverse .btn.btn-warning:active, .bg-inverse .btn.btn-warning:focus, .bg-inverse .btn.btn-warning:hover, .open > .bg-inverse .btn-warning.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle { + color: #ff5722; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-warning.active.custom-file-control:focus:before, .bg-inverse .btn-warning.active.custom-file-control:hover:before, .bg-inverse .btn-warning.active.focus.custom-file-control:before, .bg-inverse .btn-warning.custom-file-control:active.focus:before, .bg-inverse .btn-warning.custom-file-control:active:focus:before, .bg-inverse .btn-warning.custom-file-control:active:hover:before, .bg-inverse .btn.btn-warning.active.focus, .bg-inverse .btn.btn-warning.active:focus, .bg-inverse .btn.btn-warning.active:hover, .bg-inverse .btn.btn-warning:active.focus, .bg-inverse .btn.btn-warning:active:focus, .bg-inverse .btn.btn-warning:active:hover, .open > .bg-inverse .btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-warning.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-warning.dropdown-toggle:hover { + color: #ff5722; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-warning.custom-file-control:disabled.focus:before, .bg-inverse .btn-warning.custom-file-control:disabled:focus:before, .bg-inverse .btn-warning.custom-file-control:disabled:hover:before, .bg-inverse .btn-warning.disabled.custom-file-control:focus:before, .bg-inverse .btn-warning.disabled.custom-file-control:hover:before, .bg-inverse .btn-warning.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-warning.disabled.focus, .bg-inverse .btn.btn-warning.disabled:focus, .bg-inverse .btn.btn-warning.disabled:hover, .bg-inverse .btn.btn-warning:disabled.focus, .bg-inverse .btn.btn-warning:disabled:focus, .bg-inverse .btn.btn-warning:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-warning.btn-link.custom-file-control:before, .btn.btn-warning.btn-link { + background-color: transparent +} + +.btn-danger.custom-file-control:before, .btn.btn-danger { + color: #f44336; + background-color: transparent; + border-color: #ccc +} + +.btn-danger.active.custom-file-control:before, .btn-danger.custom-file-control:active:before, .btn-danger.custom-file-control:focus:before, .btn-danger.custom-file-control:hover:before, .btn-danger.focus.custom-file-control:before, .btn.btn-danger.active, .btn.btn-danger.focus, .btn.btn-danger:active, .btn.btn-danger:focus, .btn.btn-danger:hover, .open > .btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn.btn-danger.dropdown-toggle { + color: #f44336; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-danger.active.custom-file-control:focus:before, .btn-danger.active.custom-file-control:hover:before, .btn-danger.active.focus.custom-file-control:before, .btn-danger.custom-file-control:active.focus:before, .btn-danger.custom-file-control:active:focus:before, .btn-danger.custom-file-control:active:hover:before, .btn.btn-danger.active.focus, .btn.btn-danger.active:focus, .btn.btn-danger.active:hover, .btn.btn-danger:active.focus, .btn.btn-danger:active:focus, .btn.btn-danger:active:hover, .open > .btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-danger.dropdown-toggle.focus, .open > .btn.btn-danger.dropdown-toggle:focus, .open > .btn.btn-danger.dropdown-toggle:hover { + color: #f44336; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-danger.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-danger.custom-file-control:disabled.focus:before, .btn-danger.custom-file-control:disabled:focus:before, .btn-danger.custom-file-control:disabled:hover:before, .btn-danger.disabled.custom-file-control:focus:before, .btn-danger.disabled.custom-file-control:hover:before, .btn-danger.disabled.focus.custom-file-control:before, .btn.btn-danger.disabled.focus, .btn.btn-danger.disabled:focus, .btn.btn-danger.disabled:hover, .btn.btn-danger:disabled.focus, .btn.btn-danger:disabled:focus, .btn.btn-danger:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-danger.custom-file-control:before, .bg-inverse .btn.btn-danger { + color: #f44336; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-danger.active.custom-file-control:before, .bg-inverse .btn-danger.custom-file-control:active:before, .bg-inverse .btn-danger.custom-file-control:focus:before, .bg-inverse .btn-danger.custom-file-control:hover:before, .bg-inverse .btn-danger.focus.custom-file-control:before, .bg-inverse .btn.btn-danger.active, .bg-inverse .btn.btn-danger.focus, .bg-inverse .btn.btn-danger:active, .bg-inverse .btn.btn-danger:focus, .bg-inverse .btn.btn-danger:hover, .open > .bg-inverse .btn-danger.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle { + color: #f44336; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-danger.active.custom-file-control:focus:before, .bg-inverse .btn-danger.active.custom-file-control:hover:before, .bg-inverse .btn-danger.active.focus.custom-file-control:before, .bg-inverse .btn-danger.custom-file-control:active.focus:before, .bg-inverse .btn-danger.custom-file-control:active:focus:before, .bg-inverse .btn-danger.custom-file-control:active:hover:before, .bg-inverse .btn.btn-danger.active.focus, .bg-inverse .btn.btn-danger.active:focus, .bg-inverse .btn.btn-danger.active:hover, .bg-inverse .btn.btn-danger:active.focus, .bg-inverse .btn.btn-danger:active:focus, .bg-inverse .btn.btn-danger:active:hover, .open > .bg-inverse .btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-danger.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-danger.dropdown-toggle:hover { + color: #f44336; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-danger.custom-file-control:disabled.focus:before, .bg-inverse .btn-danger.custom-file-control:disabled:focus:before, .bg-inverse .btn-danger.custom-file-control:disabled:hover:before, .bg-inverse .btn-danger.disabled.custom-file-control:focus:before, .bg-inverse .btn-danger.disabled.custom-file-control:hover:before, .bg-inverse .btn-danger.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-danger.disabled.focus, .bg-inverse .btn.btn-danger.disabled:focus, .bg-inverse .btn.btn-danger.disabled:hover, .bg-inverse .btn.btn-danger:disabled.focus, .bg-inverse .btn.btn-danger:disabled:focus, .bg-inverse .btn.btn-danger:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-danger.btn-link.custom-file-control:before, .btn.btn-danger.btn-link { + background-color: transparent +} + +.btn-light.custom-file-control:before, .btn.btn-light { + color: #f5f5f5; + background-color: transparent; + border-color: #ccc +} + +.btn-light.active.custom-file-control:before, .btn-light.custom-file-control:active:before, .btn-light.custom-file-control:focus:before, .btn-light.custom-file-control:hover:before, .btn-light.focus.custom-file-control:before, .btn.btn-light.active, .btn.btn-light.focus, .btn.btn-light:active, .btn.btn-light:focus, .btn.btn-light:hover, .open > .btn-light.dropdown-toggle.custom-file-control:before, .open > .btn.btn-light.dropdown-toggle { + color: #f5f5f5; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-light.active.custom-file-control:focus:before, .btn-light.active.custom-file-control:hover:before, .btn-light.active.focus.custom-file-control:before, .btn-light.custom-file-control:active.focus:before, .btn-light.custom-file-control:active:focus:before, .btn-light.custom-file-control:active:hover:before, .btn.btn-light.active.focus, .btn.btn-light.active:focus, .btn.btn-light.active:hover, .btn.btn-light:active.focus, .btn.btn-light:active:focus, .btn.btn-light:active:hover, .open > .btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-light.dropdown-toggle.focus, .open > .btn.btn-light.dropdown-toggle:focus, .open > .btn.btn-light.dropdown-toggle:hover { + color: #f5f5f5; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-light.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-light.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-light.custom-file-control:disabled.focus:before, .btn-light.custom-file-control:disabled:focus:before, .btn-light.custom-file-control:disabled:hover:before, .btn-light.disabled.custom-file-control:focus:before, .btn-light.disabled.custom-file-control:hover:before, .btn-light.disabled.focus.custom-file-control:before, .btn.btn-light.disabled.focus, .btn.btn-light.disabled:focus, .btn.btn-light.disabled:hover, .btn.btn-light:disabled.focus, .btn.btn-light:disabled:focus, .btn.btn-light:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-light.custom-file-control:before, .bg-inverse .btn.btn-light { + color: #f5f5f5; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-light.active.custom-file-control:before, .bg-inverse .btn-light.custom-file-control:active:before, .bg-inverse .btn-light.custom-file-control:focus:before, .bg-inverse .btn-light.custom-file-control:hover:before, .bg-inverse .btn-light.focus.custom-file-control:before, .bg-inverse .btn.btn-light.active, .bg-inverse .btn.btn-light.focus, .bg-inverse .btn.btn-light:active, .bg-inverse .btn.btn-light:focus, .bg-inverse .btn.btn-light:hover, .open > .bg-inverse .btn-light.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle { + color: #f5f5f5; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-light.active.custom-file-control:focus:before, .bg-inverse .btn-light.active.custom-file-control:hover:before, .bg-inverse .btn-light.active.focus.custom-file-control:before, .bg-inverse .btn-light.custom-file-control:active.focus:before, .bg-inverse .btn-light.custom-file-control:active:focus:before, .bg-inverse .btn-light.custom-file-control:active:hover:before, .bg-inverse .btn.btn-light.active.focus, .bg-inverse .btn.btn-light.active:focus, .bg-inverse .btn.btn-light.active:hover, .bg-inverse .btn.btn-light:active.focus, .bg-inverse .btn.btn-light:active:focus, .bg-inverse .btn.btn-light:active:hover, .open > .bg-inverse .btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-light.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-light.dropdown-toggle:hover { + color: #f5f5f5; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-light.custom-file-control:disabled.focus:before, .bg-inverse .btn-light.custom-file-control:disabled:focus:before, .bg-inverse .btn-light.custom-file-control:disabled:hover:before, .bg-inverse .btn-light.disabled.custom-file-control:focus:before, .bg-inverse .btn-light.disabled.custom-file-control:hover:before, .bg-inverse .btn-light.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-light.disabled.focus, .bg-inverse .btn.btn-light.disabled:focus, .bg-inverse .btn.btn-light.disabled:hover, .bg-inverse .btn.btn-light:disabled.focus, .bg-inverse .btn.btn-light:disabled:focus, .bg-inverse .btn.btn-light:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-light.btn-link.custom-file-control:before, .btn.btn-light.btn-link { + background-color: transparent +} + +.btn-dark.custom-file-control:before, .btn.btn-dark { + color: #424242; + background-color: transparent; + border-color: #ccc +} + +.btn-dark.active.custom-file-control:before, .btn-dark.custom-file-control:active:before, .btn-dark.custom-file-control:focus:before, .btn-dark.custom-file-control:hover:before, .btn-dark.focus.custom-file-control:before, .btn.btn-dark.active, .btn.btn-dark.focus, .btn.btn-dark:active, .btn.btn-dark:focus, .btn.btn-dark:hover, .open > .btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn.btn-dark.dropdown-toggle { + color: #424242; + background-color: hsla(0, 0%, 60%, .2); + border-color: hsla(0, 0%, 60%, .2) +} + +.btn-dark.active.custom-file-control:focus:before, .btn-dark.active.custom-file-control:hover:before, .btn-dark.active.focus.custom-file-control:before, .btn-dark.custom-file-control:active.focus:before, .btn-dark.custom-file-control:active:focus:before, .btn-dark.custom-file-control:active:hover:before, .btn.btn-dark.active.focus, .btn.btn-dark.active:focus, .btn.btn-dark.active:hover, .btn.btn-dark:active.focus, .btn.btn-dark:active:focus, .btn.btn-dark:active:hover, .open > .btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-dark.dropdown-toggle.focus, .open > .btn.btn-dark.dropdown-toggle:focus, .open > .btn.btn-dark.dropdown-toggle:hover { + color: #424242; + background-color: hsla(0, 0%, 60%, .4); + border-color: hsla(0, 0%, 60%, .4) +} + +.open > .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-dark.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-dark.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-dark.custom-file-control:disabled.focus:before, .btn-dark.custom-file-control:disabled:focus:before, .btn-dark.custom-file-control:disabled:hover:before, .btn-dark.disabled.custom-file-control:focus:before, .btn-dark.disabled.custom-file-control:hover:before, .btn-dark.disabled.focus.custom-file-control:before, .btn.btn-dark.disabled.focus, .btn.btn-dark.disabled:focus, .btn.btn-dark.disabled:hover, .btn.btn-dark:disabled.focus, .btn.btn-dark:disabled:focus, .btn.btn-dark:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-dark.custom-file-control:before, .bg-inverse .btn.btn-dark { + color: #424242; + background-color: transparent; + border-color: #ccc +} + +.bg-inverse .btn-dark.active.custom-file-control:before, .bg-inverse .btn-dark.custom-file-control:active:before, .bg-inverse .btn-dark.custom-file-control:focus:before, .bg-inverse .btn-dark.custom-file-control:hover:before, .bg-inverse .btn-dark.focus.custom-file-control:before, .bg-inverse .btn.btn-dark.active, .bg-inverse .btn.btn-dark.focus, .bg-inverse .btn.btn-dark:active, .bg-inverse .btn.btn-dark:focus, .bg-inverse .btn.btn-dark:hover, .open > .bg-inverse .btn-dark.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle { + color: #424242; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-dark.active.custom-file-control:focus:before, .bg-inverse .btn-dark.active.custom-file-control:hover:before, .bg-inverse .btn-dark.active.focus.custom-file-control:before, .bg-inverse .btn-dark.custom-file-control:active.focus:before, .bg-inverse .btn-dark.custom-file-control:active:focus:before, .bg-inverse .btn-dark.custom-file-control:active:hover:before, .bg-inverse .btn.btn-dark.active.focus, .bg-inverse .btn.btn-dark.active:focus, .bg-inverse .btn.btn-dark.active:hover, .bg-inverse .btn.btn-dark:active.focus, .bg-inverse .btn.btn-dark:active:focus, .bg-inverse .btn.btn-dark:active:hover, .open > .bg-inverse .btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-dark.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-dark.dropdown-toggle:hover { + color: #424242; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-dark.custom-file-control:disabled.focus:before, .bg-inverse .btn-dark.custom-file-control:disabled:focus:before, .bg-inverse .btn-dark.custom-file-control:disabled:hover:before, .bg-inverse .btn-dark.disabled.custom-file-control:focus:before, .bg-inverse .btn-dark.disabled.custom-file-control:hover:before, .bg-inverse .btn-dark.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-dark.disabled.focus, .bg-inverse .btn.btn-dark.disabled:focus, .bg-inverse .btn.btn-dark.disabled:hover, .bg-inverse .btn.btn-dark:disabled.focus, .bg-inverse .btn.btn-dark:disabled:focus, .bg-inverse .btn.btn-dark:disabled:hover { + background-color: transparent; + border-color: #ccc +} + +.btn-dark.btn-link.custom-file-control:before, .btn.btn-dark.btn-link { + background-color: transparent +} + +.bmd-btn-fab.btn-primary.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:before, .btn-group-raised .btn.btn-primary, .btn-raised.btn-primary.custom-file-control:before, .btn.bmd-btn-fab.btn-primary, .btn.btn-raised.btn-primary { + color: #fff; + background-color: #009688; + border-color: #009688 +} + +.bmd-btn-fab.btn-primary.active.custom-file-control:before, .bmd-btn-fab.btn-primary.custom-file-control:active:before, .bmd-btn-fab.btn-primary.custom-file-control:focus:before, .bmd-btn-fab.btn-primary.custom-file-control:hover:before, .bmd-btn-fab.btn-primary.focus.custom-file-control:before, .btn-group-raised .btn-primary.active.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:active:before, .btn-group-raised .btn-primary.custom-file-control:focus:before, .btn-group-raised .btn-primary.custom-file-control:hover:before, .btn-group-raised .btn-primary.focus.custom-file-control:before, .btn-group-raised .btn.btn-primary.active, .btn-group-raised .btn.btn-primary.focus, .btn-group-raised .btn.btn-primary:active, .btn-group-raised .btn.btn-primary:focus, .btn-group-raised .btn.btn-primary:hover, .btn-raised.btn-primary.active.custom-file-control:before, .btn-raised.btn-primary.custom-file-control:active:before, .btn-raised.btn-primary.custom-file-control:focus:before, .btn-raised.btn-primary.custom-file-control:hover:before, .btn-raised.btn-primary.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-primary.active, .btn.bmd-btn-fab.btn-primary.focus, .btn.bmd-btn-fab.btn-primary:active, .btn.bmd-btn-fab.btn-primary:focus, .btn.bmd-btn-fab.btn-primary:hover, .btn.btn-raised.btn-primary.active, .btn.btn-raised.btn-primary.focus, .btn.btn-raised.btn-primary:active, .btn.btn-raised.btn-primary:focus, .btn.btn-raised.btn-primary:hover, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle, .open > .btn-raised.btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle, .open > .btn.btn-raised.btn-primary.dropdown-toggle { + color: #fff; + background-color: #008276; + border-color: #005951 +} + +.bmd-btn-fab.btn-primary.active.custom-file-control:focus:before, .bmd-btn-fab.btn-primary.active.custom-file-control:hover:before, .bmd-btn-fab.btn-primary.active.focus.custom-file-control:before, .bmd-btn-fab.btn-primary.custom-file-control:active.focus:before, .bmd-btn-fab.btn-primary.custom-file-control:active:focus:before, .bmd-btn-fab.btn-primary.custom-file-control:active:hover:before, .btn-group-raised .btn-primary.active.custom-file-control:focus:before, .btn-group-raised .btn-primary.active.custom-file-control:hover:before, .btn-group-raised .btn-primary.active.focus.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:active.focus:before, .btn-group-raised .btn-primary.custom-file-control:active:focus:before, .btn-group-raised .btn-primary.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-primary.active.focus, .btn-group-raised .btn.btn-primary.active:focus, .btn-group-raised .btn.btn-primary.active:hover, .btn-group-raised .btn.btn-primary:active.focus, .btn-group-raised .btn.btn-primary:active:focus, .btn-group-raised .btn.btn-primary:active:hover, .btn-raised.btn-primary.active.custom-file-control:focus:before, .btn-raised.btn-primary.active.custom-file-control:hover:before, .btn-raised.btn-primary.active.focus.custom-file-control:before, .btn-raised.btn-primary.custom-file-control:active.focus:before, .btn-raised.btn-primary.custom-file-control:active:focus:before, .btn-raised.btn-primary.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-primary.active.focus, .btn.bmd-btn-fab.btn-primary.active:focus, .btn.bmd-btn-fab.btn-primary.active:hover, .btn.bmd-btn-fab.btn-primary:active.focus, .btn.bmd-btn-fab.btn-primary:active:focus, .btn.bmd-btn-fab.btn-primary:active:hover, .btn.btn-raised.btn-primary.active.focus, .btn.btn-raised.btn-primary.active:focus, .btn.btn-raised.btn-primary.active:hover, .btn.btn-raised.btn-primary:active.focus, .btn.btn-raised.btn-primary:active:focus, .btn.btn-raised.btn-primary:active:hover, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle:hover, .open > .btn-raised.btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle:hover, .open > .btn.btn-raised.btn-primary.dropdown-toggle.focus, .open > .btn.btn-raised.btn-primary.dropdown-toggle:focus, .open > .btn.btn-raised.btn-primary.dropdown-toggle:hover { + color: #fff; + background-color: #008276; + border-color: #001714 +} + +.open > .bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #009688 +} + +.open > .bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon:hover { + background-color: #008276 +} + +.bmd-btn-fab.btn-primary.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-primary.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-primary.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-primary.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-primary.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-primary.disabled.focus.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:disabled.focus:before, .btn-group-raised .btn-primary.custom-file-control:disabled:focus:before, .btn-group-raised .btn-primary.custom-file-control:disabled:hover:before, .btn-group-raised .btn-primary.disabled.custom-file-control:focus:before, .btn-group-raised .btn-primary.disabled.custom-file-control:hover:before, .btn-group-raised .btn-primary.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-primary.disabled.focus, .btn-group-raised .btn.btn-primary.disabled:focus, .btn-group-raised .btn.btn-primary.disabled:hover, .btn-group-raised .btn.btn-primary:disabled.focus, .btn-group-raised .btn.btn-primary:disabled:focus, .btn-group-raised .btn.btn-primary:disabled:hover, .btn-raised.btn-primary.custom-file-control:disabled.focus:before, .btn-raised.btn-primary.custom-file-control:disabled:focus:before, .btn-raised.btn-primary.custom-file-control:disabled:hover:before, .btn-raised.btn-primary.disabled.custom-file-control:focus:before, .btn-raised.btn-primary.disabled.custom-file-control:hover:before, .btn-raised.btn-primary.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-primary.disabled.focus, .btn.bmd-btn-fab.btn-primary.disabled:focus, .btn.bmd-btn-fab.btn-primary.disabled:hover, .btn.bmd-btn-fab.btn-primary:disabled.focus, .btn.bmd-btn-fab.btn-primary:disabled:focus, .btn.bmd-btn-fab.btn-primary:disabled:hover, .btn.btn-raised.btn-primary.disabled.focus, .btn.btn-raised.btn-primary.disabled:focus, .btn.btn-raised.btn-primary.disabled:hover, .btn.btn-raised.btn-primary:disabled.focus, .btn.btn-raised.btn-primary:disabled:focus, .btn.btn-raised.btn-primary:disabled:hover { + background-color: #009688; + border-color: #009688 +} + +.bmd-btn-fab.btn-secondary.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:before, .btn-group-raised .btn.btn-secondary, .btn-raised.btn-secondary.custom-file-control:before, .btn.bmd-btn-fab.btn-secondary, .btn.btn-raised.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d +} + +.bmd-btn-fab.btn-secondary.active.custom-file-control:before, .bmd-btn-fab.btn-secondary.custom-file-control:active:before, .bmd-btn-fab.btn-secondary.custom-file-control:focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:hover:before, .bmd-btn-fab.btn-secondary.focus.custom-file-control:before, .btn-group-raised .btn-secondary.active.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:active:before, .btn-group-raised .btn-secondary.custom-file-control:focus:before, .btn-group-raised .btn-secondary.custom-file-control:hover:before, .btn-group-raised .btn-secondary.focus.custom-file-control:before, .btn-group-raised .btn.btn-secondary.active, .btn-group-raised .btn.btn-secondary.focus, .btn-group-raised .btn.btn-secondary:active, .btn-group-raised .btn.btn-secondary:focus, .btn-group-raised .btn.btn-secondary:hover, .btn-raised.btn-secondary.active.custom-file-control:before, .btn-raised.btn-secondary.custom-file-control:active:before, .btn-raised.btn-secondary.custom-file-control:focus:before, .btn-raised.btn-secondary.custom-file-control:hover:before, .btn-raised.btn-secondary.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-secondary.active, .btn.bmd-btn-fab.btn-secondary.focus, .btn.bmd-btn-fab.btn-secondary:active, .btn.bmd-btn-fab.btn-secondary:focus, .btn.bmd-btn-fab.btn-secondary:hover, .btn.btn-raised.btn-secondary.active, .btn.btn-raised.btn-secondary.focus, .btn.btn-raised.btn-secondary:active, .btn.btn-raised.btn-secondary:focus, .btn.btn-raised.btn-secondary:hover, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle, .open > .btn-raised.btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle, .open > .btn.btn-raised.btn-secondary.dropdown-toggle { + color: #fff; + background-color: #636b72; + border-color: #50565c +} + +.bmd-btn-fab.btn-secondary.active.custom-file-control:focus:before, .bmd-btn-fab.btn-secondary.active.custom-file-control:hover:before, .bmd-btn-fab.btn-secondary.active.focus.custom-file-control:before, .bmd-btn-fab.btn-secondary.custom-file-control:active.focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:active:focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:active:hover:before, .btn-group-raised .btn-secondary.active.custom-file-control:focus:before, .btn-group-raised .btn-secondary.active.custom-file-control:hover:before, .btn-group-raised .btn-secondary.active.focus.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:active.focus:before, .btn-group-raised .btn-secondary.custom-file-control:active:focus:before, .btn-group-raised .btn-secondary.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-secondary.active.focus, .btn-group-raised .btn.btn-secondary.active:focus, .btn-group-raised .btn.btn-secondary.active:hover, .btn-group-raised .btn.btn-secondary:active.focus, .btn-group-raised .btn.btn-secondary:active:focus, .btn-group-raised .btn.btn-secondary:active:hover, .btn-raised.btn-secondary.active.custom-file-control:focus:before, .btn-raised.btn-secondary.active.custom-file-control:hover:before, .btn-raised.btn-secondary.active.focus.custom-file-control:before, .btn-raised.btn-secondary.custom-file-control:active.focus:before, .btn-raised.btn-secondary.custom-file-control:active:focus:before, .btn-raised.btn-secondary.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-secondary.active.focus, .btn.bmd-btn-fab.btn-secondary.active:focus, .btn.bmd-btn-fab.btn-secondary.active:hover, .btn.bmd-btn-fab.btn-secondary:active.focus, .btn.bmd-btn-fab.btn-secondary:active:focus, .btn.bmd-btn-fab.btn-secondary:active:hover, .btn.btn-raised.btn-secondary.active.focus, .btn.btn-raised.btn-secondary.active:focus, .btn.btn-raised.btn-secondary.active:hover, .btn.btn-raised.btn-secondary:active.focus, .btn.btn-raised.btn-secondary:active:focus, .btn.btn-raised.btn-secondary:active:hover, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle:hover, .open > .btn-raised.btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle:hover, .open > .btn.btn-raised.btn-secondary.dropdown-toggle.focus, .open > .btn.btn-raised.btn-secondary.dropdown-toggle:focus, .open > .btn.btn-raised.btn-secondary.dropdown-toggle:hover { + color: #fff; + background-color: #636b72; + border-color: #313539 +} + +.open > .bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #6c757d +} + +.open > .bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon:hover { + background-color: #636b72 +} + +.bmd-btn-fab.btn-secondary.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-secondary.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-secondary.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-secondary.disabled.focus.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:disabled.focus:before, .btn-group-raised .btn-secondary.custom-file-control:disabled:focus:before, .btn-group-raised .btn-secondary.custom-file-control:disabled:hover:before, .btn-group-raised .btn-secondary.disabled.custom-file-control:focus:before, .btn-group-raised .btn-secondary.disabled.custom-file-control:hover:before, .btn-group-raised .btn-secondary.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-secondary.disabled.focus, .btn-group-raised .btn.btn-secondary.disabled:focus, .btn-group-raised .btn.btn-secondary.disabled:hover, .btn-group-raised .btn.btn-secondary:disabled.focus, .btn-group-raised .btn.btn-secondary:disabled:focus, .btn-group-raised .btn.btn-secondary:disabled:hover, .btn-raised.btn-secondary.custom-file-control:disabled.focus:before, .btn-raised.btn-secondary.custom-file-control:disabled:focus:before, .btn-raised.btn-secondary.custom-file-control:disabled:hover:before, .btn-raised.btn-secondary.disabled.custom-file-control:focus:before, .btn-raised.btn-secondary.disabled.custom-file-control:hover:before, .btn-raised.btn-secondary.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-secondary.disabled.focus, .btn.bmd-btn-fab.btn-secondary.disabled:focus, .btn.bmd-btn-fab.btn-secondary.disabled:hover, .btn.bmd-btn-fab.btn-secondary:disabled.focus, .btn.bmd-btn-fab.btn-secondary:disabled:focus, .btn.bmd-btn-fab.btn-secondary:disabled:hover, .btn.btn-raised.btn-secondary.disabled.focus, .btn.btn-raised.btn-secondary.disabled:focus, .btn.btn-raised.btn-secondary.disabled:hover, .btn.btn-raised.btn-secondary:disabled.focus, .btn.btn-raised.btn-secondary:disabled:focus, .btn.btn-raised.btn-secondary:disabled:hover { + background-color: #6c757d; + border-color: #6c757d +} + +.bmd-btn-fab.btn-success.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:before, .btn-group-raised .btn.btn-success, .btn-raised.btn-success.custom-file-control:before, .btn.bmd-btn-fab.btn-success, .btn.btn-raised.btn-success { + color: #fff; + background-color: #4caf50; + border-color: #4caf50 +} + +.bmd-btn-fab.btn-success.active.custom-file-control:before, .bmd-btn-fab.btn-success.custom-file-control:active:before, .bmd-btn-fab.btn-success.custom-file-control:focus:before, .bmd-btn-fab.btn-success.custom-file-control:hover:before, .bmd-btn-fab.btn-success.focus.custom-file-control:before, .btn-group-raised .btn-success.active.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:active:before, .btn-group-raised .btn-success.custom-file-control:focus:before, .btn-group-raised .btn-success.custom-file-control:hover:before, .btn-group-raised .btn-success.focus.custom-file-control:before, .btn-group-raised .btn.btn-success.active, .btn-group-raised .btn.btn-success.focus, .btn-group-raised .btn.btn-success:active, .btn-group-raised .btn.btn-success:focus, .btn-group-raised .btn.btn-success:hover, .btn-raised.btn-success.active.custom-file-control:before, .btn-raised.btn-success.custom-file-control:active:before, .btn-raised.btn-success.custom-file-control:focus:before, .btn-raised.btn-success.custom-file-control:hover:before, .btn-raised.btn-success.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-success.active, .btn.bmd-btn-fab.btn-success.focus, .btn.bmd-btn-fab.btn-success:active, .btn.bmd-btn-fab.btn-success:focus, .btn.bmd-btn-fab.btn-success:hover, .btn.btn-raised.btn-success.active, .btn.btn-raised.btn-success.focus, .btn.btn-raised.btn-success:active, .btn.btn-raised.btn-success:focus, .btn.btn-raised.btn-success:hover, .open > .bmd-btn-fab.btn-success.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-success.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle, .open > .btn-raised.btn-success.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle, .open > .btn.btn-raised.btn-success.dropdown-toggle { + color: #fff; + background-color: #46a149; + border-color: #39843c +} + +.bmd-btn-fab.btn-success.active.custom-file-control:focus:before, .bmd-btn-fab.btn-success.active.custom-file-control:hover:before, .bmd-btn-fab.btn-success.active.focus.custom-file-control:before, .bmd-btn-fab.btn-success.custom-file-control:active.focus:before, .bmd-btn-fab.btn-success.custom-file-control:active:focus:before, .bmd-btn-fab.btn-success.custom-file-control:active:hover:before, .btn-group-raised .btn-success.active.custom-file-control:focus:before, .btn-group-raised .btn-success.active.custom-file-control:hover:before, .btn-group-raised .btn-success.active.focus.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:active.focus:before, .btn-group-raised .btn-success.custom-file-control:active:focus:before, .btn-group-raised .btn-success.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-success.active.focus, .btn-group-raised .btn.btn-success.active:focus, .btn-group-raised .btn.btn-success.active:hover, .btn-group-raised .btn.btn-success:active.focus, .btn-group-raised .btn.btn-success:active:focus, .btn-group-raised .btn.btn-success:active:hover, .btn-raised.btn-success.active.custom-file-control:focus:before, .btn-raised.btn-success.active.custom-file-control:hover:before, .btn-raised.btn-success.active.focus.custom-file-control:before, .btn-raised.btn-success.custom-file-control:active.focus:before, .btn-raised.btn-success.custom-file-control:active:focus:before, .btn-raised.btn-success.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-success.active.focus, .btn.bmd-btn-fab.btn-success.active:focus, .btn.bmd-btn-fab.btn-success.active:hover, .btn.bmd-btn-fab.btn-success:active.focus, .btn.bmd-btn-fab.btn-success:active:focus, .btn.bmd-btn-fab.btn-success:active:hover, .btn.btn-raised.btn-success.active.focus, .btn.btn-raised.btn-success.active:focus, .btn.btn-raised.btn-success.active:hover, .btn.btn-raised.btn-success:active.focus, .btn.btn-raised.btn-success:active:focus, .btn.btn-raised.btn-success:active:hover, .open > .bmd-btn-fab.btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-success.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-success.dropdown-toggle:hover, .open > .btn-raised.btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle:hover, .open > .btn.btn-raised.btn-success.dropdown-toggle.focus, .open > .btn.btn-raised.btn-success.dropdown-toggle:focus, .open > .btn.btn-raised.btn-success.dropdown-toggle:hover { + color: #fff; + background-color: #46a149; + border-color: #255627 +} + +.open > .bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-success.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #4caf50 +} + +.open > .bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-success.dropdown-toggle.bmd-btn-icon:hover { + background-color: #46a149 +} + +.bmd-btn-fab.btn-success.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-success.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-success.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-success.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-success.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-success.disabled.focus.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:disabled.focus:before, .btn-group-raised .btn-success.custom-file-control:disabled:focus:before, .btn-group-raised .btn-success.custom-file-control:disabled:hover:before, .btn-group-raised .btn-success.disabled.custom-file-control:focus:before, .btn-group-raised .btn-success.disabled.custom-file-control:hover:before, .btn-group-raised .btn-success.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-success.disabled.focus, .btn-group-raised .btn.btn-success.disabled:focus, .btn-group-raised .btn.btn-success.disabled:hover, .btn-group-raised .btn.btn-success:disabled.focus, .btn-group-raised .btn.btn-success:disabled:focus, .btn-group-raised .btn.btn-success:disabled:hover, .btn-raised.btn-success.custom-file-control:disabled.focus:before, .btn-raised.btn-success.custom-file-control:disabled:focus:before, .btn-raised.btn-success.custom-file-control:disabled:hover:before, .btn-raised.btn-success.disabled.custom-file-control:focus:before, .btn-raised.btn-success.disabled.custom-file-control:hover:before, .btn-raised.btn-success.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-success.disabled.focus, .btn.bmd-btn-fab.btn-success.disabled:focus, .btn.bmd-btn-fab.btn-success.disabled:hover, .btn.bmd-btn-fab.btn-success:disabled.focus, .btn.bmd-btn-fab.btn-success:disabled:focus, .btn.bmd-btn-fab.btn-success:disabled:hover, .btn.btn-raised.btn-success.disabled.focus, .btn.btn-raised.btn-success.disabled:focus, .btn.btn-raised.btn-success.disabled:hover, .btn.btn-raised.btn-success:disabled.focus, .btn.btn-raised.btn-success:disabled:focus, .btn.btn-raised.btn-success:disabled:hover { + background-color: #4caf50; + border-color: #4caf50 +} + +.bmd-btn-fab.btn-info.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:before, .btn-group-raised .btn.btn-info, .btn-raised.btn-info.custom-file-control:before, .btn.bmd-btn-fab.btn-info, .btn.btn-raised.btn-info { + color: #fff; + background-color: #03a9f4; + border-color: #03a9f4 +} + +.bmd-btn-fab.btn-info.active.custom-file-control:before, .bmd-btn-fab.btn-info.custom-file-control:active:before, .bmd-btn-fab.btn-info.custom-file-control:focus:before, .bmd-btn-fab.btn-info.custom-file-control:hover:before, .bmd-btn-fab.btn-info.focus.custom-file-control:before, .btn-group-raised .btn-info.active.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:active:before, .btn-group-raised .btn-info.custom-file-control:focus:before, .btn-group-raised .btn-info.custom-file-control:hover:before, .btn-group-raised .btn-info.focus.custom-file-control:before, .btn-group-raised .btn.btn-info.active, .btn-group-raised .btn.btn-info.focus, .btn-group-raised .btn.btn-info:active, .btn-group-raised .btn.btn-info:focus, .btn-group-raised .btn.btn-info:hover, .btn-raised.btn-info.active.custom-file-control:before, .btn-raised.btn-info.custom-file-control:active:before, .btn-raised.btn-info.custom-file-control:focus:before, .btn-raised.btn-info.custom-file-control:hover:before, .btn-raised.btn-info.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-info.active, .btn.bmd-btn-fab.btn-info.focus, .btn.bmd-btn-fab.btn-info:active, .btn.bmd-btn-fab.btn-info:focus, .btn.bmd-btn-fab.btn-info:hover, .btn.btn-raised.btn-info.active, .btn.btn-raised.btn-info.focus, .btn.btn-raised.btn-info:active, .btn.btn-raised.btn-info:focus, .btn.btn-raised.btn-info:hover, .open > .bmd-btn-fab.btn-info.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-info.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle, .open > .btn-raised.btn-info.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle, .open > .btn.btn-raised.btn-info.dropdown-toggle { + color: #fff; + background-color: #039be0; + border-color: #027fb8 +} + +.bmd-btn-fab.btn-info.active.custom-file-control:focus:before, .bmd-btn-fab.btn-info.active.custom-file-control:hover:before, .bmd-btn-fab.btn-info.active.focus.custom-file-control:before, .bmd-btn-fab.btn-info.custom-file-control:active.focus:before, .bmd-btn-fab.btn-info.custom-file-control:active:focus:before, .bmd-btn-fab.btn-info.custom-file-control:active:hover:before, .btn-group-raised .btn-info.active.custom-file-control:focus:before, .btn-group-raised .btn-info.active.custom-file-control:hover:before, .btn-group-raised .btn-info.active.focus.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:active.focus:before, .btn-group-raised .btn-info.custom-file-control:active:focus:before, .btn-group-raised .btn-info.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-info.active.focus, .btn-group-raised .btn.btn-info.active:focus, .btn-group-raised .btn.btn-info.active:hover, .btn-group-raised .btn.btn-info:active.focus, .btn-group-raised .btn.btn-info:active:focus, .btn-group-raised .btn.btn-info:active:hover, .btn-raised.btn-info.active.custom-file-control:focus:before, .btn-raised.btn-info.active.custom-file-control:hover:before, .btn-raised.btn-info.active.focus.custom-file-control:before, .btn-raised.btn-info.custom-file-control:active.focus:before, .btn-raised.btn-info.custom-file-control:active:focus:before, .btn-raised.btn-info.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-info.active.focus, .btn.bmd-btn-fab.btn-info.active:focus, .btn.bmd-btn-fab.btn-info.active:hover, .btn.bmd-btn-fab.btn-info:active.focus, .btn.bmd-btn-fab.btn-info:active:focus, .btn.bmd-btn-fab.btn-info:active:hover, .btn.btn-raised.btn-info.active.focus, .btn.btn-raised.btn-info.active:focus, .btn.btn-raised.btn-info.active:hover, .btn.btn-raised.btn-info:active.focus, .btn.btn-raised.btn-info:active:focus, .btn.btn-raised.btn-info:active:hover, .open > .bmd-btn-fab.btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-info.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-info.dropdown-toggle:hover, .open > .btn-raised.btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle:hover, .open > .btn.btn-raised.btn-info.dropdown-toggle.focus, .open > .btn.btn-raised.btn-info.dropdown-toggle:focus, .open > .btn.btn-raised.btn-info.dropdown-toggle:hover { + color: #fff; + background-color: #039be0; + border-color: #015276 +} + +.open > .bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-info.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #03a9f4 +} + +.open > .bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-info.dropdown-toggle.bmd-btn-icon:hover { + background-color: #039be0 +} + +.bmd-btn-fab.btn-info.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-info.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-info.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-info.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-info.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-info.disabled.focus.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:disabled.focus:before, .btn-group-raised .btn-info.custom-file-control:disabled:focus:before, .btn-group-raised .btn-info.custom-file-control:disabled:hover:before, .btn-group-raised .btn-info.disabled.custom-file-control:focus:before, .btn-group-raised .btn-info.disabled.custom-file-control:hover:before, .btn-group-raised .btn-info.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-info.disabled.focus, .btn-group-raised .btn.btn-info.disabled:focus, .btn-group-raised .btn.btn-info.disabled:hover, .btn-group-raised .btn.btn-info:disabled.focus, .btn-group-raised .btn.btn-info:disabled:focus, .btn-group-raised .btn.btn-info:disabled:hover, .btn-raised.btn-info.custom-file-control:disabled.focus:before, .btn-raised.btn-info.custom-file-control:disabled:focus:before, .btn-raised.btn-info.custom-file-control:disabled:hover:before, .btn-raised.btn-info.disabled.custom-file-control:focus:before, .btn-raised.btn-info.disabled.custom-file-control:hover:before, .btn-raised.btn-info.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-info.disabled.focus, .btn.bmd-btn-fab.btn-info.disabled:focus, .btn.bmd-btn-fab.btn-info.disabled:hover, .btn.bmd-btn-fab.btn-info:disabled.focus, .btn.bmd-btn-fab.btn-info:disabled:focus, .btn.bmd-btn-fab.btn-info:disabled:hover, .btn.btn-raised.btn-info.disabled.focus, .btn.btn-raised.btn-info.disabled:focus, .btn.btn-raised.btn-info.disabled:hover, .btn.btn-raised.btn-info:disabled.focus, .btn.btn-raised.btn-info:disabled:focus, .btn.btn-raised.btn-info:disabled:hover { + background-color: #03a9f4; + border-color: #03a9f4 +} + +.bmd-btn-fab.btn-warning.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:before, .btn-group-raised .btn.btn-warning, .btn-raised.btn-warning.custom-file-control:before, .btn.bmd-btn-fab.btn-warning, .btn.btn-raised.btn-warning { + color: #fff; + background-color: #ff5722; + border-color: #ff5722 +} + +.bmd-btn-fab.btn-warning.active.custom-file-control:before, .bmd-btn-fab.btn-warning.custom-file-control:active:before, .bmd-btn-fab.btn-warning.custom-file-control:focus:before, .bmd-btn-fab.btn-warning.custom-file-control:hover:before, .bmd-btn-fab.btn-warning.focus.custom-file-control:before, .btn-group-raised .btn-warning.active.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:active:before, .btn-group-raised .btn-warning.custom-file-control:focus:before, .btn-group-raised .btn-warning.custom-file-control:hover:before, .btn-group-raised .btn-warning.focus.custom-file-control:before, .btn-group-raised .btn.btn-warning.active, .btn-group-raised .btn.btn-warning.focus, .btn-group-raised .btn.btn-warning:active, .btn-group-raised .btn.btn-warning:focus, .btn-group-raised .btn.btn-warning:hover, .btn-raised.btn-warning.active.custom-file-control:before, .btn-raised.btn-warning.custom-file-control:active:before, .btn-raised.btn-warning.custom-file-control:focus:before, .btn-raised.btn-warning.custom-file-control:hover:before, .btn-raised.btn-warning.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-warning.active, .btn.bmd-btn-fab.btn-warning.focus, .btn.bmd-btn-fab.btn-warning:active, .btn.bmd-btn-fab.btn-warning:focus, .btn.bmd-btn-fab.btn-warning:hover, .btn.btn-raised.btn-warning.active, .btn.btn-raised.btn-warning.focus, .btn.btn-raised.btn-warning:active, .btn.btn-raised.btn-warning:focus, .btn.btn-raised.btn-warning:hover, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle, .open > .btn-raised.btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle, .open > .btn.btn-raised.btn-warning.dropdown-toggle { + color: #fff; + background-color: #ff470e; + border-color: #e43700 +} + +.bmd-btn-fab.btn-warning.active.custom-file-control:focus:before, .bmd-btn-fab.btn-warning.active.custom-file-control:hover:before, .bmd-btn-fab.btn-warning.active.focus.custom-file-control:before, .bmd-btn-fab.btn-warning.custom-file-control:active.focus:before, .bmd-btn-fab.btn-warning.custom-file-control:active:focus:before, .bmd-btn-fab.btn-warning.custom-file-control:active:hover:before, .btn-group-raised .btn-warning.active.custom-file-control:focus:before, .btn-group-raised .btn-warning.active.custom-file-control:hover:before, .btn-group-raised .btn-warning.active.focus.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:active.focus:before, .btn-group-raised .btn-warning.custom-file-control:active:focus:before, .btn-group-raised .btn-warning.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-warning.active.focus, .btn-group-raised .btn.btn-warning.active:focus, .btn-group-raised .btn.btn-warning.active:hover, .btn-group-raised .btn.btn-warning:active.focus, .btn-group-raised .btn.btn-warning:active:focus, .btn-group-raised .btn.btn-warning:active:hover, .btn-raised.btn-warning.active.custom-file-control:focus:before, .btn-raised.btn-warning.active.custom-file-control:hover:before, .btn-raised.btn-warning.active.focus.custom-file-control:before, .btn-raised.btn-warning.custom-file-control:active.focus:before, .btn-raised.btn-warning.custom-file-control:active:focus:before, .btn-raised.btn-warning.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-warning.active.focus, .btn.bmd-btn-fab.btn-warning.active:focus, .btn.bmd-btn-fab.btn-warning.active:hover, .btn.bmd-btn-fab.btn-warning:active.focus, .btn.bmd-btn-fab.btn-warning:active:focus, .btn.bmd-btn-fab.btn-warning:active:hover, .btn.btn-raised.btn-warning.active.focus, .btn.btn-raised.btn-warning.active:focus, .btn.btn-raised.btn-warning.active:hover, .btn.btn-raised.btn-warning:active.focus, .btn.btn-raised.btn-warning:active:focus, .btn.btn-raised.btn-warning:active:hover, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle:hover, .open > .btn-raised.btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle:hover, .open > .btn.btn-raised.btn-warning.dropdown-toggle.focus, .open > .btn.btn-raised.btn-warning.dropdown-toggle:focus, .open > .btn.btn-raised.btn-warning.dropdown-toggle:hover { + color: #fff; + background-color: #ff470e; + border-color: #a22700 +} + +.open > .bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #ff5722 +} + +.open > .bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon:hover { + background-color: #ff470e +} + +.bmd-btn-fab.btn-warning.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-warning.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-warning.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-warning.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-warning.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-warning.disabled.focus.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:disabled.focus:before, .btn-group-raised .btn-warning.custom-file-control:disabled:focus:before, .btn-group-raised .btn-warning.custom-file-control:disabled:hover:before, .btn-group-raised .btn-warning.disabled.custom-file-control:focus:before, .btn-group-raised .btn-warning.disabled.custom-file-control:hover:before, .btn-group-raised .btn-warning.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-warning.disabled.focus, .btn-group-raised .btn.btn-warning.disabled:focus, .btn-group-raised .btn.btn-warning.disabled:hover, .btn-group-raised .btn.btn-warning:disabled.focus, .btn-group-raised .btn.btn-warning:disabled:focus, .btn-group-raised .btn.btn-warning:disabled:hover, .btn-raised.btn-warning.custom-file-control:disabled.focus:before, .btn-raised.btn-warning.custom-file-control:disabled:focus:before, .btn-raised.btn-warning.custom-file-control:disabled:hover:before, .btn-raised.btn-warning.disabled.custom-file-control:focus:before, .btn-raised.btn-warning.disabled.custom-file-control:hover:before, .btn-raised.btn-warning.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-warning.disabled.focus, .btn.bmd-btn-fab.btn-warning.disabled:focus, .btn.bmd-btn-fab.btn-warning.disabled:hover, .btn.bmd-btn-fab.btn-warning:disabled.focus, .btn.bmd-btn-fab.btn-warning:disabled:focus, .btn.bmd-btn-fab.btn-warning:disabled:hover, .btn.btn-raised.btn-warning.disabled.focus, .btn.btn-raised.btn-warning.disabled:focus, .btn.btn-raised.btn-warning.disabled:hover, .btn.btn-raised.btn-warning:disabled.focus, .btn.btn-raised.btn-warning:disabled:focus, .btn.btn-raised.btn-warning:disabled:hover { + background-color: #ff5722; + border-color: #ff5722 +} + +.bmd-btn-fab.btn-danger.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:before, .btn-group-raised .btn.btn-danger, .btn-raised.btn-danger.custom-file-control:before, .btn.bmd-btn-fab.btn-danger, .btn.btn-raised.btn-danger { + color: #fff; + background-color: #f44336; + border-color: #f44336 +} + +.bmd-btn-fab.btn-danger.active.custom-file-control:before, .bmd-btn-fab.btn-danger.custom-file-control:active:before, .bmd-btn-fab.btn-danger.custom-file-control:focus:before, .bmd-btn-fab.btn-danger.custom-file-control:hover:before, .bmd-btn-fab.btn-danger.focus.custom-file-control:before, .btn-group-raised .btn-danger.active.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:active:before, .btn-group-raised .btn-danger.custom-file-control:focus:before, .btn-group-raised .btn-danger.custom-file-control:hover:before, .btn-group-raised .btn-danger.focus.custom-file-control:before, .btn-group-raised .btn.btn-danger.active, .btn-group-raised .btn.btn-danger.focus, .btn-group-raised .btn.btn-danger:active, .btn-group-raised .btn.btn-danger:focus, .btn-group-raised .btn.btn-danger:hover, .btn-raised.btn-danger.active.custom-file-control:before, .btn-raised.btn-danger.custom-file-control:active:before, .btn-raised.btn-danger.custom-file-control:focus:before, .btn-raised.btn-danger.custom-file-control:hover:before, .btn-raised.btn-danger.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-danger.active, .btn.bmd-btn-fab.btn-danger.focus, .btn.bmd-btn-fab.btn-danger:active, .btn.bmd-btn-fab.btn-danger:focus, .btn.bmd-btn-fab.btn-danger:hover, .btn.btn-raised.btn-danger.active, .btn.btn-raised.btn-danger.focus, .btn.btn-raised.btn-danger:active, .btn.btn-raised.btn-danger:focus, .btn.btn-raised.btn-danger:hover, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle, .open > .btn-raised.btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle, .open > .btn.btn-raised.btn-danger.dropdown-toggle { + color: #fff; + background-color: #f55549; + border-color: #e11b0c +} + +.bmd-btn-fab.btn-danger.active.custom-file-control:focus:before, .bmd-btn-fab.btn-danger.active.custom-file-control:hover:before, .bmd-btn-fab.btn-danger.active.focus.custom-file-control:before, .bmd-btn-fab.btn-danger.custom-file-control:active.focus:before, .bmd-btn-fab.btn-danger.custom-file-control:active:focus:before, .bmd-btn-fab.btn-danger.custom-file-control:active:hover:before, .btn-group-raised .btn-danger.active.custom-file-control:focus:before, .btn-group-raised .btn-danger.active.custom-file-control:hover:before, .btn-group-raised .btn-danger.active.focus.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:active.focus:before, .btn-group-raised .btn-danger.custom-file-control:active:focus:before, .btn-group-raised .btn-danger.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-danger.active.focus, .btn-group-raised .btn.btn-danger.active:focus, .btn-group-raised .btn.btn-danger.active:hover, .btn-group-raised .btn.btn-danger:active.focus, .btn-group-raised .btn.btn-danger:active:focus, .btn-group-raised .btn.btn-danger:active:hover, .btn-raised.btn-danger.active.custom-file-control:focus:before, .btn-raised.btn-danger.active.custom-file-control:hover:before, .btn-raised.btn-danger.active.focus.custom-file-control:before, .btn-raised.btn-danger.custom-file-control:active.focus:before, .btn-raised.btn-danger.custom-file-control:active:focus:before, .btn-raised.btn-danger.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-danger.active.focus, .btn.bmd-btn-fab.btn-danger.active:focus, .btn.bmd-btn-fab.btn-danger.active:hover, .btn.bmd-btn-fab.btn-danger:active.focus, .btn.bmd-btn-fab.btn-danger:active:focus, .btn.bmd-btn-fab.btn-danger:active:hover, .btn.btn-raised.btn-danger.active.focus, .btn.btn-raised.btn-danger.active:focus, .btn.btn-raised.btn-danger.active:hover, .btn.btn-raised.btn-danger:active.focus, .btn.btn-raised.btn-danger:active:focus, .btn.btn-raised.btn-danger:active:hover, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle:hover, .open > .btn-raised.btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle:hover, .open > .btn.btn-raised.btn-danger.dropdown-toggle.focus, .open > .btn.btn-raised.btn-danger.dropdown-toggle:focus, .open > .btn.btn-raised.btn-danger.dropdown-toggle:hover { + color: #fff; + background-color: #f55549; + border-color: #a21309 +} + +.open > .bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #f44336 +} + +.open > .bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon:hover { + background-color: #f55549 +} + +.bmd-btn-fab.btn-danger.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-danger.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-danger.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-danger.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-danger.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-danger.disabled.focus.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:disabled.focus:before, .btn-group-raised .btn-danger.custom-file-control:disabled:focus:before, .btn-group-raised .btn-danger.custom-file-control:disabled:hover:before, .btn-group-raised .btn-danger.disabled.custom-file-control:focus:before, .btn-group-raised .btn-danger.disabled.custom-file-control:hover:before, .btn-group-raised .btn-danger.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-danger.disabled.focus, .btn-group-raised .btn.btn-danger.disabled:focus, .btn-group-raised .btn.btn-danger.disabled:hover, .btn-group-raised .btn.btn-danger:disabled.focus, .btn-group-raised .btn.btn-danger:disabled:focus, .btn-group-raised .btn.btn-danger:disabled:hover, .btn-raised.btn-danger.custom-file-control:disabled.focus:before, .btn-raised.btn-danger.custom-file-control:disabled:focus:before, .btn-raised.btn-danger.custom-file-control:disabled:hover:before, .btn-raised.btn-danger.disabled.custom-file-control:focus:before, .btn-raised.btn-danger.disabled.custom-file-control:hover:before, .btn-raised.btn-danger.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-danger.disabled.focus, .btn.bmd-btn-fab.btn-danger.disabled:focus, .btn.bmd-btn-fab.btn-danger.disabled:hover, .btn.bmd-btn-fab.btn-danger:disabled.focus, .btn.bmd-btn-fab.btn-danger:disabled:focus, .btn.bmd-btn-fab.btn-danger:disabled:hover, .btn.btn-raised.btn-danger.disabled.focus, .btn.btn-raised.btn-danger.disabled:focus, .btn.btn-raised.btn-danger.disabled:hover, .btn.btn-raised.btn-danger:disabled.focus, .btn.btn-raised.btn-danger:disabled:focus, .btn.btn-raised.btn-danger:disabled:hover { + background-color: #f44336; + border-color: #f44336 +} + +.bmd-btn-fab.btn-light.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:before, .btn-group-raised .btn.btn-light, .btn-raised.btn-light.custom-file-control:before, .btn.bmd-btn-fab.btn-light, .btn.btn-raised.btn-light { + color: #fff; + background-color: #f5f5f5; + border-color: #f5f5f5 +} + +.bmd-btn-fab.btn-light.active.custom-file-control:before, .bmd-btn-fab.btn-light.custom-file-control:active:before, .bmd-btn-fab.btn-light.custom-file-control:focus:before, .bmd-btn-fab.btn-light.custom-file-control:hover:before, .bmd-btn-fab.btn-light.focus.custom-file-control:before, .btn-group-raised .btn-light.active.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:active:before, .btn-group-raised .btn-light.custom-file-control:focus:before, .btn-group-raised .btn-light.custom-file-control:hover:before, .btn-group-raised .btn-light.focus.custom-file-control:before, .btn-group-raised .btn.btn-light.active, .btn-group-raised .btn.btn-light.focus, .btn-group-raised .btn.btn-light:active, .btn-group-raised .btn.btn-light:focus, .btn-group-raised .btn.btn-light:hover, .btn-raised.btn-light.active.custom-file-control:before, .btn-raised.btn-light.custom-file-control:active:before, .btn-raised.btn-light.custom-file-control:focus:before, .btn-raised.btn-light.custom-file-control:hover:before, .btn-raised.btn-light.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-light.active, .btn.bmd-btn-fab.btn-light.focus, .btn.bmd-btn-fab.btn-light:active, .btn.bmd-btn-fab.btn-light:focus, .btn.bmd-btn-fab.btn-light:hover, .btn.btn-raised.btn-light.active, .btn.btn-raised.btn-light.focus, .btn.btn-raised.btn-light:active, .btn.btn-raised.btn-light:focus, .btn.btn-raised.btn-light:hover, .open > .bmd-btn-fab.btn-light.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-light.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle, .open > .btn-raised.btn-light.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle, .open > .btn.btn-raised.btn-light.dropdown-toggle { + color: #fff; + background-color: #ebebeb; + border-color: #d6d6d6 +} + +.bmd-btn-fab.btn-light.active.custom-file-control:focus:before, .bmd-btn-fab.btn-light.active.custom-file-control:hover:before, .bmd-btn-fab.btn-light.active.focus.custom-file-control:before, .bmd-btn-fab.btn-light.custom-file-control:active.focus:before, .bmd-btn-fab.btn-light.custom-file-control:active:focus:before, .bmd-btn-fab.btn-light.custom-file-control:active:hover:before, .btn-group-raised .btn-light.active.custom-file-control:focus:before, .btn-group-raised .btn-light.active.custom-file-control:hover:before, .btn-group-raised .btn-light.active.focus.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:active.focus:before, .btn-group-raised .btn-light.custom-file-control:active:focus:before, .btn-group-raised .btn-light.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-light.active.focus, .btn-group-raised .btn.btn-light.active:focus, .btn-group-raised .btn.btn-light.active:hover, .btn-group-raised .btn.btn-light:active.focus, .btn-group-raised .btn.btn-light:active:focus, .btn-group-raised .btn.btn-light:active:hover, .btn-raised.btn-light.active.custom-file-control:focus:before, .btn-raised.btn-light.active.custom-file-control:hover:before, .btn-raised.btn-light.active.focus.custom-file-control:before, .btn-raised.btn-light.custom-file-control:active.focus:before, .btn-raised.btn-light.custom-file-control:active:focus:before, .btn-raised.btn-light.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-light.active.focus, .btn.bmd-btn-fab.btn-light.active:focus, .btn.bmd-btn-fab.btn-light.active:hover, .btn.bmd-btn-fab.btn-light:active.focus, .btn.bmd-btn-fab.btn-light:active:focus, .btn.bmd-btn-fab.btn-light:active:hover, .btn.btn-raised.btn-light.active.focus, .btn.btn-raised.btn-light.active:focus, .btn.btn-raised.btn-light.active:hover, .btn.btn-raised.btn-light:active.focus, .btn.btn-raised.btn-light:active:focus, .btn.btn-raised.btn-light:active:hover, .open > .bmd-btn-fab.btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-light.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-light.dropdown-toggle:hover, .open > .btn-raised.btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle:hover, .open > .btn.btn-raised.btn-light.dropdown-toggle.focus, .open > .btn.btn-raised.btn-light.dropdown-toggle:focus, .open > .btn.btn-raised.btn-light.dropdown-toggle:hover { + color: #fff; + background-color: #ebebeb; + border-color: #b5b5b5 +} + +.open > .bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-light.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #f5f5f5 +} + +.open > .bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-light.dropdown-toggle.bmd-btn-icon:hover { + background-color: #ebebeb +} + +.bmd-btn-fab.btn-light.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-light.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-light.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-light.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-light.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-light.disabled.focus.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:disabled.focus:before, .btn-group-raised .btn-light.custom-file-control:disabled:focus:before, .btn-group-raised .btn-light.custom-file-control:disabled:hover:before, .btn-group-raised .btn-light.disabled.custom-file-control:focus:before, .btn-group-raised .btn-light.disabled.custom-file-control:hover:before, .btn-group-raised .btn-light.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-light.disabled.focus, .btn-group-raised .btn.btn-light.disabled:focus, .btn-group-raised .btn.btn-light.disabled:hover, .btn-group-raised .btn.btn-light:disabled.focus, .btn-group-raised .btn.btn-light:disabled:focus, .btn-group-raised .btn.btn-light:disabled:hover, .btn-raised.btn-light.custom-file-control:disabled.focus:before, .btn-raised.btn-light.custom-file-control:disabled:focus:before, .btn-raised.btn-light.custom-file-control:disabled:hover:before, .btn-raised.btn-light.disabled.custom-file-control:focus:before, .btn-raised.btn-light.disabled.custom-file-control:hover:before, .btn-raised.btn-light.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-light.disabled.focus, .btn.bmd-btn-fab.btn-light.disabled:focus, .btn.bmd-btn-fab.btn-light.disabled:hover, .btn.bmd-btn-fab.btn-light:disabled.focus, .btn.bmd-btn-fab.btn-light:disabled:focus, .btn.bmd-btn-fab.btn-light:disabled:hover, .btn.btn-raised.btn-light.disabled.focus, .btn.btn-raised.btn-light.disabled:focus, .btn.btn-raised.btn-light.disabled:hover, .btn.btn-raised.btn-light:disabled.focus, .btn.btn-raised.btn-light:disabled:focus, .btn.btn-raised.btn-light:disabled:hover { + background-color: #f5f5f5; + border-color: #f5f5f5 +} + +.bmd-btn-fab.btn-dark.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:before, .btn-group-raised .btn.btn-dark, .btn-raised.btn-dark.custom-file-control:before, .btn.bmd-btn-fab.btn-dark, .btn.btn-raised.btn-dark { + color: #fff; + background-color: #424242; + border-color: #424242 +} + +.bmd-btn-fab.btn-dark.active.custom-file-control:before, .bmd-btn-fab.btn-dark.custom-file-control:active:before, .bmd-btn-fab.btn-dark.custom-file-control:focus:before, .bmd-btn-fab.btn-dark.custom-file-control:hover:before, .bmd-btn-fab.btn-dark.focus.custom-file-control:before, .btn-group-raised .btn-dark.active.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:active:before, .btn-group-raised .btn-dark.custom-file-control:focus:before, .btn-group-raised .btn-dark.custom-file-control:hover:before, .btn-group-raised .btn-dark.focus.custom-file-control:before, .btn-group-raised .btn.btn-dark.active, .btn-group-raised .btn.btn-dark.focus, .btn-group-raised .btn.btn-dark:active, .btn-group-raised .btn.btn-dark:focus, .btn-group-raised .btn.btn-dark:hover, .btn-raised.btn-dark.active.custom-file-control:before, .btn-raised.btn-dark.custom-file-control:active:before, .btn-raised.btn-dark.custom-file-control:focus:before, .btn-raised.btn-dark.custom-file-control:hover:before, .btn-raised.btn-dark.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-dark.active, .btn.bmd-btn-fab.btn-dark.focus, .btn.bmd-btn-fab.btn-dark:active, .btn.bmd-btn-fab.btn-dark:focus, .btn.bmd-btn-fab.btn-dark:hover, .btn.btn-raised.btn-dark.active, .btn.btn-raised.btn-dark.focus, .btn.btn-raised.btn-dark:active, .btn.btn-raised.btn-dark:focus, .btn.btn-raised.btn-dark:hover, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle, .open > .btn-raised.btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle, .open > .btn.btn-raised.btn-dark.dropdown-toggle { + color: #fff; + background-color: #383838; + border-color: #232323 +} + +.bmd-btn-fab.btn-dark.active.custom-file-control:focus:before, .bmd-btn-fab.btn-dark.active.custom-file-control:hover:before, .bmd-btn-fab.btn-dark.active.focus.custom-file-control:before, .bmd-btn-fab.btn-dark.custom-file-control:active.focus:before, .bmd-btn-fab.btn-dark.custom-file-control:active:focus:before, .bmd-btn-fab.btn-dark.custom-file-control:active:hover:before, .btn-group-raised .btn-dark.active.custom-file-control:focus:before, .btn-group-raised .btn-dark.active.custom-file-control:hover:before, .btn-group-raised .btn-dark.active.focus.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:active.focus:before, .btn-group-raised .btn-dark.custom-file-control:active:focus:before, .btn-group-raised .btn-dark.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-dark.active.focus, .btn-group-raised .btn.btn-dark.active:focus, .btn-group-raised .btn.btn-dark.active:hover, .btn-group-raised .btn.btn-dark:active.focus, .btn-group-raised .btn.btn-dark:active:focus, .btn-group-raised .btn.btn-dark:active:hover, .btn-raised.btn-dark.active.custom-file-control:focus:before, .btn-raised.btn-dark.active.custom-file-control:hover:before, .btn-raised.btn-dark.active.focus.custom-file-control:before, .btn-raised.btn-dark.custom-file-control:active.focus:before, .btn-raised.btn-dark.custom-file-control:active:focus:before, .btn-raised.btn-dark.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-dark.active.focus, .btn.bmd-btn-fab.btn-dark.active:focus, .btn.bmd-btn-fab.btn-dark.active:hover, .btn.bmd-btn-fab.btn-dark:active.focus, .btn.bmd-btn-fab.btn-dark:active:focus, .btn.bmd-btn-fab.btn-dark:active:hover, .btn.btn-raised.btn-dark.active.focus, .btn.btn-raised.btn-dark.active:focus, .btn.btn-raised.btn-dark.active:hover, .btn.btn-raised.btn-dark:active.focus, .btn.btn-raised.btn-dark:active:focus, .btn.btn-raised.btn-dark:active:hover, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle:hover, .open > .btn-raised.btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle:hover, .open > .btn.btn-raised.btn-dark.dropdown-toggle.focus, .open > .btn.btn-raised.btn-dark.dropdown-toggle:focus, .open > .btn.btn-raised.btn-dark.dropdown-toggle:hover { + color: #fff; + background-color: #383838; + border-color: #020202 +} + +.open > .bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: #424242 +} + +.open > .bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon:hover { + background-color: #383838 +} + +.bmd-btn-fab.btn-dark.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-dark.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-dark.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-dark.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-dark.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-dark.disabled.focus.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:disabled.focus:before, .btn-group-raised .btn-dark.custom-file-control:disabled:focus:before, .btn-group-raised .btn-dark.custom-file-control:disabled:hover:before, .btn-group-raised .btn-dark.disabled.custom-file-control:focus:before, .btn-group-raised .btn-dark.disabled.custom-file-control:hover:before, .btn-group-raised .btn-dark.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-dark.disabled.focus, .btn-group-raised .btn.btn-dark.disabled:focus, .btn-group-raised .btn.btn-dark.disabled:hover, .btn-group-raised .btn.btn-dark:disabled.focus, .btn-group-raised .btn.btn-dark:disabled:focus, .btn-group-raised .btn.btn-dark:disabled:hover, .btn-raised.btn-dark.custom-file-control:disabled.focus:before, .btn-raised.btn-dark.custom-file-control:disabled:focus:before, .btn-raised.btn-dark.custom-file-control:disabled:hover:before, .btn-raised.btn-dark.disabled.custom-file-control:focus:before, .btn-raised.btn-dark.disabled.custom-file-control:hover:before, .btn-raised.btn-dark.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-dark.disabled.focus, .btn.bmd-btn-fab.btn-dark.disabled:focus, .btn.bmd-btn-fab.btn-dark.disabled:hover, .btn.bmd-btn-fab.btn-dark:disabled.focus, .btn.bmd-btn-fab.btn-dark:disabled:focus, .btn.bmd-btn-fab.btn-dark:disabled:hover, .btn.btn-raised.btn-dark.disabled.focus, .btn.btn-raised.btn-dark.disabled:focus, .btn.btn-raised.btn-dark.disabled:hover, .btn.btn-raised.btn-dark:disabled.focus, .btn.btn-raised.btn-dark:disabled:focus, .btn.btn-raised.btn-dark:disabled:hover { + background-color: #424242; + border-color: #424242 +} + +.bmd-btn-fab.custom-file-control:focus:before, .bmd-btn-fab.custom-file-control:hover:before, .btn-group-raised .btn:focus, .btn-group-raised .btn:hover, .btn-group-raised .custom-file-control:focus:before, .btn-group-raised .custom-file-control:hover:before, .btn-raised.custom-file-control:focus:before, .btn-raised.custom-file-control:hover:before, .btn.bmd-btn-fab:focus, .btn.bmd-btn-fab:hover, .btn.btn-raised:focus, .btn.btn-raised:hover { + z-index: 1; + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2) +} + +.bmd-btn-fab.active.custom-file-control:before, .bmd-btn-fab.custom-file-control:active:before, .btn-group-raised .active.custom-file-control:before, .btn-group-raised .btn.active, .btn-group-raised .btn:active, .btn-group-raised .custom-file-control:active:before, .btn-raised.active.custom-file-control:before, .btn-raised.custom-file-control:active:before, .btn.bmd-btn-fab.active, .btn.bmd-btn-fab:active, .btn.btn-raised.active, .btn.btn-raised:active { + z-index: 1; + box-shadow: 0 0 8px rgba(0, 0, 0, .18), 0 8px 16px rgba(0, 0, 0, .36) +} + +.bmd-btn-fab.custom-file-control:focus:before, .bmd-btn-fab.focus.custom-file-control:before, .btn-group-raised .btn.focus, .btn-group-raised .btn:focus, .btn-group-raised .custom-file-control:focus:before, .btn-group-raised .focus.custom-file-control:before, .btn-raised.custom-file-control:focus:before, .btn-raised.focus.custom-file-control:before, .btn.bmd-btn-fab.focus, .btn.bmd-btn-fab:focus, .btn.btn-raised.focus, .btn.btn-raised:focus { + outline: 0 +} + +.btn-group-raised .btn, .btn-group-raised .custom-file-control:before, .btn-raised.custom-file-control:before, .btn.btn-raised { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12) +} + +.btn-group-raised .btn-link.active.custom-file-control:before, .btn-group-raised .btn-link.custom-file-control:active:before, .btn-group-raised .btn-link.custom-file-control:before, .btn-group-raised .btn-link.custom-file-control:focus:before, .btn-group-raised .btn-link.custom-file-control:hover:before, .btn-group-raised .btn.btn-link, .btn-group-raised .btn.btn-link.active, .btn-group-raised .btn.btn-link:active, .btn-group-raised .btn.btn-link:focus, .btn-group-raised .btn.btn-link:hover, .btn-group-raised .btn.disabled, .btn-group-raised .btn:disabled, .btn-group-raised .btn[disabled], .btn-group-raised .custom-file-control:disabled:before, .btn-group-raised .disabled.custom-file-control:before, .btn-group-raised [disabled].custom-file-control:before, .btn-raised.btn-link.active.custom-file-control:before, .btn-raised.btn-link.custom-file-control:active:before, .btn-raised.btn-link.custom-file-control:before, .btn-raised.btn-link.custom-file-control:focus:before, .btn-raised.btn-link.custom-file-control:hover:before, .btn-raised.custom-file-control:disabled:before, .btn-raised.disabled.custom-file-control:before, .btn-raised[disabled].custom-file-control:before, .btn.btn-raised.btn-link, .btn.btn-raised.btn-link.active, .btn.btn-raised.btn-link:active, .btn.btn-raised.btn-link:focus, .btn.btn-raised.btn-link:hover, .btn.btn-raised.disabled, .btn.btn-raised:disabled, .btn.btn-raised[disabled], fieldset[disabled][disabled] .btn-group-raised .btn, fieldset[disabled][disabled] .btn-group-raised .custom-file-control:before, fieldset[disabled][disabled] .btn-raised.custom-file-control:before, fieldset[disabled][disabled] .btn.btn-raised { + box-shadow: none +} + +.btn-outline.custom-file-control:before, .btn.btn-outline { + border: 1px solid currentColor +} + +.btn-outline-primary.custom-file-control:before, .btn.btn-outline-primary { + border-color: currentColor; + color: #009688; + background-color: transparent; + border: 1px solid #009688 +} + +.btn-outline-primary.active.custom-file-control:before, .btn-outline-primary.custom-file-control:active:before, .btn-outline-primary.custom-file-control:focus:before, .btn-outline-primary.custom-file-control:hover:before, .btn-outline-primary.focus.custom-file-control:before, .btn.btn-outline-primary.active, .btn.btn-outline-primary.focus, .btn.btn-outline-primary:active, .btn.btn-outline-primary:focus, .btn.btn-outline-primary:hover, .open > .btn-outline-primary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-primary.dropdown-toggle { + color: #009688; + background-color: hsla(0, 0%, 60%, .2); + border-color: #009688 +} + +.btn-outline-primary.active.custom-file-control:focus:before, .btn-outline-primary.active.custom-file-control:hover:before, .btn-outline-primary.active.focus.custom-file-control:before, .btn-outline-primary.custom-file-control:active.focus:before, .btn-outline-primary.custom-file-control:active:focus:before, .btn-outline-primary.custom-file-control:active:hover:before, .btn.btn-outline-primary.active.focus, .btn.btn-outline-primary.active:focus, .btn.btn-outline-primary.active:hover, .btn.btn-outline-primary:active.focus, .btn.btn-outline-primary:active:focus, .btn.btn-outline-primary:active:hover, .open > .btn-outline-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-primary.dropdown-toggle.focus, .open > .btn.btn-outline-primary.dropdown-toggle:focus, .open > .btn.btn-outline-primary.dropdown-toggle:hover { + color: #009688; + background-color: hsla(0, 0%, 60%, .4); + border-color: #009688 +} + +.open > .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-primary.custom-file-control:disabled.focus:before, .btn-outline-primary.custom-file-control:disabled:focus:before, .btn-outline-primary.custom-file-control:disabled:hover:before, .btn-outline-primary.disabled.custom-file-control:focus:before, .btn-outline-primary.disabled.custom-file-control:hover:before, .btn-outline-primary.disabled.focus.custom-file-control:before, .btn.btn-outline-primary.disabled.focus, .btn.btn-outline-primary.disabled:focus, .btn.btn-outline-primary.disabled:hover, .btn.btn-outline-primary:disabled.focus, .btn.btn-outline-primary:disabled:focus, .btn.btn-outline-primary:disabled:hover { + background-color: transparent; + border-color: #009688 +} + +.bg-inverse .btn-outline-primary.custom-file-control:before, .bg-inverse .btn.btn-outline-primary { + color: #009688; + background-color: transparent; + border-color: #009688 +} + +.bg-inverse .btn-outline-primary.active.custom-file-control:before, .bg-inverse .btn-outline-primary.custom-file-control:active:before, .bg-inverse .btn-outline-primary.custom-file-control:focus:before, .bg-inverse .btn-outline-primary.custom-file-control:hover:before, .bg-inverse .btn-outline-primary.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-primary.active, .bg-inverse .btn.btn-outline-primary.focus, .bg-inverse .btn.btn-outline-primary:active, .bg-inverse .btn.btn-outline-primary:focus, .bg-inverse .btn.btn-outline-primary:hover, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle { + color: #009688; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-primary.active.custom-file-control:focus:before, .bg-inverse .btn-outline-primary.active.custom-file-control:hover:before, .bg-inverse .btn-outline-primary.active.focus.custom-file-control:before, .bg-inverse .btn-outline-primary.custom-file-control:active.focus:before, .bg-inverse .btn-outline-primary.custom-file-control:active:focus:before, .bg-inverse .btn-outline-primary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-primary.active.focus, .bg-inverse .btn.btn-outline-primary.active:focus, .bg-inverse .btn.btn-outline-primary.active:hover, .bg-inverse .btn.btn-outline-primary:active.focus, .bg-inverse .btn.btn-outline-primary:active:focus, .bg-inverse .btn.btn-outline-primary:active:hover, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle:hover { + color: #009688; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-primary.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-primary.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-primary.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-primary.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-primary.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-primary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-primary.disabled.focus, .bg-inverse .btn.btn-outline-primary.disabled:focus, .bg-inverse .btn.btn-outline-primary.disabled:hover, .bg-inverse .btn.btn-outline-primary:disabled.focus, .bg-inverse .btn.btn-outline-primary:disabled:focus, .bg-inverse .btn.btn-outline-primary:disabled:hover { + background-color: transparent; + border-color: #009688 +} + +.btn-outline-primary.btn-link.custom-file-control:before, .btn.btn-outline-primary.btn-link { + background-color: transparent +} + +.btn-outline-secondary.custom-file-control:before, .btn.btn-outline-secondary { + border-color: currentColor; + color: #6c757d; + background-color: transparent; + border: 1px solid #6c757d +} + +.btn-outline-secondary.active.custom-file-control:before, .btn-outline-secondary.custom-file-control:active:before, .btn-outline-secondary.custom-file-control:focus:before, .btn-outline-secondary.custom-file-control:hover:before, .btn-outline-secondary.focus.custom-file-control:before, .btn.btn-outline-secondary.active, .btn.btn-outline-secondary.focus, .btn.btn-outline-secondary:active, .btn.btn-outline-secondary:focus, .btn.btn-outline-secondary:hover, .open > .btn-outline-secondary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-secondary.dropdown-toggle { + color: #6c757d; + background-color: hsla(0, 0%, 60%, .2); + border-color: #6c757d +} + +.btn-outline-secondary.active.custom-file-control:focus:before, .btn-outline-secondary.active.custom-file-control:hover:before, .btn-outline-secondary.active.focus.custom-file-control:before, .btn-outline-secondary.custom-file-control:active.focus:before, .btn-outline-secondary.custom-file-control:active:focus:before, .btn-outline-secondary.custom-file-control:active:hover:before, .btn.btn-outline-secondary.active.focus, .btn.btn-outline-secondary.active:focus, .btn.btn-outline-secondary.active:hover, .btn.btn-outline-secondary:active.focus, .btn.btn-outline-secondary:active:focus, .btn.btn-outline-secondary:active:hover, .open > .btn-outline-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-secondary.dropdown-toggle.focus, .open > .btn.btn-outline-secondary.dropdown-toggle:focus, .open > .btn.btn-outline-secondary.dropdown-toggle:hover { + color: #6c757d; + background-color: hsla(0, 0%, 60%, .4); + border-color: #6c757d +} + +.open > .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-secondary.custom-file-control:disabled.focus:before, .btn-outline-secondary.custom-file-control:disabled:focus:before, .btn-outline-secondary.custom-file-control:disabled:hover:before, .btn-outline-secondary.disabled.custom-file-control:focus:before, .btn-outline-secondary.disabled.custom-file-control:hover:before, .btn-outline-secondary.disabled.focus.custom-file-control:before, .btn.btn-outline-secondary.disabled.focus, .btn.btn-outline-secondary.disabled:focus, .btn.btn-outline-secondary.disabled:hover, .btn.btn-outline-secondary:disabled.focus, .btn.btn-outline-secondary:disabled:focus, .btn.btn-outline-secondary:disabled:hover { + background-color: transparent; + border-color: #6c757d +} + +.bg-inverse .btn-outline-secondary.custom-file-control:before, .bg-inverse .btn.btn-outline-secondary { + color: #6c757d; + background-color: transparent; + border-color: #6c757d +} + +.bg-inverse .btn-outline-secondary.active.custom-file-control:before, .bg-inverse .btn-outline-secondary.custom-file-control:active:before, .bg-inverse .btn-outline-secondary.custom-file-control:focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:hover:before, .bg-inverse .btn-outline-secondary.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-secondary.active, .bg-inverse .btn.btn-outline-secondary.focus, .bg-inverse .btn.btn-outline-secondary:active, .bg-inverse .btn.btn-outline-secondary:focus, .bg-inverse .btn.btn-outline-secondary:hover, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle { + color: #6c757d; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-secondary.active.custom-file-control:focus:before, .bg-inverse .btn-outline-secondary.active.custom-file-control:hover:before, .bg-inverse .btn-outline-secondary.active.focus.custom-file-control:before, .bg-inverse .btn-outline-secondary.custom-file-control:active.focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:active:focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-secondary.active.focus, .bg-inverse .btn.btn-outline-secondary.active:focus, .bg-inverse .btn.btn-outline-secondary.active:hover, .bg-inverse .btn.btn-outline-secondary:active.focus, .bg-inverse .btn.btn-outline-secondary:active:focus, .bg-inverse .btn.btn-outline-secondary:active:hover, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle:hover { + color: #6c757d; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-secondary.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-secondary.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-secondary.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-secondary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-secondary.disabled.focus, .bg-inverse .btn.btn-outline-secondary.disabled:focus, .bg-inverse .btn.btn-outline-secondary.disabled:hover, .bg-inverse .btn.btn-outline-secondary:disabled.focus, .bg-inverse .btn.btn-outline-secondary:disabled:focus, .bg-inverse .btn.btn-outline-secondary:disabled:hover { + background-color: transparent; + border-color: #6c757d +} + +.btn-outline-secondary.btn-link.custom-file-control:before, .btn.btn-outline-secondary.btn-link { + background-color: transparent +} + +.btn-outline-success.custom-file-control:before, .btn.btn-outline-success { + border-color: currentColor; + color: #4caf50; + background-color: transparent; + border: 1px solid #4caf50 +} + +.btn-outline-success.active.custom-file-control:before, .btn-outline-success.custom-file-control:active:before, .btn-outline-success.custom-file-control:focus:before, .btn-outline-success.custom-file-control:hover:before, .btn-outline-success.focus.custom-file-control:before, .btn.btn-outline-success.active, .btn.btn-outline-success.focus, .btn.btn-outline-success:active, .btn.btn-outline-success:focus, .btn.btn-outline-success:hover, .open > .btn-outline-success.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-success.dropdown-toggle { + color: #4caf50; + background-color: hsla(0, 0%, 60%, .2); + border-color: #4caf50 +} + +.btn-outline-success.active.custom-file-control:focus:before, .btn-outline-success.active.custom-file-control:hover:before, .btn-outline-success.active.focus.custom-file-control:before, .btn-outline-success.custom-file-control:active.focus:before, .btn-outline-success.custom-file-control:active:focus:before, .btn-outline-success.custom-file-control:active:hover:before, .btn.btn-outline-success.active.focus, .btn.btn-outline-success.active:focus, .btn.btn-outline-success.active:hover, .btn.btn-outline-success:active.focus, .btn.btn-outline-success:active:focus, .btn.btn-outline-success:active:hover, .open > .btn-outline-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-success.dropdown-toggle.focus, .open > .btn.btn-outline-success.dropdown-toggle:focus, .open > .btn.btn-outline-success.dropdown-toggle:hover { + color: #4caf50; + background-color: hsla(0, 0%, 60%, .4); + border-color: #4caf50 +} + +.open > .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-success.custom-file-control:disabled.focus:before, .btn-outline-success.custom-file-control:disabled:focus:before, .btn-outline-success.custom-file-control:disabled:hover:before, .btn-outline-success.disabled.custom-file-control:focus:before, .btn-outline-success.disabled.custom-file-control:hover:before, .btn-outline-success.disabled.focus.custom-file-control:before, .btn.btn-outline-success.disabled.focus, .btn.btn-outline-success.disabled:focus, .btn.btn-outline-success.disabled:hover, .btn.btn-outline-success:disabled.focus, .btn.btn-outline-success:disabled:focus, .btn.btn-outline-success:disabled:hover { + background-color: transparent; + border-color: #4caf50 +} + +.bg-inverse .btn-outline-success.custom-file-control:before, .bg-inverse .btn.btn-outline-success { + color: #4caf50; + background-color: transparent; + border-color: #4caf50 +} + +.bg-inverse .btn-outline-success.active.custom-file-control:before, .bg-inverse .btn-outline-success.custom-file-control:active:before, .bg-inverse .btn-outline-success.custom-file-control:focus:before, .bg-inverse .btn-outline-success.custom-file-control:hover:before, .bg-inverse .btn-outline-success.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-success.active, .bg-inverse .btn.btn-outline-success.focus, .bg-inverse .btn.btn-outline-success:active, .bg-inverse .btn.btn-outline-success:focus, .bg-inverse .btn.btn-outline-success:hover, .open > .bg-inverse .btn-outline-success.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle { + color: #4caf50; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-success.active.custom-file-control:focus:before, .bg-inverse .btn-outline-success.active.custom-file-control:hover:before, .bg-inverse .btn-outline-success.active.focus.custom-file-control:before, .bg-inverse .btn-outline-success.custom-file-control:active.focus:before, .bg-inverse .btn-outline-success.custom-file-control:active:focus:before, .bg-inverse .btn-outline-success.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-success.active.focus, .bg-inverse .btn.btn-outline-success.active:focus, .bg-inverse .btn.btn-outline-success.active:hover, .bg-inverse .btn.btn-outline-success:active.focus, .bg-inverse .btn.btn-outline-success:active:focus, .bg-inverse .btn.btn-outline-success:active:hover, .open > .bg-inverse .btn-outline-success.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-success.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-success.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle:hover { + color: #4caf50; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-success.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-success.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-success.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-success.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-success.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-success.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-success.disabled.focus, .bg-inverse .btn.btn-outline-success.disabled:focus, .bg-inverse .btn.btn-outline-success.disabled:hover, .bg-inverse .btn.btn-outline-success:disabled.focus, .bg-inverse .btn.btn-outline-success:disabled:focus, .bg-inverse .btn.btn-outline-success:disabled:hover { + background-color: transparent; + border-color: #4caf50 +} + +.btn-outline-success.btn-link.custom-file-control:before, .btn.btn-outline-success.btn-link { + background-color: transparent +} + +.btn-outline-info.custom-file-control:before, .btn.btn-outline-info { + border-color: currentColor; + color: #03a9f4; + background-color: transparent; + border: 1px solid #03a9f4 +} + +.btn-outline-info.active.custom-file-control:before, .btn-outline-info.custom-file-control:active:before, .btn-outline-info.custom-file-control:focus:before, .btn-outline-info.custom-file-control:hover:before, .btn-outline-info.focus.custom-file-control:before, .btn.btn-outline-info.active, .btn.btn-outline-info.focus, .btn.btn-outline-info:active, .btn.btn-outline-info:focus, .btn.btn-outline-info:hover, .open > .btn-outline-info.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-info.dropdown-toggle { + color: #03a9f4; + background-color: hsla(0, 0%, 60%, .2); + border-color: #03a9f4 +} + +.btn-outline-info.active.custom-file-control:focus:before, .btn-outline-info.active.custom-file-control:hover:before, .btn-outline-info.active.focus.custom-file-control:before, .btn-outline-info.custom-file-control:active.focus:before, .btn-outline-info.custom-file-control:active:focus:before, .btn-outline-info.custom-file-control:active:hover:before, .btn.btn-outline-info.active.focus, .btn.btn-outline-info.active:focus, .btn.btn-outline-info.active:hover, .btn.btn-outline-info:active.focus, .btn.btn-outline-info:active:focus, .btn.btn-outline-info:active:hover, .open > .btn-outline-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-info.dropdown-toggle.focus, .open > .btn.btn-outline-info.dropdown-toggle:focus, .open > .btn.btn-outline-info.dropdown-toggle:hover { + color: #03a9f4; + background-color: hsla(0, 0%, 60%, .4); + border-color: #03a9f4 +} + +.open > .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-info.custom-file-control:disabled.focus:before, .btn-outline-info.custom-file-control:disabled:focus:before, .btn-outline-info.custom-file-control:disabled:hover:before, .btn-outline-info.disabled.custom-file-control:focus:before, .btn-outline-info.disabled.custom-file-control:hover:before, .btn-outline-info.disabled.focus.custom-file-control:before, .btn.btn-outline-info.disabled.focus, .btn.btn-outline-info.disabled:focus, .btn.btn-outline-info.disabled:hover, .btn.btn-outline-info:disabled.focus, .btn.btn-outline-info:disabled:focus, .btn.btn-outline-info:disabled:hover { + background-color: transparent; + border-color: #03a9f4 +} + +.bg-inverse .btn-outline-info.custom-file-control:before, .bg-inverse .btn.btn-outline-info { + color: #03a9f4; + background-color: transparent; + border-color: #03a9f4 +} + +.bg-inverse .btn-outline-info.active.custom-file-control:before, .bg-inverse .btn-outline-info.custom-file-control:active:before, .bg-inverse .btn-outline-info.custom-file-control:focus:before, .bg-inverse .btn-outline-info.custom-file-control:hover:before, .bg-inverse .btn-outline-info.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-info.active, .bg-inverse .btn.btn-outline-info.focus, .bg-inverse .btn.btn-outline-info:active, .bg-inverse .btn.btn-outline-info:focus, .bg-inverse .btn.btn-outline-info:hover, .open > .bg-inverse .btn-outline-info.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle { + color: #03a9f4; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-info.active.custom-file-control:focus:before, .bg-inverse .btn-outline-info.active.custom-file-control:hover:before, .bg-inverse .btn-outline-info.active.focus.custom-file-control:before, .bg-inverse .btn-outline-info.custom-file-control:active.focus:before, .bg-inverse .btn-outline-info.custom-file-control:active:focus:before, .bg-inverse .btn-outline-info.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-info.active.focus, .bg-inverse .btn.btn-outline-info.active:focus, .bg-inverse .btn.btn-outline-info.active:hover, .bg-inverse .btn.btn-outline-info:active.focus, .bg-inverse .btn.btn-outline-info:active:focus, .bg-inverse .btn.btn-outline-info:active:hover, .open > .bg-inverse .btn-outline-info.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-info.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-info.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle:hover { + color: #03a9f4; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-info.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-info.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-info.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-info.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-info.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-info.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-info.disabled.focus, .bg-inverse .btn.btn-outline-info.disabled:focus, .bg-inverse .btn.btn-outline-info.disabled:hover, .bg-inverse .btn.btn-outline-info:disabled.focus, .bg-inverse .btn.btn-outline-info:disabled:focus, .bg-inverse .btn.btn-outline-info:disabled:hover { + background-color: transparent; + border-color: #03a9f4 +} + +.btn-outline-info.btn-link.custom-file-control:before, .btn.btn-outline-info.btn-link { + background-color: transparent +} + +.btn-outline-warning.custom-file-control:before, .btn.btn-outline-warning { + border-color: currentColor; + color: #ff5722; + background-color: transparent; + border: 1px solid #ff5722 +} + +.btn-outline-warning.active.custom-file-control:before, .btn-outline-warning.custom-file-control:active:before, .btn-outline-warning.custom-file-control:focus:before, .btn-outline-warning.custom-file-control:hover:before, .btn-outline-warning.focus.custom-file-control:before, .btn.btn-outline-warning.active, .btn.btn-outline-warning.focus, .btn.btn-outline-warning:active, .btn.btn-outline-warning:focus, .btn.btn-outline-warning:hover, .open > .btn-outline-warning.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-warning.dropdown-toggle { + color: #ff5722; + background-color: hsla(0, 0%, 60%, .2); + border-color: #ff5722 +} + +.btn-outline-warning.active.custom-file-control:focus:before, .btn-outline-warning.active.custom-file-control:hover:before, .btn-outline-warning.active.focus.custom-file-control:before, .btn-outline-warning.custom-file-control:active.focus:before, .btn-outline-warning.custom-file-control:active:focus:before, .btn-outline-warning.custom-file-control:active:hover:before, .btn.btn-outline-warning.active.focus, .btn.btn-outline-warning.active:focus, .btn.btn-outline-warning.active:hover, .btn.btn-outline-warning:active.focus, .btn.btn-outline-warning:active:focus, .btn.btn-outline-warning:active:hover, .open > .btn-outline-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-warning.dropdown-toggle.focus, .open > .btn.btn-outline-warning.dropdown-toggle:focus, .open > .btn.btn-outline-warning.dropdown-toggle:hover { + color: #ff5722; + background-color: hsla(0, 0%, 60%, .4); + border-color: #ff5722 +} + +.open > .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-warning.custom-file-control:disabled.focus:before, .btn-outline-warning.custom-file-control:disabled:focus:before, .btn-outline-warning.custom-file-control:disabled:hover:before, .btn-outline-warning.disabled.custom-file-control:focus:before, .btn-outline-warning.disabled.custom-file-control:hover:before, .btn-outline-warning.disabled.focus.custom-file-control:before, .btn.btn-outline-warning.disabled.focus, .btn.btn-outline-warning.disabled:focus, .btn.btn-outline-warning.disabled:hover, .btn.btn-outline-warning:disabled.focus, .btn.btn-outline-warning:disabled:focus, .btn.btn-outline-warning:disabled:hover { + background-color: transparent; + border-color: #ff5722 +} + +.bg-inverse .btn-outline-warning.custom-file-control:before, .bg-inverse .btn.btn-outline-warning { + color: #ff5722; + background-color: transparent; + border-color: #ff5722 +} + +.bg-inverse .btn-outline-warning.active.custom-file-control:before, .bg-inverse .btn-outline-warning.custom-file-control:active:before, .bg-inverse .btn-outline-warning.custom-file-control:focus:before, .bg-inverse .btn-outline-warning.custom-file-control:hover:before, .bg-inverse .btn-outline-warning.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-warning.active, .bg-inverse .btn.btn-outline-warning.focus, .bg-inverse .btn.btn-outline-warning:active, .bg-inverse .btn.btn-outline-warning:focus, .bg-inverse .btn.btn-outline-warning:hover, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle { + color: #ff5722; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-warning.active.custom-file-control:focus:before, .bg-inverse .btn-outline-warning.active.custom-file-control:hover:before, .bg-inverse .btn-outline-warning.active.focus.custom-file-control:before, .bg-inverse .btn-outline-warning.custom-file-control:active.focus:before, .bg-inverse .btn-outline-warning.custom-file-control:active:focus:before, .bg-inverse .btn-outline-warning.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-warning.active.focus, .bg-inverse .btn.btn-outline-warning.active:focus, .bg-inverse .btn.btn-outline-warning.active:hover, .bg-inverse .btn.btn-outline-warning:active.focus, .bg-inverse .btn.btn-outline-warning:active:focus, .bg-inverse .btn.btn-outline-warning:active:hover, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle:hover { + color: #ff5722; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-warning.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-warning.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-warning.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-warning.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-warning.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-warning.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-warning.disabled.focus, .bg-inverse .btn.btn-outline-warning.disabled:focus, .bg-inverse .btn.btn-outline-warning.disabled:hover, .bg-inverse .btn.btn-outline-warning:disabled.focus, .bg-inverse .btn.btn-outline-warning:disabled:focus, .bg-inverse .btn.btn-outline-warning:disabled:hover { + background-color: transparent; + border-color: #ff5722 +} + +.btn-outline-warning.btn-link.custom-file-control:before, .btn.btn-outline-warning.btn-link { + background-color: transparent +} + +.btn-outline-danger.custom-file-control:before, .btn.btn-outline-danger { + border-color: currentColor; + color: #f44336; + background-color: transparent; + border: 1px solid #f44336 +} + +.btn-outline-danger.active.custom-file-control:before, .btn-outline-danger.custom-file-control:active:before, .btn-outline-danger.custom-file-control:focus:before, .btn-outline-danger.custom-file-control:hover:before, .btn-outline-danger.focus.custom-file-control:before, .btn.btn-outline-danger.active, .btn.btn-outline-danger.focus, .btn.btn-outline-danger:active, .btn.btn-outline-danger:focus, .btn.btn-outline-danger:hover, .open > .btn-outline-danger.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-danger.dropdown-toggle { + color: #f44336; + background-color: hsla(0, 0%, 60%, .2); + border-color: #f44336 +} + +.btn-outline-danger.active.custom-file-control:focus:before, .btn-outline-danger.active.custom-file-control:hover:before, .btn-outline-danger.active.focus.custom-file-control:before, .btn-outline-danger.custom-file-control:active.focus:before, .btn-outline-danger.custom-file-control:active:focus:before, .btn-outline-danger.custom-file-control:active:hover:before, .btn.btn-outline-danger.active.focus, .btn.btn-outline-danger.active:focus, .btn.btn-outline-danger.active:hover, .btn.btn-outline-danger:active.focus, .btn.btn-outline-danger:active:focus, .btn.btn-outline-danger:active:hover, .open > .btn-outline-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-danger.dropdown-toggle.focus, .open > .btn.btn-outline-danger.dropdown-toggle:focus, .open > .btn.btn-outline-danger.dropdown-toggle:hover { + color: #f44336; + background-color: hsla(0, 0%, 60%, .4); + border-color: #f44336 +} + +.open > .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-danger.custom-file-control:disabled.focus:before, .btn-outline-danger.custom-file-control:disabled:focus:before, .btn-outline-danger.custom-file-control:disabled:hover:before, .btn-outline-danger.disabled.custom-file-control:focus:before, .btn-outline-danger.disabled.custom-file-control:hover:before, .btn-outline-danger.disabled.focus.custom-file-control:before, .btn.btn-outline-danger.disabled.focus, .btn.btn-outline-danger.disabled:focus, .btn.btn-outline-danger.disabled:hover, .btn.btn-outline-danger:disabled.focus, .btn.btn-outline-danger:disabled:focus, .btn.btn-outline-danger:disabled:hover { + background-color: transparent; + border-color: #f44336 +} + +.bg-inverse .btn-outline-danger.custom-file-control:before, .bg-inverse .btn.btn-outline-danger { + color: #f44336; + background-color: transparent; + border-color: #f44336 +} + +.bg-inverse .btn-outline-danger.active.custom-file-control:before, .bg-inverse .btn-outline-danger.custom-file-control:active:before, .bg-inverse .btn-outline-danger.custom-file-control:focus:before, .bg-inverse .btn-outline-danger.custom-file-control:hover:before, .bg-inverse .btn-outline-danger.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-danger.active, .bg-inverse .btn.btn-outline-danger.focus, .bg-inverse .btn.btn-outline-danger:active, .bg-inverse .btn.btn-outline-danger:focus, .bg-inverse .btn.btn-outline-danger:hover, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle { + color: #f44336; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-danger.active.custom-file-control:focus:before, .bg-inverse .btn-outline-danger.active.custom-file-control:hover:before, .bg-inverse .btn-outline-danger.active.focus.custom-file-control:before, .bg-inverse .btn-outline-danger.custom-file-control:active.focus:before, .bg-inverse .btn-outline-danger.custom-file-control:active:focus:before, .bg-inverse .btn-outline-danger.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-danger.active.focus, .bg-inverse .btn.btn-outline-danger.active:focus, .bg-inverse .btn.btn-outline-danger.active:hover, .bg-inverse .btn.btn-outline-danger:active.focus, .bg-inverse .btn.btn-outline-danger:active:focus, .bg-inverse .btn.btn-outline-danger:active:hover, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle:hover { + color: #f44336; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-danger.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-danger.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-danger.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-danger.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-danger.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-danger.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-danger.disabled.focus, .bg-inverse .btn.btn-outline-danger.disabled:focus, .bg-inverse .btn.btn-outline-danger.disabled:hover, .bg-inverse .btn.btn-outline-danger:disabled.focus, .bg-inverse .btn.btn-outline-danger:disabled:focus, .bg-inverse .btn.btn-outline-danger:disabled:hover { + background-color: transparent; + border-color: #f44336 +} + +.btn-outline-danger.btn-link.custom-file-control:before, .btn.btn-outline-danger.btn-link { + background-color: transparent +} + +.btn-outline-light.custom-file-control:before, .btn.btn-outline-light { + border-color: currentColor; + color: #f5f5f5; + background-color: transparent; + border: 1px solid #f5f5f5 +} + +.btn-outline-light.active.custom-file-control:before, .btn-outline-light.custom-file-control:active:before, .btn-outline-light.custom-file-control:focus:before, .btn-outline-light.custom-file-control:hover:before, .btn-outline-light.focus.custom-file-control:before, .btn.btn-outline-light.active, .btn.btn-outline-light.focus, .btn.btn-outline-light:active, .btn.btn-outline-light:focus, .btn.btn-outline-light:hover, .open > .btn-outline-light.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-light.dropdown-toggle { + color: #f5f5f5; + background-color: hsla(0, 0%, 60%, .2); + border-color: #f5f5f5 +} + +.btn-outline-light.active.custom-file-control:focus:before, .btn-outline-light.active.custom-file-control:hover:before, .btn-outline-light.active.focus.custom-file-control:before, .btn-outline-light.custom-file-control:active.focus:before, .btn-outline-light.custom-file-control:active:focus:before, .btn-outline-light.custom-file-control:active:hover:before, .btn.btn-outline-light.active.focus, .btn.btn-outline-light.active:focus, .btn.btn-outline-light.active:hover, .btn.btn-outline-light:active.focus, .btn.btn-outline-light:active:focus, .btn.btn-outline-light:active:hover, .open > .btn-outline-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-light.dropdown-toggle.focus, .open > .btn.btn-outline-light.dropdown-toggle:focus, .open > .btn.btn-outline-light.dropdown-toggle:hover { + color: #f5f5f5; + background-color: hsla(0, 0%, 60%, .4); + border-color: #f5f5f5 +} + +.open > .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-light.custom-file-control:disabled.focus:before, .btn-outline-light.custom-file-control:disabled:focus:before, .btn-outline-light.custom-file-control:disabled:hover:before, .btn-outline-light.disabled.custom-file-control:focus:before, .btn-outline-light.disabled.custom-file-control:hover:before, .btn-outline-light.disabled.focus.custom-file-control:before, .btn.btn-outline-light.disabled.focus, .btn.btn-outline-light.disabled:focus, .btn.btn-outline-light.disabled:hover, .btn.btn-outline-light:disabled.focus, .btn.btn-outline-light:disabled:focus, .btn.btn-outline-light:disabled:hover { + background-color: transparent; + border-color: #f5f5f5 +} + +.bg-inverse .btn-outline-light.custom-file-control:before, .bg-inverse .btn.btn-outline-light { + color: #f5f5f5; + background-color: transparent; + border-color: #f5f5f5 +} + +.bg-inverse .btn-outline-light.active.custom-file-control:before, .bg-inverse .btn-outline-light.custom-file-control:active:before, .bg-inverse .btn-outline-light.custom-file-control:focus:before, .bg-inverse .btn-outline-light.custom-file-control:hover:before, .bg-inverse .btn-outline-light.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-light.active, .bg-inverse .btn.btn-outline-light.focus, .bg-inverse .btn.btn-outline-light:active, .bg-inverse .btn.btn-outline-light:focus, .bg-inverse .btn.btn-outline-light:hover, .open > .bg-inverse .btn-outline-light.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle { + color: #f5f5f5; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-light.active.custom-file-control:focus:before, .bg-inverse .btn-outline-light.active.custom-file-control:hover:before, .bg-inverse .btn-outline-light.active.focus.custom-file-control:before, .bg-inverse .btn-outline-light.custom-file-control:active.focus:before, .bg-inverse .btn-outline-light.custom-file-control:active:focus:before, .bg-inverse .btn-outline-light.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-light.active.focus, .bg-inverse .btn.btn-outline-light.active:focus, .bg-inverse .btn.btn-outline-light.active:hover, .bg-inverse .btn.btn-outline-light:active.focus, .bg-inverse .btn.btn-outline-light:active:focus, .bg-inverse .btn.btn-outline-light:active:hover, .open > .bg-inverse .btn-outline-light.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-light.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-light.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle:hover { + color: #f5f5f5; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-light.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-light.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-light.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-light.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-light.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-light.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-light.disabled.focus, .bg-inverse .btn.btn-outline-light.disabled:focus, .bg-inverse .btn.btn-outline-light.disabled:hover, .bg-inverse .btn.btn-outline-light:disabled.focus, .bg-inverse .btn.btn-outline-light:disabled:focus, .bg-inverse .btn.btn-outline-light:disabled:hover { + background-color: transparent; + border-color: #f5f5f5 +} + +.btn-outline-light.btn-link.custom-file-control:before, .btn.btn-outline-light.btn-link { + background-color: transparent +} + +.btn-outline-dark.custom-file-control:before, .btn.btn-outline-dark { + border-color: currentColor; + color: #424242; + background-color: transparent; + border: 1px solid #424242 +} + +.btn-outline-dark.active.custom-file-control:before, .btn-outline-dark.custom-file-control:active:before, .btn-outline-dark.custom-file-control:focus:before, .btn-outline-dark.custom-file-control:hover:before, .btn-outline-dark.focus.custom-file-control:before, .btn.btn-outline-dark.active, .btn.btn-outline-dark.focus, .btn.btn-outline-dark:active, .btn.btn-outline-dark:focus, .btn.btn-outline-dark:hover, .open > .btn-outline-dark.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-dark.dropdown-toggle { + color: #424242; + background-color: hsla(0, 0%, 60%, .2); + border-color: #424242 +} + +.btn-outline-dark.active.custom-file-control:focus:before, .btn-outline-dark.active.custom-file-control:hover:before, .btn-outline-dark.active.focus.custom-file-control:before, .btn-outline-dark.custom-file-control:active.focus:before, .btn-outline-dark.custom-file-control:active:focus:before, .btn-outline-dark.custom-file-control:active:hover:before, .btn.btn-outline-dark.active.focus, .btn.btn-outline-dark.active:focus, .btn.btn-outline-dark.active:hover, .btn.btn-outline-dark:active.focus, .btn.btn-outline-dark:active:focus, .btn.btn-outline-dark:active:hover, .open > .btn-outline-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-dark.dropdown-toggle.focus, .open > .btn.btn-outline-dark.dropdown-toggle:focus, .open > .btn.btn-outline-dark.dropdown-toggle:hover { + color: #424242; + background-color: hsla(0, 0%, 60%, .4); + border-color: #424242 +} + +.open > .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 60%, .2) +} + +.btn-outline-dark.custom-file-control:disabled.focus:before, .btn-outline-dark.custom-file-control:disabled:focus:before, .btn-outline-dark.custom-file-control:disabled:hover:before, .btn-outline-dark.disabled.custom-file-control:focus:before, .btn-outline-dark.disabled.custom-file-control:hover:before, .btn-outline-dark.disabled.focus.custom-file-control:before, .btn.btn-outline-dark.disabled.focus, .btn.btn-outline-dark.disabled:focus, .btn.btn-outline-dark.disabled:hover, .btn.btn-outline-dark:disabled.focus, .btn.btn-outline-dark:disabled:focus, .btn.btn-outline-dark:disabled:hover { + background-color: transparent; + border-color: #424242 +} + +.bg-inverse .btn-outline-dark.custom-file-control:before, .bg-inverse .btn.btn-outline-dark { + color: #424242; + background-color: transparent; + border-color: #424242 +} + +.bg-inverse .btn-outline-dark.active.custom-file-control:before, .bg-inverse .btn-outline-dark.custom-file-control:active:before, .bg-inverse .btn-outline-dark.custom-file-control:focus:before, .bg-inverse .btn-outline-dark.custom-file-control:hover:before, .bg-inverse .btn-outline-dark.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-dark.active, .bg-inverse .btn.btn-outline-dark.focus, .bg-inverse .btn.btn-outline-dark:active, .bg-inverse .btn.btn-outline-dark:focus, .bg-inverse .btn.btn-outline-dark:hover, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle { + color: #424242; + background-color: hsla(0, 0%, 80%, .15); + border-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-dark.active.custom-file-control:focus:before, .bg-inverse .btn-outline-dark.active.custom-file-control:hover:before, .bg-inverse .btn-outline-dark.active.focus.custom-file-control:before, .bg-inverse .btn-outline-dark.custom-file-control:active.focus:before, .bg-inverse .btn-outline-dark.custom-file-control:active:focus:before, .bg-inverse .btn-outline-dark.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-dark.active.focus, .bg-inverse .btn.btn-outline-dark.active:focus, .bg-inverse .btn.btn-outline-dark.active:hover, .bg-inverse .btn.btn-outline-dark:active.focus, .bg-inverse .btn.btn-outline-dark:active:focus, .bg-inverse .btn.btn-outline-dark:active:hover, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle:hover { + color: #424242; + background-color: hsla(0, 0%, 80%, .25); + border-color: hsla(0, 0%, 80%, .25) +} + +.open > .bg-inverse .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon { + color: inherit; + background-color: transparent +} + +.open > .bg-inverse .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon:hover { + background-color: hsla(0, 0%, 80%, .15) +} + +.bg-inverse .btn-outline-dark.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-dark.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-dark.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-dark.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-dark.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-dark.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-dark.disabled.focus, .bg-inverse .btn.btn-outline-dark.disabled:focus, .bg-inverse .btn.btn-outline-dark.disabled:hover, .bg-inverse .btn.btn-outline-dark:disabled.focus, .bg-inverse .btn.btn-outline-dark:disabled:focus, .bg-inverse .btn.btn-outline-dark:disabled:hover { + background-color: transparent; + border-color: #424242 +} + +.btn-outline-dark.btn-link.custom-file-control:before, .btn.btn-outline-dark.btn-link { + background-color: transparent +} + +.bmd-btn-fab.custom-file-control:before, .bmd-btn-icon.custom-file-control:before, .btn.bmd-btn-fab, .btn.bmd-btn-icon { + overflow: hidden; + font-size: 1.5rem; + line-height: 0 +} + +.bmd-btn-fab.custom-file-control:before, .bmd-btn-icon.custom-file-control:before, .btn-group-lg .bmd-btn-fab.custom-file-control:before, .btn-group-lg .bmd-btn-icon.custom-file-control:before, .btn-group-lg .btn.bmd-btn-fab, .btn-group-lg .btn.bmd-btn-icon, .btn-group-sm .bmd-btn-fab.custom-file-control:before, .btn-group-sm .bmd-btn-icon.custom-file-control:before, .btn-group-sm .btn.bmd-btn-fab, .btn-group-sm .btn.bmd-btn-icon, .btn.bmd-btn-fab, .btn.bmd-btn-icon { + padding: 0; + border-radius: 50%; + line-height: 0 +} + +.bmd-btn-fab.custom-file-control:before .material-icons, .bmd-btn-icon.custom-file-control:before .material-icons, .btn.bmd-btn-fab .material-icons, .btn.bmd-btn-icon .material-icons { + position: absolute; + top: 50%; + left: 50%; + width: 1.5rem; + line-height: 1.5rem; + transform: translate(-.75rem, -.75rem) +} + +.bmd-btn-fab.custom-file-control:before, .btn.bmd-btn-fab { + width: 3.5rem; + min-width: 3.5rem; + height: 3.5rem; + box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, .12), 0 1px 1px 0 rgba(0, 0, 0, .26) +} + +.bmd-btn-fab.custom-file-control:before .ripple-container, .btn.bmd-btn-fab .ripple-container { + border-radius: 50% +} + +.bmd-btn-fab.bmd-btn-fab-sm.custom-file-control:before, .btn-group-sm .bmd-btn-fab.custom-file-control:before, .btn-group-sm .btn.bmd-btn-fab, .btn.bmd-btn-fab.bmd-btn-fab-sm { + width: 2.5rem; + min-width: 2.5rem; + height: 2.5rem +} + +.bmd-btn-icon.custom-file-control:before, .btn.bmd-btn-icon { + width: 2rem; + min-width: 2rem; + height: 2rem; + margin: 0; + color: inherit; + line-height: 0 +} + +.bmd-btn-icon.bmd-btn-icon-sm.custom-file-control:before, .btn-group-sm .bmd-btn-icon.custom-file-control:before, .btn-group-sm .btn.bmd-btn-icon, .btn.bmd-btn-icon.bmd-btn-icon-sm { + width: 1.5rem; + min-width: 1.5rem; + height: 1.5rem; + font-size: 1.125rem +} + +.bmd-btn-icon.bmd-btn-icon-sm.custom-file-control:before .material-icons, .btn-group-sm .bmd-btn-icon.custom-file-control:before .material-icons, .btn-group-sm .btn.bmd-btn-icon .material-icons, .btn.bmd-btn-icon.bmd-btn-icon-sm .material-icons { + width: 1.125rem; + font-size: 1.125rem; + line-height: 1; + vertical-align: middle; + transform: translate(-.5625rem, -.5625rem) +} + +.btn .material-icons, .custom-file-control:before .material-icons { + position: relative; + display: inline-block; + top: .25em; + margin-top: -1em; + margin-bottom: -1em; + font-size: 1.5em; + vertical-align: middle +} + +.btn-group-lg .btn, .btn-group-lg .custom-file-control:before, .btn-group-lg > .btn, .btn-group-lg > .custom-file-control:before, .btn-lg.custom-file-control:before, .btn.btn-lg { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.btn-group-sm .btn, .btn-group-sm .custom-file-control:before, .btn-group-sm > .btn, .btn-group-sm > .custom-file-control:before, .btn-sm.custom-file-control:before, .btn.btn-sm { + padding: .40625rem .5rem; + line-height: 1.5; + border-radius: .0625rem; + font-size: .8125rem +} + +.btn-group-vertical.disabled, .btn-group-vertical:disabled, .btn-group-vertical[disabled], .btn-group.disabled, .btn-group:disabled, .btn-group[disabled], .btn.disabled, .btn:disabled, .btn[disabled], .custom-file-control:disabled:before, .disabled.custom-file-control:before, .input-group-btn .btn.disabled, .input-group-btn .btn:disabled, .input-group-btn .btn[disabled], .input-group-btn .custom-file-control:disabled:before, .input-group-btn .disabled.custom-file-control:before, .input-group-btn [disabled].custom-file-control:before, [disabled].custom-file-control:before, fieldset[disabled][disabled] .btn, fieldset[disabled][disabled] .btn-group, fieldset[disabled][disabled] .btn-group-vertical, fieldset[disabled][disabled] .custom-file-control:before, fieldset[disabled][disabled] .input-group-btn .btn, fieldset[disabled][disabled] .input-group-btn .custom-file-control:before { + color: rgba(0, 0, 0, .26) +} + +.bg-inverse .btn-group-vertical.disabled, .bg-inverse .btn-group-vertical:disabled, .bg-inverse .btn-group-vertical[disabled], .bg-inverse .btn-group.disabled, .bg-inverse .btn-group:disabled, .bg-inverse .btn-group[disabled], .bg-inverse .btn.disabled, .bg-inverse .btn:disabled, .bg-inverse .btn[disabled], .bg-inverse .custom-file-control:disabled:before, .bg-inverse .disabled.custom-file-control:before, .bg-inverse .input-group-btn .btn.disabled, .bg-inverse .input-group-btn .btn:disabled, .bg-inverse .input-group-btn .btn[disabled], .bg-inverse .input-group-btn .custom-file-control:disabled:before, .bg-inverse .input-group-btn .disabled.custom-file-control:before, .bg-inverse .input-group-btn [disabled].custom-file-control:before, .bg-inverse [disabled].custom-file-control:before, .bg-inverse fieldset[disabled][disabled] .btn, .bg-inverse fieldset[disabled][disabled] .btn-group, .bg-inverse fieldset[disabled][disabled] .btn-group-vertical, .bg-inverse fieldset[disabled][disabled] .custom-file-control:before, .bg-inverse fieldset[disabled][disabled] .input-group-btn .btn, .bg-inverse fieldset[disabled][disabled] .input-group-btn .custom-file-control:before { + color: hsla(0, 0%, 100%, .3) +} + +.btn-group-vertical.disabled, .btn-group-vertical.disabled:focus, .btn-group-vertical.disabled:hover, .btn-group-vertical:disabled, .btn-group-vertical:disabled:focus, .btn-group-vertical:disabled:hover, .btn-group-vertical[disabled], .btn-group-vertical[disabled]:focus, .btn-group-vertical[disabled]:hover, .btn-group.disabled, .btn-group.disabled:focus, .btn-group.disabled:hover, .btn-group:disabled, .btn-group:disabled:focus, .btn-group:disabled:hover, .btn-group[disabled], .btn-group[disabled]:focus, .btn-group[disabled]:hover, .btn.disabled, .btn.disabled:focus, .btn.disabled:hover, .btn:disabled, .btn:disabled:focus, .btn:disabled:hover, .btn[disabled], .btn[disabled]:focus, .btn[disabled]:hover, .custom-file-control:disabled:before, .custom-file-control:disabled:focus:before, .custom-file-control:disabled:hover:before, .disabled.custom-file-control:before, .disabled.custom-file-control:focus:before, .disabled.custom-file-control:hover:before, .input-group-btn .btn.disabled, .input-group-btn .btn.disabled:focus, .input-group-btn .btn.disabled:hover, .input-group-btn .btn:disabled, .input-group-btn .btn:disabled:focus, .input-group-btn .btn:disabled:hover, .input-group-btn .btn[disabled], .input-group-btn .btn[disabled]:focus, .input-group-btn .btn[disabled]:hover, .input-group-btn .custom-file-control:disabled:before, .input-group-btn .custom-file-control:disabled:focus:before, .input-group-btn .custom-file-control:disabled:hover:before, .input-group-btn .disabled.custom-file-control:before, .input-group-btn .disabled.custom-file-control:focus:before, .input-group-btn .disabled.custom-file-control:hover:before, .input-group-btn [disabled].custom-file-control:before, .input-group-btn [disabled].custom-file-control:focus:before, .input-group-btn [disabled].custom-file-control:hover:before, [disabled].custom-file-control:before, [disabled].custom-file-control:focus:before, [disabled].custom-file-control:hover:before, fieldset[disabled][disabled] .btn, fieldset[disabled][disabled] .btn-group, fieldset[disabled][disabled] .btn-group-vertical, fieldset[disabled][disabled] .btn-group-vertical:focus, fieldset[disabled][disabled] .btn-group-vertical:hover, fieldset[disabled][disabled] .btn-group:focus, fieldset[disabled][disabled] .btn-group:hover, fieldset[disabled][disabled] .btn:focus, fieldset[disabled][disabled] .btn:hover, fieldset[disabled][disabled] .custom-file-control:before, fieldset[disabled][disabled] .custom-file-control:focus:before, fieldset[disabled][disabled] .custom-file-control:hover:before, fieldset[disabled][disabled] .input-group-btn .btn, fieldset[disabled][disabled] .input-group-btn .btn:focus, fieldset[disabled][disabled] .input-group-btn .btn:hover, fieldset[disabled][disabled] .input-group-btn .custom-file-control:before, fieldset[disabled][disabled] .input-group-btn .custom-file-control:focus:before, fieldset[disabled][disabled] .input-group-btn .custom-file-control:hover:before { + background: transparent +} + +.btn-group, .btn-group-vertical { + position: relative; + margin: 10px 1px +} + +.btn-group-vertical .dropdown-menu, .btn-group .dropdown-menu { + border-radius: 0 0 .125rem .125rem +} + +.btn-group-vertical.btn-group-raised, .btn-group.btn-group-raised { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12) +} + +.btn-group-vertical .btn, .btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .custom-file-control:before, .btn-group-vertical .btn-group, .btn-group-vertical .btn:active, .btn-group-vertical .custom-file-control:active:before, .btn-group-vertical .custom-file-control:before, .btn-group-vertical .custom-file-control:before + .btn, .btn-group-vertical .custom-file-control:before + .custom-file-control:before, .btn-group-vertical > .btn-group, .btn-group .btn, .btn-group .btn + .btn, .btn-group .btn + .custom-file-control:before, .btn-group .btn-group, .btn-group .btn:active, .btn-group .custom-file-control:active:before, .btn-group .custom-file-control:before, .btn-group .custom-file-control:before + .btn, .btn-group .custom-file-control:before + .custom-file-control:before, .btn-group > .btn-group { + margin: 0 +} + +.checkbox label, label.checkbox-inline { + position: relative; + padding-left: 1.5625rem +} + +.checkbox label .checkbox-decorator, label.checkbox-inline .checkbox-decorator { + position: absolute; + left: 0; + padding: .7em; + margin: -.7em; + line-height: .7; + vertical-align: middle; + cursor: pointer; + border-radius: 100% +} + +.checkbox label .checkbox-decorator .check, label.checkbox-inline .checkbox-decorator .check { + position: relative; + z-index: 1; + display: inline-block; + width: 1.25rem; + height: 1.25rem; + overflow: hidden; + border: .125rem solid rgba(0, 0, 0, .54); + border-radius: .125rem +} + +.checkbox label .checkbox-decorator .check:before, label.checkbox-inline .checkbox-decorator .check:before { + position: absolute; + display: block; + width: 0; + height: 0; + margin-top: -4px; + margin-left: 6px; + color: #757575; + content: ""; + box-shadow: 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, inset 0 0 0 0; + transform: rotate(45deg); + animation: c +} + +.is-focused .checkbox label .checkbox-decorator .check:before, .is-focused label.checkbox-inline .checkbox-decorator .check:before { + animation: c .3s forwards +} + +.checkbox label input[type=checkbox], label.checkbox-inline input[type=checkbox] { + position: absolute; + left: 0; + z-index: -1; + width: 0; + height: 0; + margin: 0; + overflow: hidden; + pointer-events: none; + opacity: 0 +} + +.checkbox label input[type=checkbox]:focus + .checkbox-decorator .check:after, label.checkbox-inline input[type=checkbox]:focus + .checkbox-decorator .check:after { + opacity: .2 +} + +.checkbox label input[type=checkbox]:checked + .checkbox-decorator .check, label.checkbox-inline input[type=checkbox]:checked + .checkbox-decorator .check { + color: #009688; + border-color: #009688 +} + +.checkbox label input[type=checkbox]:checked + .checkbox-decorator .check:before, label.checkbox-inline input[type=checkbox]:checked + .checkbox-decorator .check:before { + color: #009688; + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px; + animation: b .3s forwards +} + +.checkbox label input[type=checkbox][disabled] + .checkbox-decorator .check:after, .checkbox label input[type=checkbox][disabled] .check:after, fieldset[disabled] .checkbox label input[type=checkbox] + .checkbox-decorator .check:after, fieldset[disabled] .checkbox label input[type=checkbox] .check:after, fieldset[disabled] label.checkbox-inline input[type=checkbox] + .checkbox-decorator .check:after, fieldset[disabled] label.checkbox-inline input[type=checkbox] .check:after, label.checkbox-inline input[type=checkbox][disabled] + .checkbox-decorator .check:after, label.checkbox-inline input[type=checkbox][disabled] .check:after { + background-color: rgba(0, 0, 0, .87); + transform: rotate(-45deg) +} + +.checkbox label input[type=checkbox][disabled] + .checkbox-decorator .check, .checkbox label input[type=checkbox][disabled] .check, fieldset[disabled] .checkbox label input[type=checkbox] + .checkbox-decorator .check, fieldset[disabled] .checkbox label input[type=checkbox] .check, fieldset[disabled] label.checkbox-inline input[type=checkbox] + .checkbox-decorator .check, fieldset[disabled] label.checkbox-inline input[type=checkbox] .check, label.checkbox-inline input[type=checkbox][disabled] + .checkbox-decorator .check, label.checkbox-inline input[type=checkbox][disabled] .check { + border-color: rgba(0, 0, 0, .26) +} + +.checkbox label input[type=checkbox][disabled] + .checkbox-decorator .ripple-container, fieldset[disabled] .checkbox label input[type=checkbox] + .checkbox-decorator .ripple-container, fieldset[disabled] label.checkbox-inline input[type=checkbox] + .checkbox-decorator .ripple-container, label.checkbox-inline input[type=checkbox][disabled] + .checkbox-decorator .ripple-container { + display: none +} + +@keyframes b { + 0% { + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px + } + 50% { + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px + } + to { + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px + } +} + +@keyframes c { + 0% { + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, inset 0 0 0 0 + } + 25% { + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, inset 0 0 0 0 + } + 50% { + width: 0; + height: 0; + margin-top: -4px; + margin-left: 6px; + box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, inset 0 0 0 0; + transform: rotate(45deg) + } + 51% { + width: 20px; + height: 20px; + margin-top: -2px; + margin-left: -2px; + box-shadow: 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, inset 0 0 0 10px; + transform: rotate(0deg) + } + to { + width: 20px; + height: 20px; + margin-top: -2px; + margin-left: -2px; + box-shadow: 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, inset 0 0 0 0; + transform: rotate(0deg) + } +} + +.custom-file-control [class*=" bmd-label"], .custom-file-control [class^=bmd-label] { + color: rgba(0, 0, 0, .26) +} + +.custom-file-control .custom-file-control, .custom-file-control .form-control, .is-focused .custom-file-control .custom-file-control, .is-focused .custom-file-control .form-control { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.custom-file-control .custom-file-control:invalid, .custom-file-control .form-control:invalid { + background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.custom-file-control .custom-file-control:read-only, .custom-file-control .form-control:read-only { + background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.custom-file-control .custom-file-control:disabled, .custom-file-control .disabled.custom-file-control, .custom-file-control .form-control.disabled, .custom-file-control .form-control:disabled, .custom-file-control .form-control[disabled], .custom-file-control [disabled].custom-file-control, fieldset[disabled][disabled] .custom-file-control .custom-file-control, fieldset[disabled][disabled] .custom-file-control .form-control { + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent); + background-repeat: repeat-x; + background-size: 3px 1px +} + +.custom-file-control .form-control-success.custom-file-control, .custom-file-control .form-control.form-control-success, .is-focused .custom-file-control .form-control-success.custom-file-control, .is-focused .custom-file-control .form-control.form-control-success { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==" +} + +.custom-file-control .form-control-warning.custom-file-control, .custom-file-control .form-control.form-control-warning, .is-focused .custom-file-control .form-control-warning.custom-file-control, .is-focused .custom-file-control .form-control.form-control-warning { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+" +} + +.custom-file-control .form-control-danger.custom-file-control, .custom-file-control .form-control.form-control-danger, .is-focused .custom-file-control .form-control-danger.custom-file-control, .is-focused .custom-file-control .form-control.form-control-danger { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=" +} + +.custom-file-control.is-focused .valid-feedback, .custom-file-control .is-focused .valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .valid-tooltip, .custom-file-control .is-focused .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(0, 0, 0, .8); + border-radius: .2rem +} + +.custom-file-control.is-focused .custom-select.is-valid, .custom-file-control .is-focused .custom-select.is-valid, .custom-file-control.is-focused .form-control.is-valid, .custom-file-control .is-focused .form-control.is-valid, .custom-file-control.is-focused .is-valid.custom-file-control, .custom-file-control .is-focused .is-valid.custom-file-control, .was-validated .custom-file-control.is-focused .custom-file-control:valid, .was-validated .custom-file-control .is-focused .custom-file-control:valid, .was-validated .custom-file-control.is-focused .custom-select:valid, .was-validated .custom-file-control .is-focused .custom-select:valid, .was-validated .custom-file-control.is-focused .form-control:valid, .was-validated .custom-file-control .is-focused .form-control:valid { + border-color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .custom-select.is-valid:focus, .custom-file-control .is-focused .custom-select.is-valid:focus, .custom-file-control.is-focused .form-control.is-valid:focus, .custom-file-control .is-focused .form-control.is-valid:focus, .custom-file-control.is-focused .is-valid.custom-file-control:focus, .custom-file-control .is-focused .is-valid.custom-file-control:focus, .was-validated .custom-file-control.is-focused .custom-file-control:valid:focus, .was-validated .custom-file-control .is-focused .custom-file-control:valid:focus, .was-validated .custom-file-control.is-focused .custom-select:valid:focus, .was-validated .custom-file-control .is-focused .custom-select:valid:focus, .was-validated .custom-file-control.is-focused .form-control:valid:focus, .was-validated .custom-file-control .is-focused .form-control:valid:focus { + border-color: rgba(0, 0, 0, .26); + box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25) +} + +.custom-file-control.is-focused .custom-select.is-valid ~ .valid-feedback, .custom-file-control .is-focused .custom-select.is-valid ~ .valid-feedback, .custom-file-control.is-focused .custom-select.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .custom-select.is-valid ~ .valid-tooltip, .custom-file-control.is-focused .form-control.is-valid ~ .valid-feedback, .custom-file-control .is-focused .form-control.is-valid ~ .valid-feedback, .custom-file-control.is-focused .form-control.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .form-control.is-valid ~ .valid-tooltip, .custom-file-control.is-focused .is-valid.custom-file-control ~ .valid-feedback, .custom-file-control .is-focused .is-valid.custom-file-control ~ .valid-feedback, .custom-file-control.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .custom-file-control .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .form-control:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .form-control:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .form-control:valid ~ .valid-tooltip { + display: block +} + +.custom-file-control.is-focused .form-check-input.is-valid ~ .form-check-label, .custom-file-control .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .custom-file-control.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .custom-file-control .is-focused .form-check-input:valid ~ .form-check-label { + color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .form-check-input.is-valid ~ .valid-feedback, .custom-file-control .is-focused .form-check-input.is-valid ~ .valid-feedback, .custom-file-control.is-focused .form-check-input.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.custom-file-control.is-focused .custom-control-input.is-valid ~ .custom-control-label, .custom-file-control .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .custom-control-label { + color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .custom-file-control .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .custom-control-label:before { + background-color: rgba(64, 64, 64, .26) +} + +.custom-file-control.is-focused .custom-control-input.is-valid ~ .valid-feedback, .custom-file-control .is-focused .custom-control-input.is-valid ~ .valid-feedback, .custom-file-control.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.custom-file-control.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .custom-file-control .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .custom-file-control.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .custom-file-control .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: rgba(26, 26, 26, .26) +} + +.custom-file-control.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .custom-file-control .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .custom-file-control.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .custom-file-control .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(0, 0, 0, .25) +} + +.custom-file-control.is-focused .custom-file-input.is-valid ~ .custom-file-label, .custom-file-control .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .custom-file-label { + border-color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .custom-file-control .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.custom-file-control.is-focused .custom-file-input.is-valid ~ .valid-feedback, .custom-file-control .is-focused .custom-file-input.is-valid ~ .valid-feedback, .custom-file-control.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.custom-file-control.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .custom-file-control .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .custom-file-control.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .custom-file-control .is-focused .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25) +} + +.custom-file-control.is-focused [class*=" bmd-label"], .custom-file-control .is-focused [class*=" bmd-label"], .custom-file-control.is-focused [class^=bmd-label], .custom-file-control .is-focused [class^=bmd-label] { + color: #009688 +} + +.custom-file-control.is-focused .bmd-label-placeholder, .custom-file-control .is-focused .bmd-label-placeholder { + color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .custom-file-control, .custom-file-control .is-focused .custom-file-control, .custom-file-control.is-focused .form-control, .custom-file-control .is-focused .form-control { + border-color: rgba(0, 0, 0, .26) +} + +.custom-file-control.is-focused .bmd-help, .custom-file-control .is-focused .bmd-help { + color: rgba(0, 0, 0, .54) +} + +.custom-file-control:before { + position: absolute; + height: calc(100% - 1px) +} + +.switch label { + position: relative; + padding-left: 2.4375rem +} + +.switch label .bmd-switch-track { + position: absolute; + top: .3125rem; + left: 0; + display: inline-block; + width: 2.125rem; + height: .875rem; + cursor: pointer; + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 50%, #49dcce 0, #49dcce); + background-position: 0; + background-size: 4.25rem .875rem; + border-radius: 2.125rem; + transition: background-position .2s ease-in +} + +.switch label .bmd-switch-track:after { + position: absolute; + top: 50%; + left: 0; + display: block; + align-self: center; + width: 1.25rem; + height: 1.25rem; + content: ""; + background: #f1f1f1; + border-radius: 100%; + box-shadow: 0 1px 3px rgba(0, 0, 0, .5); + transition: left .2s ease-in, background-color .2s ease-in, transform .3s ease; + transform: translateY(-50%) +} + +.switch label .bmd-switch-track:active:after { + transform: translateY(-50%) scale3d(1.15, .85, 1) +} + +.switch label input { + position: absolute; + display: block; + width: 0; + height: 0; + opacity: 0 +} + +.switch label input:checked + .bmd-switch-track { + background-position: -100% +} + +.switch label input:checked + .bmd-switch-track:after { + left: calc(100% - 1.25rem); + background-color: #009688 +} + +.switch label input:disabled + .bmd-switch-track:active:after { + transform: translateY(-50%) +} + +.switch label input:disabled + .bmd-switch-track { + cursor: default; + background: rgba(0, 0, 0, .12) +} + +.switch label input:disabled + .bmd-switch-track:after { + background: #bdbdbd +} + +.radio label, label.radio-inline { + position: relative; + padding-left: 1.5625rem +} + +.radio label .bmd-radio, label.radio-inline .bmd-radio { + position: absolute; + left: 0; + display: inline-block; + padding: .7em; + margin: -.7em; + line-height: .7; + border-radius: 100% +} + +.radio label .bmd-radio:after, label.radio-inline .bmd-radio:after { + display: inline-block; + width: 1.25rem; + height: 1.25rem; + cursor: pointer; + content: ""; + border: .125rem solid rgba(0, 0, 0, .54); + border-radius: 50%; + transition: border-color .28s ease; + transition-duration: .2s +} + +.radio label .bmd-radio:before, label.radio-inline .bmd-radio:before { + position: absolute; + display: inline-block; + width: 1.25rem; + height: 1.25rem; + content: ""; + background-color: #009688; + border-radius: 50%; + transition: transform .28s ease; + transform: scale3d(0, 0, 0) +} + +.radio label input[type=radio], label.radio-inline input[type=radio] { + position: absolute; + left: 0; + z-index: -1; + width: 0; + height: 0; + margin: 0; + overflow: hidden; + pointer-events: none; + opacity: 0 +} + +.radio label input[type=radio]:checked ~ .bmd-radio:after, label.radio-inline input[type=radio]:checked ~ .bmd-radio:after { + border-color: #009688 +} + +.radio label input[type=radio]:checked ~ .bmd-radio:before, label.radio-inline input[type=radio]:checked ~ .bmd-radio:before { + background-color: #009688; + transform: scale3d(.5, .5, 1) +} + +.radio label input[type=radio]:disabled + .bmd-radio, .radio label input[type=radio][disabled] + .bmd-radio, fieldset[disabled] .radio label input[type=radio] + .bmd-radio, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio, label.radio-inline input[type=radio]:disabled + .bmd-radio, label.radio-inline input[type=radio][disabled] + .bmd-radio { + cursor: default +} + +.radio label input[type=radio]:disabled + .bmd-radio:after, .radio label input[type=radio][disabled] + .bmd-radio:after, fieldset[disabled] .radio label input[type=radio] + .bmd-radio:after, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:after, label.radio-inline input[type=radio]:disabled + .bmd-radio:after, label.radio-inline input[type=radio][disabled] + .bmd-radio:after { + border-color: rgba(0, 0, 0, .26) +} + +.radio label input[type=radio]:disabled + .bmd-radio:before, .radio label input[type=radio][disabled] + .bmd-radio:before, fieldset[disabled] .radio label input[type=radio] + .bmd-radio:before, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:before, label.radio-inline input[type=radio]:disabled + .bmd-radio:before, label.radio-inline input[type=radio][disabled] + .bmd-radio:before { + background-color: rgba(0, 0, 0, .26) +} + +.radio label input[type=radio]:disabled + .bmd-radio .ripple-container, .radio label input[type=radio][disabled] + .bmd-radio .ripple-container, fieldset[disabled] .radio label input[type=radio] + .bmd-radio .ripple-container, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio .ripple-container, label.radio-inline input[type=radio]:disabled + .bmd-radio .ripple-container, label.radio-inline input[type=radio][disabled] + .bmd-radio .ripple-container { + display: none +} + +.bg-inverse .radio label input[type=radio]:disabled + .bmd-radio:after, .bg-inverse .radio label input[type=radio][disabled] + .bmd-radio:after, .bg-inverse fieldset[disabled] .radio label input[type=radio] + .bmd-radio:after, .bg-inverse fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:after, .bg-inverse label.radio-inline input[type=radio]:disabled + .bmd-radio:after, .bg-inverse label.radio-inline input[type=radio][disabled] + .bmd-radio:after { + border-color: hsla(0, 0%, 100%, .3) +} + +.bg-inverse .radio label input[type=radio]:disabled + .bmd-radio:before, .bg-inverse .radio label input[type=radio][disabled] + .bmd-radio:before, .bg-inverse fieldset[disabled] .radio label input[type=radio] + .bmd-radio:before, .bg-inverse fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:before, .bg-inverse label.radio-inline input[type=radio]:disabled + .bmd-radio:before, .bg-inverse label.radio-inline input[type=radio][disabled] + .bmd-radio:before { + background-color: hsla(0, 0%, 100%, .3) +} + +form { + margin-bottom: 1.125rem +} + +.navbar form { + margin-bottom: 0 +} + +.navbar form .bmd-form-group { + display: inline-block; + padding-top: 0 +} + +.navbar form .btn, .navbar form .custom-file-control:before { + margin-bottom: 0 +} + +.custom-file-control, .form-control { + background: no-repeat bottom, 50% calc(100% - 1px); + background-size: 0 100%, 100% 100%; + border: 0; + transition: background 0s ease-out; + padding-left: 0; + padding-right: 0 +} + +.bmd-form-group.is-focused .custom-file-control, .bmd-form-group.is-focused .form-control, .custom-file-control:focus, .form-control:focus { + background-size: 100% 100%, 100% 100%; + transition-duration: .3s +} + +.bmd-help { + position: absolute; + display: none; + font-size: .8rem; + font-weight: 400 +} + +.bmd-form-group.is-focused .bmd-help { + display: block +} + +.bmd-help:nth-of-type(2) { + padding-top: 1rem +} + +.bmd-help + .bmd-help { + position: relative; + margin-bottom: 0 +} + +.checkbox-inline, .checkbox label, .is-focused .checkbox-inline, .is-focused .checkbox label, .is-focused .radio-inline, .is-focused .radio label, .is-focused .switch label, .radio-inline, .radio label, .switch label { + color: rgba(0, 0, 0, .26) +} + +.checkbox-inline:active, .checkbox-inline:focus, .checkbox-inline:hover, .checkbox label:active, .checkbox label:focus, .checkbox label:hover, .is-focused .checkbox-inline:active, .is-focused .checkbox-inline:focus, .is-focused .checkbox-inline:hover, .is-focused .checkbox label:active, .is-focused .checkbox label:focus, .is-focused .checkbox label:hover, .is-focused .radio-inline:active, .is-focused .radio-inline:focus, .is-focused .radio-inline:hover, .is-focused .radio label:active, .is-focused .radio label:focus, .is-focused .radio label:hover, .is-focused .switch label:active, .is-focused .switch label:focus, .is-focused .switch label:hover, .radio-inline:active, .radio-inline:focus, .radio-inline:hover, .radio label:active, .radio label:focus, .radio label:hover, .switch label:active, .switch label:focus, .switch label:hover { + color: rgba(0, 0, 0, .54) +} + +.checkbox-inline label:has(input[type=checkbox][disabled]), .checkbox-inline label:has(input[type=checkbox][disabled]):focus, .checkbox-inline label:has(input[type=checkbox][disabled]):hover, .checkbox-inline label:has(input[type=radio][disabled]), .checkbox-inline label:has(input[type=radio][disabled]):focus, .checkbox-inline label:has(input[type=radio][disabled]):hover, .checkbox label label:has(input[type=checkbox][disabled]), .checkbox label label:has(input[type=checkbox][disabled]):focus, .checkbox label label:has(input[type=checkbox][disabled]):hover, .checkbox label label:has(input[type=radio][disabled]), .checkbox label label:has(input[type=radio][disabled]):focus, .checkbox label label:has(input[type=radio][disabled]):hover, .is-focused .checkbox-inline label:has(input[type=checkbox][disabled]), .is-focused .checkbox-inline label:has(input[type=checkbox][disabled]):focus, .is-focused .checkbox-inline label:has(input[type=checkbox][disabled]):hover, .is-focused .checkbox-inline label:has(input[type=radio][disabled]), .is-focused .checkbox-inline label:has(input[type=radio][disabled]):focus, .is-focused .checkbox-inline label:has(input[type=radio][disabled]):hover, .is-focused .checkbox label label:has(input[type=checkbox][disabled]), .is-focused .checkbox label label:has(input[type=checkbox][disabled]):focus, .is-focused .checkbox label label:has(input[type=checkbox][disabled]):hover, .is-focused .checkbox label label:has(input[type=radio][disabled]), .is-focused .checkbox label label:has(input[type=radio][disabled]):focus, .is-focused .checkbox label label:has(input[type=radio][disabled]):hover, .is-focused .radio-inline label:has(input[type=checkbox][disabled]), .is-focused .radio-inline label:has(input[type=checkbox][disabled]):focus, .is-focused .radio-inline label:has(input[type=checkbox][disabled]):hover, .is-focused .radio-inline label:has(input[type=radio][disabled]), .is-focused .radio-inline label:has(input[type=radio][disabled]):focus, .is-focused .radio-inline label:has(input[type=radio][disabled]):hover, .is-focused .radio label label:has(input[type=checkbox][disabled]), .is-focused .radio label label:has(input[type=checkbox][disabled]):focus, .is-focused .radio label label:has(input[type=checkbox][disabled]):hover, .is-focused .radio label label:has(input[type=radio][disabled]), .is-focused .radio label label:has(input[type=radio][disabled]):focus, .is-focused .radio label label:has(input[type=radio][disabled]):hover, .is-focused .switch label label:has(input[type=checkbox][disabled]), .is-focused .switch label label:has(input[type=checkbox][disabled]):focus, .is-focused .switch label label:has(input[type=checkbox][disabled]):hover, .is-focused .switch label label:has(input[type=radio][disabled]), .is-focused .switch label label:has(input[type=radio][disabled]):focus, .is-focused .switch label label:has(input[type=radio][disabled]):hover, .radio-inline label:has(input[type=checkbox][disabled]), .radio-inline label:has(input[type=checkbox][disabled]):focus, .radio-inline label:has(input[type=checkbox][disabled]):hover, .radio-inline label:has(input[type=radio][disabled]), .radio-inline label:has(input[type=radio][disabled]):focus, .radio-inline label:has(input[type=radio][disabled]):hover, .radio label label:has(input[type=checkbox][disabled]), .radio label label:has(input[type=checkbox][disabled]):focus, .radio label label:has(input[type=checkbox][disabled]):hover, .radio label label:has(input[type=radio][disabled]), .radio label label:has(input[type=radio][disabled]):focus, .radio label label:has(input[type=radio][disabled]):hover, .switch label label:has(input[type=checkbox][disabled]), .switch label label:has(input[type=checkbox][disabled]):focus, .switch label label:has(input[type=checkbox][disabled]):hover, .switch label label:has(input[type=radio][disabled]), .switch label label:has(input[type=radio][disabled]):focus, .switch label label:has(input[type=radio][disabled]):hover, fieldset[disabled] .checkbox-inline, fieldset[disabled] .checkbox-inline:focus, fieldset[disabled] .checkbox-inline:hover, fieldset[disabled] .checkbox label, fieldset[disabled] .checkbox label:focus, fieldset[disabled] .checkbox label:hover, fieldset[disabled] .is-focused .checkbox-inline, fieldset[disabled] .is-focused .checkbox-inline:focus, fieldset[disabled] .is-focused .checkbox-inline:hover, fieldset[disabled] .is-focused .checkbox label, fieldset[disabled] .is-focused .checkbox label:focus, fieldset[disabled] .is-focused .checkbox label:hover, fieldset[disabled] .is-focused .radio-inline, fieldset[disabled] .is-focused .radio-inline:focus, fieldset[disabled] .is-focused .radio-inline:hover, fieldset[disabled] .is-focused .radio label, fieldset[disabled] .is-focused .radio label:focus, fieldset[disabled] .is-focused .radio label:hover, fieldset[disabled] .is-focused .switch label, fieldset[disabled] .is-focused .switch label:focus, fieldset[disabled] .is-focused .switch label:hover, fieldset[disabled] .radio-inline, fieldset[disabled] .radio-inline:focus, fieldset[disabled] .radio-inline:hover, fieldset[disabled] .radio label, fieldset[disabled] .radio label:focus, fieldset[disabled] .radio label:hover, fieldset[disabled] .switch label, fieldset[disabled] .switch label:focus, fieldset[disabled] .switch label:hover { + color: rgba(0, 0, 0, .26) +} + +[class*=" bmd-label"], [class^=bmd-label] { + color: rgba(0, 0, 0, .26) +} + +.custom-file-control, .form-control, .is-focused .custom-file-control, .is-focused .form-control { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.custom-file-control:invalid, .form-control:invalid { + background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.custom-file-control:read-only, .form-control:read-only { + background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.custom-file-control:disabled, .disabled.custom-file-control, .form-control.disabled, .form-control:disabled, .form-control[disabled], [disabled].custom-file-control, fieldset[disabled][disabled] .custom-file-control, fieldset[disabled][disabled] .form-control { + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent); + background-repeat: repeat-x; + background-size: 3px 1px +} + +.form-control-success.custom-file-control, .form-control.form-control-success, .is-focused .form-control-success.custom-file-control, .is-focused .form-control.form-control-success { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==" +} + +.form-control-warning.custom-file-control, .form-control.form-control-warning, .is-focused .form-control-warning.custom-file-control, .is-focused .form-control.form-control-warning { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+" +} + +.form-control-danger.custom-file-control, .form-control.form-control-danger, .is-focused .form-control-danger.custom-file-control, .is-focused .form-control.form-control-danger { + background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=" +} + +.is-focused .valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: rgba(0, 0, 0, .26) +} + +.is-focused .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(0, 0, 0, .8); + border-radius: .2rem +} + +.is-focused .custom-select.is-valid, .is-focused .form-control.is-valid, .is-focused .is-valid.custom-file-control, .was-validated .is-focused .custom-file-control:valid, .was-validated .is-focused .custom-select:valid, .was-validated .is-focused .form-control:valid { + border-color: rgba(0, 0, 0, .26) +} + +.is-focused .custom-select.is-valid:focus, .is-focused .form-control.is-valid:focus, .is-focused .is-valid.custom-file-control:focus, .was-validated .is-focused .custom-file-control:valid:focus, .was-validated .is-focused .custom-select:valid:focus, .was-validated .is-focused .form-control:valid:focus { + border-color: rgba(0, 0, 0, .26); + box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25) +} + +.is-focused .custom-select.is-valid ~ .valid-feedback, .is-focused .custom-select.is-valid ~ .valid-tooltip, .is-focused .form-control.is-valid ~ .valid-feedback, .is-focused .form-control.is-valid ~ .valid-tooltip, .is-focused .is-valid.custom-file-control ~ .valid-feedback, .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .is-focused .form-control:valid ~ .valid-feedback, .was-validated .is-focused .form-control:valid ~ .valid-tooltip { + display: block +} + +.is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .is-focused .form-check-input:valid ~ .form-check-label { + color: rgba(0, 0, 0, .26) +} + +.is-focused .form-check-input.is-valid ~ .valid-feedback, .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .is-focused .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .is-focused .custom-control-input:valid ~ .custom-control-label { + color: rgba(0, 0, 0, .26) +} + +.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .is-focused .custom-control-input:valid ~ .custom-control-label:before { + background-color: rgba(64, 64, 64, .26) +} + +.is-focused .custom-control-input.is-valid ~ .valid-feedback, .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .is-focused .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: rgba(26, 26, 26, .26) +} + +.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(0, 0, 0, .25) +} + +.is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .is-focused .custom-file-input:valid ~ .custom-file-label { + border-color: rgba(0, 0, 0, .26) +} + +.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .is-focused .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.is-focused .custom-file-input.is-valid ~ .valid-feedback, .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .is-focused .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .is-focused .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25) +} + +.is-focused [class*=" bmd-label"], .is-focused [class^=bmd-label] { + color: #009688 +} + +.is-focused .bmd-label-placeholder { + color: rgba(0, 0, 0, .26) +} + +.is-focused .custom-file-control, .is-focused .form-control { + border-color: rgba(0, 0, 0, .26) +} + +.is-focused .bmd-help { + color: rgba(0, 0, 0, .54) +} + +.has-success [class*=" bmd-label"], .has-success [class^=bmd-label] { + color: #4caf50 +} + +.has-success .custom-file-control, .has-success .form-control, .is-focused .has-success .custom-file-control, .is-focused .has-success .form-control { + background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-success .custom-file-control:invalid, .has-success .form-control:invalid { + background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-success .custom-file-control:read-only, .has-success .form-control:read-only { + background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-success .custom-file-control:disabled, .has-success .disabled.custom-file-control, .has-success .form-control.disabled, .has-success .form-control:disabled, .has-success .form-control[disabled], .has-success [disabled].custom-file-control, fieldset[disabled][disabled] .has-success .custom-file-control, fieldset[disabled][disabled] .has-success .form-control { + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent); + background-repeat: repeat-x; + background-size: 3px 1px +} + +.has-success .form-control-success.custom-file-control, .has-success .form-control.form-control-success, .is-focused .has-success .form-control-success.custom-file-control, .is-focused .has-success .form-control.form-control-success { + background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==" +} + +.has-success .form-control-warning.custom-file-control, .has-success .form-control.form-control-warning, .is-focused .has-success .form-control-warning.custom-file-control, .is-focused .has-success .form-control.form-control-warning { + background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+" +} + +.has-success .form-control-danger.custom-file-control, .has-success .form-control.form-control-danger, .is-focused .has-success .form-control-danger.custom-file-control, .is-focused .has-success .form-control.form-control-danger { + background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=" +} + +.has-success.is-focused .valid-feedback, .has-success .is-focused .valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #4caf50 +} + +.has-success.is-focused .valid-tooltip, .has-success .is-focused .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(76, 175, 80, .8); + border-radius: .2rem +} + +.has-success.is-focused .custom-select.is-valid, .has-success .is-focused .custom-select.is-valid, .has-success.is-focused .form-control.is-valid, .has-success .is-focused .form-control.is-valid, .has-success.is-focused .is-valid.custom-file-control, .has-success .is-focused .is-valid.custom-file-control, .was-validated .has-success.is-focused .custom-file-control:valid, .was-validated .has-success .is-focused .custom-file-control:valid, .was-validated .has-success.is-focused .custom-select:valid, .was-validated .has-success .is-focused .custom-select:valid, .was-validated .has-success.is-focused .form-control:valid, .was-validated .has-success .is-focused .form-control:valid { + border-color: #4caf50 +} + +.has-success.is-focused .custom-select.is-valid:focus, .has-success .is-focused .custom-select.is-valid:focus, .has-success.is-focused .form-control.is-valid:focus, .has-success .is-focused .form-control.is-valid:focus, .has-success.is-focused .is-valid.custom-file-control:focus, .has-success .is-focused .is-valid.custom-file-control:focus, .was-validated .has-success.is-focused .custom-file-control:valid:focus, .was-validated .has-success .is-focused .custom-file-control:valid:focus, .was-validated .has-success.is-focused .custom-select:valid:focus, .was-validated .has-success .is-focused .custom-select:valid:focus, .was-validated .has-success.is-focused .form-control:valid:focus, .was-validated .has-success .is-focused .form-control:valid:focus { + border-color: #4caf50; + box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25) +} + +.has-success.is-focused .custom-select.is-valid ~ .valid-feedback, .has-success .is-focused .custom-select.is-valid ~ .valid-feedback, .has-success.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-success .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-success.is-focused .form-control.is-valid ~ .valid-feedback, .has-success .is-focused .form-control.is-valid ~ .valid-feedback, .has-success.is-focused .form-control.is-valid ~ .valid-tooltip, .has-success .is-focused .form-control.is-valid ~ .valid-tooltip, .has-success.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-success .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-success.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-success .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-success.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-success .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-success.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .form-control:valid ~ .valid-tooltip { + display: block +} + +.has-success.is-focused .form-check-input.is-valid ~ .form-check-label, .has-success .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-success.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-success .is-focused .form-check-input:valid ~ .form-check-label { + color: #4caf50 +} + +.has-success.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-success .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-success.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-success .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-success.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-success .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-success.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.has-success.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-success .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-success.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-success .is-focused .custom-control-input:valid ~ .custom-control-label { + color: #4caf50 +} + +.has-success.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-success .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-success.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-success .is-focused .custom-control-input:valid ~ .custom-control-label:before { + background-color: #a3d7a5 +} + +.has-success.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-success .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-success.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-success .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.has-success.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-success .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-success.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-success .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: #6ec071 +} + +.has-success.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-success .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-success.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-success .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(76, 175, 80, .25) +} + +.has-success.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-success .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-success.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-success .is-focused .custom-file-input:valid ~ .custom-file-label { + border-color: #4caf50 +} + +.has-success.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-success .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-success.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-success .is-focused .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.has-success.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-success .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-success.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-success .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.has-success.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-success .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-success.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-success .is-focused .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25) +} + +.has-success.is-focused .bmd-label-placeholder, .has-success .is-focused .bmd-label-placeholder, .has-success.is-focused [class*=" bmd-label"], .has-success .is-focused [class*=" bmd-label"], .has-success.is-focused [class^=bmd-label], .has-success .is-focused [class^=bmd-label] { + color: #4caf50 +} + +.has-success.is-focused .custom-file-control, .has-success .is-focused .custom-file-control, .has-success.is-focused .form-control, .has-success .is-focused .form-control { + border-color: #4caf50 +} + +.has-success.is-focused .bmd-help, .has-success .is-focused .bmd-help { + color: rgba(0, 0, 0, .54) +} + +.has-info [class*=" bmd-label"], .has-info [class^=bmd-label] { + color: #03a9f4 +} + +.has-info .custom-file-control, .has-info .form-control, .is-focused .has-info .custom-file-control, .is-focused .has-info .form-control { + background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-info .custom-file-control:invalid, .has-info .form-control:invalid { + background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-info .custom-file-control:read-only, .has-info .form-control:read-only { + background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-info .custom-file-control:disabled, .has-info .disabled.custom-file-control, .has-info .form-control.disabled, .has-info .form-control:disabled, .has-info .form-control[disabled], .has-info [disabled].custom-file-control, fieldset[disabled][disabled] .has-info .custom-file-control, fieldset[disabled][disabled] .has-info .form-control { + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent); + background-repeat: repeat-x; + background-size: 3px 1px +} + +.has-info .form-control-success.custom-file-control, .has-info .form-control.form-control-success, .is-focused .has-info .form-control-success.custom-file-control, .is-focused .has-info .form-control.form-control-success { + background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==" +} + +.has-info .form-control-warning.custom-file-control, .has-info .form-control.form-control-warning, .is-focused .has-info .form-control-warning.custom-file-control, .is-focused .has-info .form-control.form-control-warning { + background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+" +} + +.has-info .form-control-danger.custom-file-control, .has-info .form-control.form-control-danger, .is-focused .has-info .form-control-danger.custom-file-control, .is-focused .has-info .form-control.form-control-danger { + background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=" +} + +.has-info.is-focused .valid-feedback, .has-info .is-focused .valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #03a9f4 +} + +.has-info.is-focused .valid-tooltip, .has-info .is-focused .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(3, 169, 244, .8); + border-radius: .2rem +} + +.has-info.is-focused .custom-select.is-valid, .has-info .is-focused .custom-select.is-valid, .has-info.is-focused .form-control.is-valid, .has-info .is-focused .form-control.is-valid, .has-info.is-focused .is-valid.custom-file-control, .has-info .is-focused .is-valid.custom-file-control, .was-validated .has-info.is-focused .custom-file-control:valid, .was-validated .has-info .is-focused .custom-file-control:valid, .was-validated .has-info.is-focused .custom-select:valid, .was-validated .has-info .is-focused .custom-select:valid, .was-validated .has-info.is-focused .form-control:valid, .was-validated .has-info .is-focused .form-control:valid { + border-color: #03a9f4 +} + +.has-info.is-focused .custom-select.is-valid:focus, .has-info .is-focused .custom-select.is-valid:focus, .has-info.is-focused .form-control.is-valid:focus, .has-info .is-focused .form-control.is-valid:focus, .has-info.is-focused .is-valid.custom-file-control:focus, .has-info .is-focused .is-valid.custom-file-control:focus, .was-validated .has-info.is-focused .custom-file-control:valid:focus, .was-validated .has-info .is-focused .custom-file-control:valid:focus, .was-validated .has-info.is-focused .custom-select:valid:focus, .was-validated .has-info .is-focused .custom-select:valid:focus, .was-validated .has-info.is-focused .form-control:valid:focus, .was-validated .has-info .is-focused .form-control:valid:focus { + border-color: #03a9f4; + box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .25) +} + +.has-info.is-focused .custom-select.is-valid ~ .valid-feedback, .has-info .is-focused .custom-select.is-valid ~ .valid-feedback, .has-info.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-info .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-info.is-focused .form-control.is-valid ~ .valid-feedback, .has-info .is-focused .form-control.is-valid ~ .valid-feedback, .has-info.is-focused .form-control.is-valid ~ .valid-tooltip, .has-info .is-focused .form-control.is-valid ~ .valid-tooltip, .has-info.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-info .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-info.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-info .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-info.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-info .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-info.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .form-control:valid ~ .valid-tooltip { + display: block +} + +.has-info.is-focused .form-check-input.is-valid ~ .form-check-label, .has-info .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-info.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-info .is-focused .form-check-input:valid ~ .form-check-label { + color: #03a9f4 +} + +.has-info.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-info .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-info.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-info .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-info.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-info .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-info.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.has-info.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-info .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-info.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-info .is-focused .custom-control-input:valid ~ .custom-control-label { + color: #03a9f4 +} + +.has-info.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-info .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-info.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-info .is-focused .custom-control-input:valid ~ .custom-control-label:before { + background-color: #79d4fd +} + +.has-info.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-info .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-info.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-info .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.has-info.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-info .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-info.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-info .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: #2ebcfc +} + +.has-info.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-info .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-info.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-info .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(3, 169, 244, .25) +} + +.has-info.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-info .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-info.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-info .is-focused .custom-file-input:valid ~ .custom-file-label { + border-color: #03a9f4 +} + +.has-info.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-info .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-info.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-info .is-focused .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.has-info.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-info .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-info.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-info .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.has-info.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-info .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-info.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-info .is-focused .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .25) +} + +.has-info.is-focused .bmd-label-placeholder, .has-info .is-focused .bmd-label-placeholder, .has-info.is-focused [class*=" bmd-label"], .has-info .is-focused [class*=" bmd-label"], .has-info.is-focused [class^=bmd-label], .has-info .is-focused [class^=bmd-label] { + color: #03a9f4 +} + +.has-info.is-focused .custom-file-control, .has-info .is-focused .custom-file-control, .has-info.is-focused .form-control, .has-info .is-focused .form-control { + border-color: #03a9f4 +} + +.has-info.is-focused .bmd-help, .has-info .is-focused .bmd-help { + color: rgba(0, 0, 0, .54) +} + +.has-warning [class*=" bmd-label"], .has-warning [class^=bmd-label] { + color: #ff5722 +} + +.has-warning .custom-file-control, .has-warning .form-control, .is-focused .has-warning .custom-file-control, .is-focused .has-warning .form-control { + background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-warning .custom-file-control:invalid, .has-warning .form-control:invalid { + background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-warning .custom-file-control:read-only, .has-warning .form-control:read-only { + background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-warning .custom-file-control:disabled, .has-warning .disabled.custom-file-control, .has-warning .form-control.disabled, .has-warning .form-control:disabled, .has-warning .form-control[disabled], .has-warning [disabled].custom-file-control, fieldset[disabled][disabled] .has-warning .custom-file-control, fieldset[disabled][disabled] .has-warning .form-control { + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent); + background-repeat: repeat-x; + background-size: 3px 1px +} + +.has-warning .form-control-success.custom-file-control, .has-warning .form-control.form-control-success, .is-focused .has-warning .form-control-success.custom-file-control, .is-focused .has-warning .form-control.form-control-success { + background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==" +} + +.has-warning .form-control-warning.custom-file-control, .has-warning .form-control.form-control-warning, .is-focused .has-warning .form-control-warning.custom-file-control, .is-focused .has-warning .form-control.form-control-warning { + background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+" +} + +.has-warning .form-control-danger.custom-file-control, .has-warning .form-control.form-control-danger, .is-focused .has-warning .form-control-danger.custom-file-control, .is-focused .has-warning .form-control.form-control-danger { + background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=" +} + +.has-warning.is-focused .valid-feedback, .has-warning .is-focused .valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #ff5722 +} + +.has-warning.is-focused .valid-tooltip, .has-warning .is-focused .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(255, 87, 34, .8); + border-radius: .2rem +} + +.has-warning.is-focused .custom-select.is-valid, .has-warning .is-focused .custom-select.is-valid, .has-warning.is-focused .form-control.is-valid, .has-warning .is-focused .form-control.is-valid, .has-warning.is-focused .is-valid.custom-file-control, .has-warning .is-focused .is-valid.custom-file-control, .was-validated .has-warning.is-focused .custom-file-control:valid, .was-validated .has-warning .is-focused .custom-file-control:valid, .was-validated .has-warning.is-focused .custom-select:valid, .was-validated .has-warning .is-focused .custom-select:valid, .was-validated .has-warning.is-focused .form-control:valid, .was-validated .has-warning .is-focused .form-control:valid { + border-color: #ff5722 +} + +.has-warning.is-focused .custom-select.is-valid:focus, .has-warning .is-focused .custom-select.is-valid:focus, .has-warning.is-focused .form-control.is-valid:focus, .has-warning .is-focused .form-control.is-valid:focus, .has-warning.is-focused .is-valid.custom-file-control:focus, .has-warning .is-focused .is-valid.custom-file-control:focus, .was-validated .has-warning.is-focused .custom-file-control:valid:focus, .was-validated .has-warning .is-focused .custom-file-control:valid:focus, .was-validated .has-warning.is-focused .custom-select:valid:focus, .was-validated .has-warning .is-focused .custom-select:valid:focus, .was-validated .has-warning.is-focused .form-control:valid:focus, .was-validated .has-warning .is-focused .form-control:valid:focus { + border-color: #ff5722; + box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .25) +} + +.has-warning.is-focused .custom-select.is-valid ~ .valid-feedback, .has-warning .is-focused .custom-select.is-valid ~ .valid-feedback, .has-warning.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-warning .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-warning.is-focused .form-control.is-valid ~ .valid-feedback, .has-warning .is-focused .form-control.is-valid ~ .valid-feedback, .has-warning.is-focused .form-control.is-valid ~ .valid-tooltip, .has-warning .is-focused .form-control.is-valid ~ .valid-tooltip, .has-warning.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-warning .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-warning.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-warning .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .form-control:valid ~ .valid-tooltip { + display: block +} + +.has-warning.is-focused .form-check-input.is-valid ~ .form-check-label, .has-warning .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-warning.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-warning .is-focused .form-check-input:valid ~ .form-check-label { + color: #ff5722 +} + +.has-warning.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-warning .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-warning.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-warning .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.has-warning.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-warning .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .custom-control-label { + color: #ff5722 +} + +.has-warning.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-warning .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .custom-control-label:before { + background-color: #ffb8a2 +} + +.has-warning.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-warning .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-warning.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-warning .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.has-warning.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-warning .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-warning.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-warning .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: #ff7e55 +} + +.has-warning.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-warning .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-warning.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-warning .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(255, 87, 34, .25) +} + +.has-warning.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-warning .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .custom-file-label { + border-color: #ff5722 +} + +.has-warning.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-warning .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.has-warning.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-warning .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-warning.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-warning .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.has-warning.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-warning .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-warning.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-warning .is-focused .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .25) +} + +.has-warning.is-focused .bmd-label-placeholder, .has-warning .is-focused .bmd-label-placeholder, .has-warning.is-focused [class*=" bmd-label"], .has-warning .is-focused [class*=" bmd-label"], .has-warning.is-focused [class^=bmd-label], .has-warning .is-focused [class^=bmd-label] { + color: #ff5722 +} + +.has-warning.is-focused .custom-file-control, .has-warning .is-focused .custom-file-control, .has-warning.is-focused .form-control, .has-warning .is-focused .form-control { + border-color: #ff5722 +} + +.has-warning.is-focused .bmd-help, .has-warning .is-focused .bmd-help { + color: rgba(0, 0, 0, .54) +} + +.has-danger [class*=" bmd-label"], .has-danger [class^=bmd-label] { + color: #f44336 +} + +.has-danger .custom-file-control, .has-danger .form-control, .is-focused .has-danger .custom-file-control, .is-focused .has-danger .form-control { + background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-danger .custom-file-control:invalid, .has-danger .form-control:invalid { + background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-danger .custom-file-control:read-only, .has-danger .form-control:read-only { + background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0) +} + +.has-danger .custom-file-control:disabled, .has-danger .disabled.custom-file-control, .has-danger .form-control.disabled, .has-danger .form-control:disabled, .has-danger .form-control[disabled], .has-danger [disabled].custom-file-control, fieldset[disabled][disabled] .has-danger .custom-file-control, fieldset[disabled][disabled] .has-danger .form-control { + background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent); + background-repeat: repeat-x; + background-size: 3px 1px +} + +.has-danger .form-control-success.custom-file-control, .has-danger .form-control.form-control-success, .is-focused .has-danger .form-control-success.custom-file-control, .is-focused .has-danger .form-control.form-control-success { + background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==" +} + +.has-danger .form-control-warning.custom-file-control, .has-danger .form-control.form-control-warning, .is-focused .has-danger .form-control-warning.custom-file-control, .is-focused .has-danger .form-control.form-control-warning { + background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+" +} + +.has-danger .form-control-danger.custom-file-control, .has-danger .form-control.form-control-danger, .is-focused .has-danger .form-control-danger.custom-file-control, .is-focused .has-danger .form-control.form-control-danger { + background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=" +} + +.has-danger.is-focused .valid-feedback, .has-danger .is-focused .valid-feedback { + display: none; + width: 100%; + margin-top: .25rem; + font-size: 80%; + color: #f44336 +} + +.has-danger.is-focused .valid-tooltip, .has-danger .is-focused .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(244, 67, 54, .8); + border-radius: .2rem +} + +.has-danger.is-focused .custom-select.is-valid, .has-danger .is-focused .custom-select.is-valid, .has-danger.is-focused .form-control.is-valid, .has-danger .is-focused .form-control.is-valid, .has-danger.is-focused .is-valid.custom-file-control, .has-danger .is-focused .is-valid.custom-file-control, .was-validated .has-danger.is-focused .custom-file-control:valid, .was-validated .has-danger .is-focused .custom-file-control:valid, .was-validated .has-danger.is-focused .custom-select:valid, .was-validated .has-danger .is-focused .custom-select:valid, .was-validated .has-danger.is-focused .form-control:valid, .was-validated .has-danger .is-focused .form-control:valid { + border-color: #f44336 +} + +.has-danger.is-focused .custom-select.is-valid:focus, .has-danger .is-focused .custom-select.is-valid:focus, .has-danger.is-focused .form-control.is-valid:focus, .has-danger .is-focused .form-control.is-valid:focus, .has-danger.is-focused .is-valid.custom-file-control:focus, .has-danger .is-focused .is-valid.custom-file-control:focus, .was-validated .has-danger.is-focused .custom-file-control:valid:focus, .was-validated .has-danger .is-focused .custom-file-control:valid:focus, .was-validated .has-danger.is-focused .custom-select:valid:focus, .was-validated .has-danger .is-focused .custom-select:valid:focus, .was-validated .has-danger.is-focused .form-control:valid:focus, .was-validated .has-danger .is-focused .form-control:valid:focus { + border-color: #f44336; + box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25) +} + +.has-danger.is-focused .custom-select.is-valid ~ .valid-feedback, .has-danger .is-focused .custom-select.is-valid ~ .valid-feedback, .has-danger.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-danger .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-danger.is-focused .form-control.is-valid ~ .valid-feedback, .has-danger .is-focused .form-control.is-valid ~ .valid-feedback, .has-danger.is-focused .form-control.is-valid ~ .valid-tooltip, .has-danger .is-focused .form-control.is-valid ~ .valid-tooltip, .has-danger.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-danger .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-danger.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-danger .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .form-control:valid ~ .valid-tooltip { + display: block +} + +.has-danger.is-focused .form-check-input.is-valid ~ .form-check-label, .has-danger .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-danger.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-danger .is-focused .form-check-input:valid ~ .form-check-label { + color: #f44336 +} + +.has-danger.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-danger .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-danger.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-danger .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .form-check-input:valid ~ .valid-tooltip { + display: block +} + +.has-danger.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-danger .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .custom-control-label { + color: #f44336 +} + +.has-danger.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-danger .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .custom-control-label:before { + background-color: #fbb4af +} + +.has-danger.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-danger .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-danger.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-danger .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .valid-tooltip { + display: block +} + +.has-danger.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-danger .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-danger.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-danger .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before { + background-color: #f77066 +} + +.has-danger.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-danger .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-danger.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-danger .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before { + box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(244, 67, 54, .25) +} + +.has-danger.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-danger .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .custom-file-label { + border-color: #f44336 +} + +.has-danger.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-danger .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .custom-file-label:before { + border-color: inherit +} + +.has-danger.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-danger .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-danger.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-danger .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .valid-tooltip { + display: block +} + +.has-danger.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-danger .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-danger.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-danger .is-focused .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25) +} + +.has-danger.is-focused .bmd-label-placeholder, .has-danger .is-focused .bmd-label-placeholder, .has-danger.is-focused [class*=" bmd-label"], .has-danger .is-focused [class*=" bmd-label"], .has-danger.is-focused [class^=bmd-label], .has-danger .is-focused [class^=bmd-label] { + color: #f44336 +} + +.has-danger.is-focused .custom-file-control, .has-danger .is-focused .custom-file-control, .has-danger.is-focused .form-control, .has-danger .is-focused .form-control { + border-color: #f44336 +} + +.has-danger.is-focused .bmd-help, .has-danger .is-focused .bmd-help { + color: rgba(0, 0, 0, .54) +} + +.bmd-form-group { + position: relative; + padding-top: 1.75rem +} + +.bmd-form-group [class*=" bmd-label"], .bmd-form-group [class^=bmd-label] { + position: absolute; + pointer-events: none; + transition: all .3s ease +} + +.bmd-form-group [class*=" bmd-label"].bmd-label-floating, .bmd-form-group [class^=bmd-label].bmd-label-floating { + will-change: left, top, contents +} + +.bmd-form-group.is-filled .bmd-label-placeholder { + display: none +} + +.bmd-form-group.bmd-collapse-inline { + display: flex; + align-items: center; + padding: 0; + min-height: 2.1em +} + +.bmd-form-group.bmd-collapse-inline .collapse { + flex: 1; + display: none +} + +.bmd-form-group.bmd-collapse-inline .collapse.show { + max-width: 1200px +} + +.bmd-form-group.bmd-collapse-inline .collapse.show, .bmd-form-group.bmd-collapse-inline .collapsing, .bmd-form-group.bmd-collapse-inline .width:not(.collapse) { + display: block +} + +.bmd-form-group.bmd-collapse-inline .collapsing { + transition-duration: .2s; + transition-timing-function: cubic-bezier(.4, 0, .2, 1) +} + +.bmd-form-group .custom-file-control, .bmd-form-group .form-control, .bmd-form-group input::placeholder, .bmd-form-group label { + line-height: 1 +} + +.bmd-form-group .checkbox label, .bmd-form-group .radio label, .bmd-form-group .switch label, .bmd-form-group label.checkbox-inline, .bmd-form-group label.radio-inline { + line-height: 1.5 +} + +.bmd-form-group input::placeholder { + font-size: 1rem +} + +.bmd-form-group .checkbox label, .bmd-form-group .radio label, .bmd-form-group label { + font-size: 1rem +} + +.bmd-form-group .bmd-label-floating, .bmd-form-group .bmd-label-placeholder { + top: 2.1875rem +} + +.bmd-form-group .bmd-label-static, .bmd-form-group.is-filled .bmd-label-floating, .bmd-form-group .is-filled .bmd-label-floating, .bmd-form-group.is-focused .bmd-label-floating, .bmd-form-group .is-focused .bmd-label-floating { + top: 1rem; + left: 0; + font-size: .75rem +} + +.bmd-form-group .bmd-help { + margin-top: 0; + font-size: .75rem +} + +.bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group .form-control.form-control-danger, .bmd-form-group .form-control.form-control-success, .bmd-form-group .form-control.form-control-warning { + background-size: 0 100%, 100% 100%, .9375rem .9375rem +} + +.bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group .form-control-danger.custom-file-control:focus, .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group .form-control-success.custom-file-control:focus, .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group .form-control-warning.custom-file-control:focus, .bmd-form-group .form-control.form-control-danger, .bmd-form-group .form-control.form-control-danger:focus, .bmd-form-group .form-control.form-control-success, .bmd-form-group .form-control.form-control-success:focus, .bmd-form-group .form-control.form-control-warning, .bmd-form-group .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-warning { + padding-right: 0; + background-repeat: no-repeat, no-repeat; + background-position: bottom, 50% calc(100% - 1px), center right .46875rem +} + +.bmd-form-group .form-control-danger.custom-file-control:focus, .bmd-form-group .form-control-success.custom-file-control:focus, .bmd-form-group .form-control-warning.custom-file-control:focus, .bmd-form-group .form-control.form-control-danger:focus, .bmd-form-group .form-control.form-control-success:focus, .bmd-form-group .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-warning { + background-size: 100% 100%, 100% 100%, .9375rem .9375rem +} + +.bmd-form-group.bmd-form-group-sm { + padding-top: 1.40625rem +} + +.bmd-form-group.bmd-form-group-sm .custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control, .bmd-form-group.bmd-form-group-sm input::placeholder, .bmd-form-group.bmd-form-group-sm label { + line-height: 1 +} + +.bmd-form-group.bmd-form-group-sm .checkbox label, .bmd-form-group.bmd-form-group-sm .radio label, .bmd-form-group.bmd-form-group-sm .switch label, .bmd-form-group.bmd-form-group-sm label.checkbox-inline, .bmd-form-group.bmd-form-group-sm label.radio-inline { + line-height: 1.5 +} + +.bmd-form-group.bmd-form-group-sm input::placeholder { + font-size: .875rem +} + +.bmd-form-group.bmd-form-group-sm .checkbox label, .bmd-form-group.bmd-form-group-sm .radio label, .bmd-form-group.bmd-form-group-sm label { + font-size: .875rem +} + +.bmd-form-group.bmd-form-group-sm .bmd-label-floating, .bmd-form-group.bmd-form-group-sm .bmd-label-placeholder { + top: 1.65625rem +} + +.bmd-form-group.bmd-form-group-sm .bmd-label-static, .bmd-form-group.bmd-form-group-sm.is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-sm .is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-sm.is-focused .bmd-label-floating, .bmd-form-group.bmd-form-group-sm .is-focused .bmd-label-floating { + top: .75rem; + left: 0; + font-size: .65625rem +} + +.bmd-form-group.bmd-form-group-sm .bmd-help { + margin-top: 0; + font-size: .65625rem +} + +.bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning { + background-size: 0 100%, 100% 100%, .6875rem .6875rem +} + +.bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning { + padding-right: 0; + background-repeat: no-repeat, no-repeat; + background-position: bottom, 50% calc(100% - 1px), center right .34375rem +} + +.bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning { + background-size: 100% 100%, 100% 100%, .6875rem .6875rem +} + +.bmd-form-group.bmd-form-group-lg { + padding-top: 1.9375rem +} + +.bmd-form-group.bmd-form-group-lg .custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control, .bmd-form-group.bmd-form-group-lg input::placeholder, .bmd-form-group.bmd-form-group-lg label { + line-height: 1 +} + +.bmd-form-group.bmd-form-group-lg .checkbox label, .bmd-form-group.bmd-form-group-lg .radio label, .bmd-form-group.bmd-form-group-lg .switch label, .bmd-form-group.bmd-form-group-lg label.checkbox-inline, .bmd-form-group.bmd-form-group-lg label.radio-inline { + line-height: 1.5 +} + +.bmd-form-group.bmd-form-group-lg input::placeholder { + font-size: 1.25rem +} + +.bmd-form-group.bmd-form-group-lg .checkbox label, .bmd-form-group.bmd-form-group-lg .radio label, .bmd-form-group.bmd-form-group-lg label { + font-size: 1.25rem +} + +.bmd-form-group.bmd-form-group-lg .bmd-label-floating, .bmd-form-group.bmd-form-group-lg .bmd-label-placeholder { + top: 2.5rem +} + +.bmd-form-group.bmd-form-group-lg .bmd-label-static, .bmd-form-group.bmd-form-group-lg.is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-lg .is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-lg.is-focused .bmd-label-floating, .bmd-form-group.bmd-form-group-lg .is-focused .bmd-label-floating { + top: 1rem; + left: 0; + font-size: .9375rem +} + +.bmd-form-group.bmd-form-group-lg .bmd-help { + margin-top: 0; + font-size: .9375rem +} + +.bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning { + background-size: 0 100%, 100% 100%, 1.1875rem 1.1875rem +} + +.bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning { + padding-right: 0; + background-repeat: no-repeat, no-repeat; + background-position: bottom, 50% calc(100% - 1px), center right .59375rem +} + +.bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning { + background-size: 100% 100%, 100% 100%, 1.1875rem 1.1875rem +} + +.custom-file-control, .form-control, input::placeholder, label { + line-height: 1 +} + +.checkbox label, .radio label, .switch label, label.checkbox-inline, label.radio-inline { + line-height: 1.5 +} + +input::placeholder { + font-size: 1rem +} + +.checkbox label, .radio label, label { + font-size: 1rem +} + +.bmd-label-floating, .bmd-label-placeholder { + top: 2.1875rem +} + +.bmd-label-static, .is-filled .bmd-label-floating, .is-focused .bmd-label-floating { + top: 1rem; + left: 0; + font-size: .75rem +} + +.bmd-help { + margin-top: 0; + font-size: .75rem +} + +.form-control-danger.custom-file-control, .form-control-success.custom-file-control, .form-control-warning.custom-file-control, .form-control.form-control-danger, .form-control.form-control-success, .form-control.form-control-warning { + background-size: 0 100%, 100% 100%, .9375rem .9375rem +} + +.bmd-form-group.is-focused .form-control-danger.custom-file-control, .bmd-form-group.is-focused .form-control-success.custom-file-control, .bmd-form-group.is-focused .form-control-warning.custom-file-control, .bmd-form-group.is-focused .form-control.form-control-danger, .bmd-form-group.is-focused .form-control.form-control-success, .bmd-form-group.is-focused .form-control.form-control-warning, .form-control-danger.custom-file-control, .form-control-danger.custom-file-control:focus, .form-control-success.custom-file-control, .form-control-success.custom-file-control:focus, .form-control-warning.custom-file-control, .form-control-warning.custom-file-control:focus, .form-control.form-control-danger, .form-control.form-control-danger:focus, .form-control.form-control-success, .form-control.form-control-success:focus, .form-control.form-control-warning, .form-control.form-control-warning:focus { + padding-right: 0; + background-repeat: no-repeat, no-repeat; + background-position: bottom, 50% calc(100% - 1px), center right .46875rem +} + +.bmd-form-group.is-focused .form-control-danger.custom-file-control, .bmd-form-group.is-focused .form-control-success.custom-file-control, .bmd-form-group.is-focused .form-control-warning.custom-file-control, .bmd-form-group.is-focused .form-control.form-control-danger, .bmd-form-group.is-focused .form-control.form-control-success, .bmd-form-group.is-focused .form-control.form-control-warning, .form-control-danger.custom-file-control:focus, .form-control-success.custom-file-control:focus, .form-control-warning.custom-file-control:focus, .form-control.form-control-danger:focus, .form-control.form-control-success:focus, .form-control.form-control-warning:focus { + background-size: 100% 100%, 100% 100%, .9375rem .9375rem +} + +select, select.custom-file-control, select.form-control { + -moz-appearance: none; + -webkit-appearance: none +} + +@media (min-width: 576px) { + .form-inline .input-group { + display: inline-flex; + align-items: center + } +} + +.input-group .input-group-addon { + display: flex; + justify-content: center; + align-items: center; + background-color: transparent; + border-color: transparent +} + +.input-group .input-group-addon + input, .input-group input + .input-group-addon { + margin-left: .75rem +} + +.list-group { + display: flex; + flex-direction: column; + flex-grow: 1; + padding: .5rem 0 +} + +.list-group.bmd-list-group-sm { + padding: .25rem 0 +} + +.list-group.bmd-list-group-sm .list-group-item { + padding: .5rem 1rem +} + +.bmd-list-group-col { + display: flex; + flex-direction: column; + min-width: 0 +} + +.list-group-item { + display: flex; + flex-flow: row wrap; + align-items: center; + padding: 1rem; + line-height: 1 +} + +.list-group-item .list-group-item-text { + min-width: 0; + max-height: 2.188rem; + overflow: hidden; + text-overflow: ellipsis +} + +.list-group-item :first-child { + margin-right: 2rem +} + +.list-group-item > * ~ .label:last-child, .list-group-item > * ~ .material-icons:last-child, .list-group-item > .pull-lg-right, .list-group-item > .pull-md-right, .list-group-item > .pull-sm-right, .list-group-item > .pull-xl-right, .list-group-item > .pull-xs-right { + margin-right: 0; + margin-left: auto +} + +.list-group-item .material-icons.pull-lg-right, .list-group-item .material-icons.pull-md-right, .list-group-item .material-icons.pull-sm-right, .list-group-item .material-icons.pull-xl-right, .list-group-item .material-icons.pull-xs-right, .list-group-item .material-icons ~ .material-icons:last-child { + padding-left: 1rem +} + +.list-group-item .list-group-item-text { + font-size: .875rem; + color: rgba(0, 0, 0, .54) +} + +.table-inverse { + color: hsla(0, 0%, 100%, .84) +} + +.table thead th { + font-size: .95rem; + font-weight: 500; + color: rgba(0, 0, 0, .54); + border-top-width: 0; + border-bottom-width: 1px +} + +.table-inverse thead th, thead.thead-inverse th { + color: hsla(0, 0%, 100%, .54) +} + +.table-inverse td, .table-inverse th, .table-inverse thead th { + border-color: hsla(0, 0%, 100%, .06) +} + +.nav-link { + text-transform: uppercase +} + +.navbar-nav .nav-link { + padding: .5321rem; + font-size: .875rem; + font-weight: 400 +} + +.nav-pills, .nav-tabs { + border: 0 +} + +.nav-pills .nav-link, .nav-tabs .nav-link { + padding: 1.4286em .8575em; + font-size: .875rem; + font-weight: 500; + border: 0 +} + +.nav-pills .nav-item.show .nav-link, .nav-pills .nav-link.active, .nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active { + background-color: transparent; + color: inherit +} + +.nav-tabs .nav-link { + border-bottom: .214rem solid transparent; + color: rgba(0, 0, 0, .54) +} + +.nav-tabs .nav-link.active { + color: rgba(0, 0, 0, .87) +} + +.nav-tabs .nav-link.active, .nav-tabs .nav-link.active:focus, .nav-tabs .nav-link.active:hover { + border-color: theme-color(primary) +} + +.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:focus, .nav-tabs .nav-link.disabled:hover { + color: rgba(0, 0, 0, .26) +} + +.nav-tabs.bg-primary .nav-link { + color: #fff +} + +.nav-tabs.bg-primary .nav-link.active { + color: #fff; + border-color: #fff +} + +.nav-tabs.bg-primary .nav-link.active:focus, .nav-tabs.bg-primary .nav-link.active:hover { + border-color: #fff +} + +.nav-tabs.bg-primary .nav-link.disabled, .nav-tabs.bg-primary .nav-link.disabled:focus, .nav-tabs.bg-primary .nav-link.disabled:hover { + color: hsla(0, 0%, 100%, .84) +} + +.nav-tabs.bg-dark .nav-link { + color: #fff +} + +.nav-tabs.bg-dark .nav-link.active { + color: #fff; + border-color: #fff +} + +.nav-tabs.bg-dark .nav-link.active:focus, .nav-tabs.bg-dark .nav-link.active:hover { + border-color: #fff +} + +.nav-tabs.bg-dark .nav-link.disabled, .nav-tabs.bg-dark .nav-link.disabled:focus, .nav-tabs.bg-dark .nav-link.disabled:hover { + color: hsla(0, 0%, 100%, .84) +} + +.nav .nav-item { + position: relative +} + +.navbar { + z-index: 1; + border: 0; + border-radius: 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12) +} + +.navbar .navbar-brand { + position: relative +} + +.navbar > .container { + flex: 1 +} + +.navbar-dark .custom-file-control, .navbar-dark .form-control { + color: #fff +} + +.navbar-dark .custom-file-control::placeholder, .navbar-dark .form-control::placeholder { + color: hsla(0, 0%, 100%, .5) +} + +.alert { + border: 0; + border-radius: 0 +} + +.progress { + height: 4px; + background: #c8c8c8; + border-radius: 0 +} + +.progress, .progress .progress-bar { + box-shadow: none +} + +.page-item:first-child .page-link { + border-top-left-radius: 4em; + border-bottom-left-radius: 4em +} + +.page-item:last-child .page-link { + border-top-right-radius: 4em; + border-bottom-right-radius: 4em; + margin-right: 0 +} + +.page-item:first-child .page-link, .page-item:last-child .page-link { + display: flex; + justify-content: center; + padding-right: 0; + padding-left: 0 +} + +.page-item:first-child .page-link > .material-icons, .page-item:last-child .page-link > .material-icons { + font-size: 1.5em +} + +.page-link { + min-width: 2.6em; + margin-right: .5em; + text-align: center; + border-radius: 4em +} + +.page-link:focus, .page-link:hover { + text-decoration: none +} + +.pagination-lg .page-link { + min-width: 2.8em; + padding: .75rem 0; + font-size: 1.25rem; + line-height: 1.5 +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 4em; + border-bottom-left-radius: 4em +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 4em; + border-bottom-right-radius: 4em +} + +.pagination-sm .page-link { + min-width: 2.2em; + padding: .25rem 0; + font-size: .875rem; + line-height: 1.5 +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 4em; + border-bottom-left-radius: 4em +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 4em; + border-bottom-right-radius: 4em +} + +h6 { + font-weight: 500 +} + +.tooltip-arrow { + display: none +} + +.card { + border: 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12) +} + +.card .card-header { + padding: 1rem; + background-color: transparent +} + +.card .card-block { + padding: 1.5rem 1rem 1rem +} + +.card h1.card-title, .card h2.card-title, .card h3.card-title, .card h4.card-title, .card h5.card-title, .card h6.card-title { + font-size: 1.5rem; + font-weight: 300 +} + +.card .bmd-card-actions, .card it may be necessary .card-footer { + padding: .5rem +} + +.card.bmd-card-raised { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, .14), 0 3px 14px 2px rgba(0, 0, 0, .12), 0 5px 5px -3px rgba(0, 0, 0, .2) +} + +@media (min-width: 992px) { + .card.bmd-card-flat { + box-shadow: none + } +} + +.modal-content { + border: 0; + border-radius: .125rem +} + +.modal-content .modal-header { + padding: 24px 24px 0; + border-bottom: 0 +} + +.modal-content .modal-body { + padding: 20px 24px 24px +} + +.modal-content .modal-footer { + padding: 8px 8px 8px 24px; + border-top: 0 +} + +.modal-content .modal-footer .btn, .modal-content .modal-footer .custom-file-control:before { + margin: 0 +} + +.modal-content .modal-footer .btn + .btn, .modal-content .modal-footer .btn + .custom-file-control:before, .modal-content .modal-footer .custom-file-control:before + .btn, .modal-content .modal-footer .custom-file-control:before + .custom-file-control:before { + margin-left: 8px +} + +.dropdown-menu { + display: none; + padding: .25rem 0; + border: 0; + opacity: 0; + transform: scale(0); + transform-origin: 0 0; + will-change: transform, opacity; + transition: transform .3s cubic-bezier(.4, 0, .2, 1), opacity .2s cubic-bezier(.4, 0, .2, 1) +} + +@media (min-width: 768px) { + .dropdown-menu { + padding: .5rem 0 + } +} + +.dropdown-menu.showing { + animation-name: d; + animation-duration: .3s; + animation-fill-mode: forwards; + animation-timing-function: cubic-bezier(.4, 0, .2, 1) +} + +.dropdown-menu.show, .open > .dropdown-menu { + display: block; + opacity: 1; + transform: scale(1) +} + +.dropdown-menu.hiding { + display: block; + opacity: 0; + transform: scale(0) +} + +.dropdown-menu.dropdown-menu-left, .dropdown-menu[x-placement=bottom-start] { + transform-origin: 0 0 +} + +.dropdown-menu.dropdown-menu-right, .dropdown-menu[x-placement=bottom-end] { + transform-origin: 100% 0 +} + +.dropdown-menu[x-placement=top-start] { + transform-origin: 0 100% +} + +.dropdown-menu[x-placement=top-end] { + transform-origin: 100% 100% +} + +.dropdown-menu .dropdown-item { + position: relative; + display: flex; + flex-flow: row wrap; + align-items: center; + min-width: 7rem; + max-width: 17.5rem; + min-height: 3rem; + padding: .8rem 1rem; + overflow: hidden; + line-height: 1; + text-overflow: ellipsis; + word-wrap: break-word +} + +.dropdown-menu .dropdown-item.active, .dropdown-menu .dropdown-item:active { + background-color: inherit; + color: inherit +} + +@media (min-width: 768px) { + .dropdown-menu .dropdown-item { + padding-right: 1.5rem; + padding-left: 1.5rem + } +} + +.dropdown-toggle.bmd-btn-fab:after, .dropdown-toggle.bmd-btn-icon:after { + display: none +} + +.dropdown-toggle.bmd-btn-fab ~ .dropdown-menu.dropdown-menu-top-left, .dropdown-toggle.bmd-btn-fab ~ .dropdown-menu.dropdown-menu-top-right, .dropdown-toggle.bmd-btn-icon ~ .dropdown-menu.dropdown-menu-top-left, .dropdown-toggle.bmd-btn-icon ~ .dropdown-menu.dropdown-menu-top-right { + bottom: 2rem +} + +.dropdown-toggle.bmd-btn-fab-sm ~ .dropdown-menu.dropdown-menu-top-left, .dropdown-toggle.bmd-btn-fab-sm ~ .dropdown-menu.dropdown-menu-top-right { + bottom: 2.5rem +} + +.dropdown-toggle.bmd-btn-icon ~ .dropdown-menu { + margin: 0 +} + +.show .dropdown-toggle.btn, .show .dropdown-toggle.btn-danger, .show .dropdown-toggle.btn-info, .show .dropdown-toggle.btn-secondary, .show .dropdown-toggle.btn-success, .show .dropdown-toggle.btn-warning, .show .dropdown-toggle.custom-file-control:before { + background-color: transparent +} + +@keyframes d { + 0% { + opacity: 0; + transform: scale(0) + } + to { + opacity: 1; + transform: scale(1) + } +} + +.bmd-layout-drawer { + position: absolute; + z-index: 5; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + max-height: 100%; + overflow: visible; + overflow-y: auto; + font-size: .875rem; + background: #fff; + transition: transform; + will-change: transform; + transform-style: preserve-3d; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12); + transition-duration: .2s; + transition-timing-function: cubic-bezier(.4, 0, .2, 1) +} + +.bmd-layout-drawer > * { + flex-shrink: 0 +} + +.bmd-layout-drawer > header { + display: flex; + flex-direction: column; + justify-content: flex-end; + padding: 1rem +} + +.bmd-layout-drawer > header .navbar-brand { + padding-left: 1.5rem; + font-size: 1.25rem +} + +.bmd-layout-drawer > .list-group { + padding-top: 1rem +} + +.bmd-layout-drawer > .list-group .list-group-item { + padding-right: 2.5rem; + padding-left: 2.5rem; + font-size: .8125rem; + font-weight: 500 +} + +.bmd-drawer-f-l > .bmd-layout-drawer { + top: 0; + left: 0; + width: 240px; + height: 100%; + transform: translateX(-250px) +} + +.bmd-drawer-f-l > .bmd-layout-content, .bmd-drawer-f-l > .bmd-layout-header { + margin-left: 0 +} + +.bmd-drawer-f-r > .bmd-layout-drawer { + top: 0; + right: 0; + width: 240px; + height: 100%; + transform: translateX(250px) +} + +.bmd-drawer-f-r > .bmd-layout-content, .bmd-drawer-f-r > .bmd-layout-header { + margin-right: 0 +} + +.bmd-drawer-f-t > .bmd-layout-drawer { + top: 0; + left: 0; + width: 100%; + height: 100px; + transform: translateY(-110px) +} + +.bmd-drawer-f-t > .bmd-layout-content { + margin-top: 0 +} + +.bmd-drawer-f-b > .bmd-layout-drawer { + bottom: 0; + left: 0; + width: 100%; + height: 100px; + transform: translateY(110px) +} + +.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-l > .bmd-layout-header { + width: calc(100% - 240px); + margin-left: 240px +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-l > .bmd-layout-drawer { + transform: translateX(0) +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-l > .bmd-layout-content { + margin-left: 240px +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-r > .bmd-layout-header { + width: calc(100% - 240px); + margin-right: 240px +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-r > .bmd-layout-drawer { + transform: translateX(0) +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-r > .bmd-layout-content { + margin-right: 240px +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 100px +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-t > .bmd-layout-drawer { + transform: translateY(0) +} + +:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 100px +} + +:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-l > .bmd-layout-header { + width: 100%; + margin-left: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-r > .bmd-layout-header { + width: 100%; + margin-right: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) +} + +@supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } +} + +:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 0 +} + +@media (min-width: 576px) { + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-l > .bmd-layout-header { + width: calc(100% - 240px); + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-l > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-l > .bmd-layout-content { + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-r > .bmd-layout-header { + width: calc(100% - 240px); + margin-right: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-r > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-r > .bmd-layout-content { + margin-right: 240px + } +} + +@media (min-width: 576px) { + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 100px + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-t > .bmd-layout-drawer { + transform: translateY(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 100px + } +} + +@media (max-width: 767.98px) { + :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) + } + + @supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } + }:not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-l > .bmd-layout-header { + width: 100%; + margin-left: 0 + } + + :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-r > .bmd-layout-header { + width: 100%; + margin-right: 0 + } +} + +@media (max-width: 767.98px) { + :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) + } + + @supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } + }:not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 0 + } + + :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 0 + } +} + +@media (min-width: 768px) { + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-l > .bmd-layout-header { + width: calc(100% - 240px); + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-l > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-l > .bmd-layout-content { + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-r > .bmd-layout-header { + width: calc(100% - 240px); + margin-right: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-r > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-r > .bmd-layout-content { + margin-right: 240px + } +} + +@media (min-width: 768px) { + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 100px + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-t > .bmd-layout-drawer { + transform: translateY(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 100px + } +} + +@media (max-width: 991.98px) { + :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) + } + + @supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } + }:not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-l > .bmd-layout-header { + width: 100%; + margin-left: 0 + } + + :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-r > .bmd-layout-header { + width: 100%; + margin-right: 0 + } +} + +@media (max-width: 991.98px) { + :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) + } + + @supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } + }:not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 0 + } + + :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 0 + } +} + +@media (min-width: 992px) { + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-l > .bmd-layout-header { + width: calc(100% - 240px); + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-l > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-l > .bmd-layout-content { + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-r > .bmd-layout-header { + width: calc(100% - 240px); + margin-right: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-r > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-r > .bmd-layout-content { + margin-right: 240px + } +} + +@media (min-width: 992px) { + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 100px + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-t > .bmd-layout-drawer { + transform: translateY(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 100px + } +} + +@media (max-width: 1199.98px) { + :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) + } + + @supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } + }:not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-l > .bmd-layout-header { + width: 100%; + margin-left: 0 + } + + :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-r > .bmd-layout-header { + width: 100%; + margin-right: 0 + } +} + +@media (max-width: 1199.98px) { + :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) + } + + @supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } + }:not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 0 + } + + :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 0 + } +} + +@media (min-width: 1200px) { + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-l > .bmd-layout-header { + width: calc(100% - 240px); + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-l > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-l > .bmd-layout-content { + margin-left: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-r > .bmd-layout-header { + width: calc(100% - 240px); + margin-right: 240px + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-r > .bmd-layout-drawer { + transform: translateX(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-r > .bmd-layout-content { + margin-right: 240px + } +} + +@media (min-width: 1200px) { + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 100px + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-t > .bmd-layout-drawer { + transform: translateY(0) + } + + :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 100px + } +} + +:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-l > .bmd-layout-header { + width: 100%; + margin-left: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-r > .bmd-layout-header { + width: 100%; + margin-right: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down > .bmd-layout-backdrop .in { + visibility: visible; + background-color: rgba(0, 0, 0, .5) +} + +@supports (pointer-events:auto) { + :not(.bmd-drawer-out).bmd-drawer-overlay-xl-down > .bmd-layout-backdrop.in { + pointer-events: auto; + opacity: 1 + } +} + +:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-t > .bmd-layout-header { + margin-top: 0 +} + +:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-b > .bmd-layout-content { + margin-bottom: 0 +} + +.ripple { + position: relative +} + +.ripple-container { + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + overflow: hidden; + pointer-events: none; + border-radius: inherit +} + +.ripple-container .ripple-decorator { + position: absolute; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + pointer-events: none; + background-color: rgba(0, 0, 0, .05); + border-radius: 100%; + opacity: 0; + transform: scale(1); + transform-origin: 50% +} + +.ripple-container .ripple-decorator.ripple-on { + opacity: .1; + transition: opacity .15s ease-in 0s, transform .5s cubic-bezier(.4, 0, .2, 1) .1s +} + +.ripple-container .ripple-decorator.ripple-out { + opacity: 0; + transition: opacity .1s linear 0s !important +} + +#snackbar-container { + position: fixed; + bottom: 0; + left: 0; + z-index: 99999; + display: flex; + flex-direction: column; + align-items: center; + width: 100% +} + +.snackbar { + display: inline-block; + min-width: 100%; + max-height: 0; + opacity: 0; + transition: transform .25s cubic-bezier(0, 0, .2, 1), opacity 0s .25s, max-height .25s; + transform: translateY(100%) +} + +.snackbar.toast .snackbar-content { + border-radius: 10rem +} + +.snackbar-content { + display: block; + padding: .8rem 1.5rem; + margin-top: 3px; + font-size: .9rem; + color: #fff; + background-color: #323232; + border-radius: 2px +} + +.snackbar-content .btn, .snackbar-content .custom-file-control:before { + margin-bottom: 0 +} + +.snackbar.snackbar-opened { + max-height: 100px; + opacity: 1; + transition: transform .25s cubic-bezier(0, 0, .2, 1), opacity 0s 0s, max-height .25s; + transform: translateY(0) +} + +@media (min-width: 576px) { + #snackbar-container { + right: 1rem; + left: 1rem; + width: 100% + } + + .snackbar { + min-width: 280px + } +} diff --git a/applications/launchpad/gui-vue/src/assets/oruga-material.css b/applications/launchpad/gui-vue/src/assets/oruga-material.css new file mode 100644 index 0000000000..59d3a7d47f --- /dev/null +++ b/applications/launchpad/gui-vue/src/assets/oruga-material.css @@ -0,0 +1,99 @@ +/* Dropdown */ + +.dropdown-item { + position: relative; + display: flex; + flex-flow: row wrap; + align-items: center; + min-width: 7rem; + min-height: 3rem; + padding: 0.8rem 1rem; + overflow: hidden; + line-height: 1; + text-overflow: ellipsis; + word-wrap: break-word; +} + +/* Buttons */ + +.btn { + height: 100%; +} + +/* Steps */ + +.step-marker { + border-radius: 50%; + height: 50px; + width: 50px; +} + +.step-divider { + background: #b5b5b5; + content: " "; + display: block; + position: absolute; + bottom: 0; + left: -50%; + width: 100%; + height: 5px; + top: 35%; +} + +.steps-nav-item-active .step-marker { + color: var(--primary); + border-color: var(--primary); +} + +.steps-nav-item-active .step-divider { + background: none; + background: var(--primary); +} + +.steps-nav-item-previous .step-marker { + background: var(--primary); +} + +.steps-nav-item-previous .step-divider { + background: none; + background: var(--primary); +} + +/* Checkbox */ + +.form-check { + width: 1.2rem; + height: 1.2rem; + border-color: var(--gray); + background-color: white; +} + +.form-check-checked { + background-color: var(--primary); + border-color: var(--primary); +} + +.form-check-label { + margin-left: 0.2rem; +} + +.form-check:hover:after { + content: ""; + border-radius: 50%; + opacity: 0.2; + cursor: pointer; + height: 34px; + position: absolute; + transition: inherit; + width: 34px; + left: calc(50% - 24px); + top: calc(50% - 24px); + margin: 7px; + background-color: inherit; +} + +/* Field */ + +.field { + margin-top: 0.8rem +} diff --git a/applications/launchpad/gui-vue/src/components/Containers.vue b/applications/launchpad/gui-vue/src/components/Containers.vue new file mode 100644 index 0000000000..fc71d05d1d --- /dev/null +++ b/applications/launchpad/gui-vue/src/components/Containers.vue @@ -0,0 +1,79 @@ + + + + + + diff --git a/applications/launchpad/gui-vue/src/components/LaunchDocker.vue b/applications/launchpad/gui-vue/src/components/LaunchDocker.vue new file mode 100644 index 0000000000..28123fa870 --- /dev/null +++ b/applications/launchpad/gui-vue/src/components/LaunchDocker.vue @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/applications/launchpad/gui-vue/src/components/Logs.vue b/applications/launchpad/gui-vue/src/components/Logs.vue new file mode 100644 index 0000000000..cda8d23f1c --- /dev/null +++ b/applications/launchpad/gui-vue/src/components/Logs.vue @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/applications/launchpad/gui-vue/src/components/Service.vue b/applications/launchpad/gui-vue/src/components/Service.vue new file mode 100644 index 0000000000..353a606919 --- /dev/null +++ b/applications/launchpad/gui-vue/src/components/Service.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/applications/launchpad/gui-vue/src/components/Settings.vue b/applications/launchpad/gui-vue/src/components/Settings.vue new file mode 100644 index 0000000000..90903ec1bb --- /dev/null +++ b/applications/launchpad/gui-vue/src/components/Settings.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/applications/launchpad/gui-vue/src/components/oldLauncher.vue b/applications/launchpad/gui-vue/src/components/oldLauncher.vue new file mode 100644 index 0000000000..6132ffe745 --- /dev/null +++ b/applications/launchpad/gui-vue/src/components/oldLauncher.vue @@ -0,0 +1,79 @@ + + +
+

Workspace

+ + Create workspace + Open workspace +

+ Workspace status:{{ workspaceStatus }} +

+
+
+
+

Options

+
+
+ + Selected: {{ options.tari_network }} +
+
    +
  • Wait for Tor: seconds
  • +
  • Docker registry:
  • +
  • Docker tag:
  • +
+
+ +
+
+ + Spin up a Base Node + +
+
+ + Spin up a wallet + +
+
+
+ +
+
+
+ + Spin up a SHA3 miner + +
+ +
+
+
+ + Spin up a Monero Miner + +
+
+
    +
  • +
  • +
  • +
  • +
    +
  • +
  • +
    +
+
+
+ + + +
+Launch! + +
\ No newline at end of file diff --git a/applications/launchpad/gui-vue/src/main.js b/applications/launchpad/gui-vue/src/main.js new file mode 100644 index 0000000000..d14c9ea48a --- /dev/null +++ b/applications/launchpad/gui-vue/src/main.js @@ -0,0 +1,47 @@ +import { createApp } from 'vue' +import App from './App.vue' +import Oruga from '@oruga-ui/oruga-next' +import '@oruga-ui/oruga-next/dist/oruga-full.css' +import { library } from '@fortawesome/fontawesome-svg-core' +import { + faCheck, + faCheckCircle, + faInfoCircle, + faExclamationTriangle, + faExclamationCircle, + faArrowUp, + faAngleRight, + faAngleLeft, + faAngleDown, + faEye, + faEyeSlash, + faCaretDown, + faCaretUp +} from '@fortawesome/free-solid-svg-icons' +import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' +library.add( + faCheck, + faCheckCircle, + faInfoCircle, + faExclamationTriangle, + faExclamationCircle, + faArrowUp, + faAngleRight, + faAngleLeft, + faAngleDown, + faEye, + faEyeSlash, + faCaretDown, + faCaretUp +); + +import store from "./store"; + +createApp(App) + .use(store) + .component('vue-fontawesome', FontAwesomeIcon) + .use(Oruga, { + iconComponent: 'vue-fontawesome', + iconPack: 'fas' + }) + .mount('#app') diff --git a/applications/launchpad/gui-vue/src/store.js b/applications/launchpad/gui-vue/src/store.js new file mode 100644 index 0000000000..a8c285e7e1 --- /dev/null +++ b/applications/launchpad/gui-vue/src/store.js @@ -0,0 +1,207 @@ +import {createStore} from 'vuex' +import {invoke} from '@tauri-apps/api/tauri' +import {listen} from "@tauri-apps/api/event"; +import CBuffer from 'CBuffer'; + +const settings = { + walletPassword: "tari", + moneroMiningAddress: "", + numMiningThreads: 1, + tariNetwork: "weatherwax", + rootFolder: "/tmp/tari", + dockerRegistry: "quay.io/tarilabs", + dockerTag: "latest", + monerodUrl: "http://monero-stagenet.exan.tech:38081", + moneroUseAuth: false, + moneroUsername: "", + moneroPassword: "" +}; + +function handleSystemEvent(commit, payload) { + if (payload.Type === "container") { + return commit('updateContainerStatus', {status: payload.Action, id: payload.Actor.ID}); + } +} + +export const store = createStore({ + state() { + return { + settings, + subscribedToEvents: false, + unsubscribeSystemEvents: () => {}, + containers: {} + } + }, + mutations: { + setNetwork(state, network) { + state.settings.tariNetwork = network; + }, + setRootFolder(state, folder) { + state.settings.rootFolder = folder; + }, + setWalletPassword(state, value) { + state.settings.walletPassword = value; + }, + setMoneroMiningAddress(state, value) { + state.settings.moneroMiningAddress = value; + }, + setNumMiningThreads(state, value) { + state.settings.numMiningThreads = value; + }, + setDockerRegistry(state, value) { + state.settings.dockerRegistry = value; + }, + setDockerTag(state, value) { + state.settings.dockerTag = value; + }, + subscribedToEvents(state) { + state.subscribedToEvents = true; + }, + unsubscribeSystemEvents(state, fn) { + state.unsubscribeSystemEvents = fn; + }, + newContainer(state, type) { + if (state.containers[type]) { + console.log(`Container ${type} already exists. Old container to be replaced: `, state.containers[type]); + } + state.containers[type] = { + logs: new CBuffer(1000), + stats: {cpu: 0, mem: 0} + }; + console.log(`Added new container ${type}`); + }, + + startContainer(state, {type, record}) { + if (!state.containers[type]) { + console.log(`Call newContainer before startContainer for ${type}`); + } + state.containers[type].id = record.id; + state.containers[type].listeners = record.listeners; + state.containers[type].logEventsName = record.logEventsName; + state.containers[type].statsEventsName = record.statsEventsName; + state.containers[type].name = record.name; + if (Array.isArray(record.logs)) { + for (let message of record.logs) { + state.containers[type].logs.push(message); + } + } + }, + updateContainerStatus(state, update) { + if (!update.id) { + console.log(`Container status update did not include id`); + return; + } + if (!update.status) { + console.log(`Container status update did not include status`); + return; + } + for (let c in state.containers) { + let container = state.containers[c]; + if (container.id === update.id) { + container.status = update.status; + } + } + }, + updateLog(state, update) { + if (!update.type) { + console.log(`Container status update did not include type`); + return; + } + if (!update.log) { + console.log(`Container status update did not include log message`); + return; + } + state.containers[update.type].logs.push(update.log); + }, + updateContainerStats(state, update) { + console.log("Event received:", update); + if (!update.type) { + console.log(`Container status update did not include type`); + return; + } + if (!update.stats) { + console.log(`Container status update did not include stats`); + return; + } + let cpu = 0; + try { + let cs = update.stats.cpu_stats; + let pcs = update.stats.precpu_stats; + const cpu_delta = cs.cpu_usage.total_usage - pcs.cpu_usage.total_usage; + const system_cpu_delta = cs.system_cpu_usage - pcs.system_cpu_usage; + const numCpu = cs.online_cpus; + cpu = (cpu_delta / system_cpu_delta) * numCpu * 100.0 + } catch { + console.log("Invalid CPU data"); + } + let mem = 0; + try { + let ms = update.stats.memory_stats; + mem = (ms.usage - (ms.stats.cache || 0))/(1024*1024); + } catch { + console.log("Invalid Memory data"); + } + console.log(`${update.type} CPU ${cpu}, Memory: ${mem}`); + state.containers[update.type].stats.cpu = cpu; + state.containers[update.type].stats.mem = mem; + }, + }, + actions: { + async startContainer({state, commit}, type) { + console.log(`Starting container ${type}`); + try { + if (!state.subscribedToEvents) { + console.log("Subscribing to events"); + commit('subscribedToEvents'); + await invoke("events"); + let eventsUnsubscribe = await listen("tari://docker-system-event", (event) => { + console.log("System event: ", event.payload); + handleSystemEvent(commit, event.payload); + }); + commit('unsubscribeSystemEvents', eventsUnsubscribe); + } + + const settings = Object.assign({}, this.state.settings); + console.log(settings); + let record = await invoke("start_service", {serviceName: type, settings}); + console.log(`Got ${JSON.stringify(record)} as response`) + // Subscribe to stat update events + let logsUnsubscribe = await listen(record.logEventsName, (event) => { + console.log("Log event: ", event.payload); + commit('updateLog', {type, log: event.payload}); + }); + // Subscribe to log events + console.log(`Listening on ${record.statsEventsName}`); + let statsUnsubscribe = await listen(record.statsEventsName, (event) => { + console.log("Stats event: ", event.payload); + commit('updateContainerStats', {type, stats: event.payload}); + }); + record.listeners = [statsUnsubscribe, logsUnsubscribe]; + commit('startContainer', {type, record}); + } catch (err) { + console.log("Error starting service: ", err); + } + }, + async stopContainer({state}, type) { + console.log(`Stopping container ${type}`); + try { + await invoke("stop_service", {serviceName: type, settings}); + let service = state.containers[type]; + if (service.listeners) { + if (typeof (service.listeners.statsUnsubscribe) === 'function') { + console.log("Detaching stats listener"); + service.listeners.statsUnsubscribe(); + } + if (typeof (service.listeners.logsUnsubscribe) === 'function') { + console.log("Detaching Log listener"); + service.listeners.logsUnsubscribe(); + } + } + } catch (err) { + console.log("Error starting service: ", err); + } + } + } +}) + +export default store \ No newline at end of file diff --git a/applications/launchpad/versions.txt b/applications/launchpad/versions.txt new file mode 100644 index 0000000000..78eba90686 --- /dev/null +++ b/applications/launchpad/versions.txt @@ -0,0 +1,2 @@ +VERSION=1.02 +XMRIG_VERSION=v6.15.3 \ No newline at end of file diff --git a/applications/tari_app_grpc/src/conversions/new_block_template.rs b/applications/tari_app_grpc/src/conversions/new_block_template.rs index cc3674a0b3..bc64866a79 100644 --- a/applications/tari_app_grpc/src/conversions/new_block_template.rs +++ b/applications/tari_app_grpc/src/conversions/new_block_template.rs @@ -75,9 +75,9 @@ impl TryFrom for NewBlockTemplate { fn try_from(block: grpc::NewBlockTemplate) -> Result { let header = block.header.clone().ok_or_else(|| "No header provided".to_string())?; let total_kernel_offset = BlindingFactor::from_bytes(&header.total_kernel_offset) - .map_err(|err| format!("total_kernel_offset {}", err.to_string()))?; + .map_err(|err| format!("total_kernel_offset {}", err))?; let total_script_offset = BlindingFactor::from_bytes(&header.total_script_offset) - .map_err(|err| format!("total_script_offset {}", err.to_string()))?; + .map_err(|err| format!("total_script_offset {}", err))?; let pow = match header.pow { Some(p) => ProofOfWork::try_from(p)?, None => return Err("No proof of work provided".into()), diff --git a/applications/tari_app_grpc/src/conversions/transaction.rs b/applications/tari_app_grpc/src/conversions/transaction.rs index 43acb579e9..2610ee2c0b 100644 --- a/applications/tari_app_grpc/src/conversions/transaction.rs +++ b/applications/tari_app_grpc/src/conversions/transaction.rs @@ -45,14 +45,13 @@ impl TryFrom for Transaction { fn try_from(source: grpc::Transaction) -> Result { Ok(Self { - offset: RistrettoSecretKey::from_bytes(&source.offset) - .map_err(|e| format!("Offset is not valid:{}", e.to_string()))?, + offset: RistrettoSecretKey::from_bytes(&source.offset).map_err(|e| format!("Offset is not valid:{}", e))?, body: source .body .ok_or_else(|| "Transaction body not provided".to_string())? .try_into()?, script_offset: RistrettoSecretKey::from_bytes(&source.script_offset) - .map_err(|e| format!("Script offset is not valid:{}", e.to_string()))?, + .map_err(|e| format!("Script offset is not valid:{}", e))?, }) } } diff --git a/applications/tari_app_grpc/src/conversions/transaction_kernel.rs b/applications/tari_app_grpc/src/conversions/transaction_kernel.rs index 0b92aea1fc..30484da544 100644 --- a/applications/tari_app_grpc/src/conversions/transaction_kernel.rs +++ b/applications/tari_app_grpc/src/conversions/transaction_kernel.rs @@ -35,8 +35,8 @@ impl TryFrom for TransactionKernel { type Error = String; fn try_from(kernel: grpc::TransactionKernel) -> Result { - let excess = Commitment::from_bytes(&kernel.excess) - .map_err(|err| format!("Excess could not be converted:{}", err.to_string()))?; + let excess = + Commitment::from_bytes(&kernel.excess).map_err(|err| format!("Excess could not be converted:{}", err))?; let excess_sig = kernel .excess_sig diff --git a/applications/tari_app_grpc/src/conversions/transaction_output.rs b/applications/tari_app_grpc/src/conversions/transaction_output.rs index 47958881b3..2fe7d9da08 100644 --- a/applications/tari_app_grpc/src/conversions/transaction_output.rs +++ b/applications/tari_app_grpc/src/conversions/transaction_output.rs @@ -42,8 +42,8 @@ impl TryFrom for TransactionOutput { .map(TryInto::try_into) .ok_or_else(|| "Transaction output features not provided".to_string())??; - let commitment = Commitment::from_bytes(&output.commitment) - .map_err(|err| format!("Invalid output commitment: {}", err.to_string()))?; + let commitment = + Commitment::from_bytes(&output.commitment).map_err(|err| format!("Invalid output commitment: {}", err))?; let sender_offset_public_key = PublicKey::from_bytes(output.sender_offset_public_key.as_bytes()) .map_err(|err| format!("Invalid sender_offset_public_key {:?}", err))?; diff --git a/applications/tari_app_utilities/Cargo.toml b/applications/tari_app_utilities/Cargo.toml index 21e6e40ef1..0f3108aa75 100644 --- a/applications/tari_app_utilities/Cargo.toml +++ b/applications/tari_app_utilities/Cargo.toml @@ -10,6 +10,7 @@ tari_crypto = { git = "https://github.com/tari-project/tari-crypto.git", branch tari_common = { path = "../../common" } tari_common_types = { path = "../../base_layer/common_types" } tari_p2p = { path = "../../base_layer/p2p", features = ["auto-update"] } +tari_utilities = "0.3.0" config = { version = "0.9.3" } futures = { version = "^0.3.16", default-features = false, features = ["alloc"] } @@ -26,10 +27,7 @@ strum_macros = "^0.19" thiserror = "^1.0.26" tonic = "0.5.2" -[dependencies.tari_core] -path = "../../base_layer/core" -default-features = false -features = ["transactions"] + [build-dependencies] tari_common = { path = "../../common", features = ["build", "static-application-info"] } diff --git a/applications/tari_app_utilities/src/identity_management.rs b/applications/tari_app_utilities/src/identity_management.rs index c82f248dc9..61436a3c90 100644 --- a/applications/tari_app_utilities/src/identity_management.rs +++ b/applications/tari_app_utilities/src/identity_management.rs @@ -59,6 +59,7 @@ pub fn setup_node_identity>( None => Ok(Arc::new(id)), }, Err(e) => { + debug!(target: LOG_TARGET, "Node id not found. {}. Creating new ID", e); if !create_id { let prompt = prompt("Node identity does not exist.\nWould you like to to create one (Y/n)?"); if !prompt { @@ -78,8 +79,6 @@ pub fn setup_node_identity>( }; } - debug!(target: LOG_TARGET, "Node id not found. {}. Creating new ID", e); - match create_new_identity(&identity_file, public_address.clone(), peer_features) { Ok(id) => { info!( @@ -122,14 +121,14 @@ pub fn load_identity>(path: P) -> Result { format!( "The node identity file, {}, could not be read. {}", path.as_ref().to_str().unwrap_or("?"), - e.to_string() + e ) })?; let id = json5::from_str::(&id_str).map_err(|e| { format!( "The node identity file, {}, has an error. {}", path.as_ref().to_str().unwrap_or("?"), - e.to_string() + e ) })?; info!( @@ -217,7 +216,7 @@ pub fn save_as_json, T: Serialize>(path: P, object: &T) -> Result let json = json5::to_string(object).unwrap(); if let Some(p) = path.as_ref().parent() { if !p.exists() { - fs::create_dir_all(p).map_err(|e| format!("Could not save json to data folder. {}", e.to_string()))?; + fs::create_dir_all(p).map_err(|e| format!("Could not save json to data folder. {}", e))?; } } let json_with_comment = format!( @@ -229,7 +228,7 @@ pub fn save_as_json, T: Serialize>(path: P, object: &T) -> Result format!( "Error writing json file, {}. {}", path.as_ref().to_str().unwrap_or(""), - e.to_string() + e ) })?; diff --git a/applications/tari_app_utilities/src/lib.rs b/applications/tari_app_utilities/src/lib.rs index bc79553194..caccbaea68 100644 --- a/applications/tari_app_utilities/src/lib.rs +++ b/applications/tari_app_utilities/src/lib.rs @@ -28,3 +28,6 @@ pub mod consts { // Import the auto-generated const values from the Manifest and Git include!(concat!(env!("OUT_DIR"), "/consts.rs")); } + +// Alias to common crate +pub use tari_common as common; diff --git a/applications/tari_app_utilities/src/utilities.rs b/applications/tari_app_utilities/src/utilities.rs index b4d3512e2c..d809f1a14e 100644 --- a/applications/tari_app_utilities/src/utilities.rs +++ b/applications/tari_app_utilities/src/utilities.rs @@ -35,7 +35,7 @@ use tari_comms::{ types::CommsPublicKey, utils::multiaddr::multiaddr_to_socketaddr, }; -use tari_core::tari_utilities::hex::Hex; +use tari_crypto::tari_utilities::hex::Hex; use tari_p2p::transport::{TorConfig, TransportType}; use tokio::{runtime, runtime::Runtime}; @@ -164,7 +164,7 @@ pub fn setup_runtime(config: &GlobalConfig) -> Result { builder .enable_all() .build() - .map_err(|e| format!("There was an error while building the node runtime. {}", e.to_string())) + .map_err(|e| format!("There was an error while building the node runtime. {}", e)) } /// Returns a CommsPublicKey from either a emoji id or a public key diff --git a/applications/tari_base_node/src/cli.rs b/applications/tari_base_node/src/cli.rs index 9ea6c85b97..5731619602 100644 --- a/applications/tari_base_node/src/cli.rs +++ b/applications/tari_base_node/src/cli.rs @@ -26,7 +26,7 @@ use tari_app_utilities::consts; /// returns the top or bottom box line of the specified length fn box_line(length: usize, is_top: bool) -> String { if length < 2 { - return format!(""); + return String::new(); } if is_top { format!("{}{}{}", "┌", "─".repeat(length - 2), "┐") @@ -38,7 +38,7 @@ fn box_line(length: usize, is_top: bool) -> String { /// returns a horizontal rule of the box of the specified length fn box_separator(length: usize) -> String { if length < 2 { - return format!(""); + return String::new(); } format!("{}{}{}", "├", "─".repeat(length - 2), "┤") } @@ -142,7 +142,7 @@ pub fn print_banner(commands: Vec, chunk_size: i32) { let banner = include!("../assets/tari_banner.rs"); let target_line_length = multiline_find_display_length(banner); for line in banner.lines() { - println!("{}", line.to_string()); + println!("{}", line); } println!("\n{}", box_line(target_line_length, true)); let logo = include!("../assets/tari_logo.rs"); diff --git a/applications/tari_console_wallet/src/automation/command_parser.rs b/applications/tari_console_wallet/src/automation/command_parser.rs index 14008cd027..aeb52f2ee7 100644 --- a/applications/tari_console_wallet/src/automation/command_parser.rs +++ b/applications/tari_console_wallet/src/automation/command_parser.rs @@ -93,16 +93,16 @@ impl Display for ParsedArgument { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { use ParsedArgument::*; match self { - Amount(v) => write!(f, "{}", v.to_string()), - PublicKey(v) => write!(f, "{}", v.to_string()), - Text(v) => write!(f, "{}", v.to_string()), - Float(v) => write!(f, "{}", v.to_string()), - Int(v) => write!(f, "{}", v.to_string()), - Date(v) => write!(f, "{}", v.to_string()), - OutputToCSVFile(v) => write!(f, "{}", v.to_string()), - CSVFileName(v) => write!(f, "{}", v.to_string()), - Address(v) => write!(f, "{}", v.to_string()), - Negotiated(v) => write!(f, "{}", v.to_string()), + Amount(v) => write!(f, "{}", v), + PublicKey(v) => write!(f, "{}", v), + Text(v) => write!(f, "{}", v), + Float(v) => write!(f, "{}", v), + Int(v) => write!(f, "{}", v), + Date(v) => write!(f, "{}", v), + OutputToCSVFile(v) => write!(f, "{}", v), + CSVFileName(v) => write!(f, "{}", v), + Address(v) => write!(f, "{}", v), + Negotiated(v) => write!(f, "{}", v), Hash(v) => write!(f, "{}", v.to_hex()), } } diff --git a/applications/tari_console_wallet/src/ui/components/network_tab.rs b/applications/tari_console_wallet/src/ui/components/network_tab.rs index 07cf31e4be..146262c117 100644 --- a/applications/tari_console_wallet/src/ui/components/network_tab.rs +++ b/applications/tari_console_wallet/src/ui/components/network_tab.rs @@ -316,8 +316,7 @@ impl NetworkTab { }, Err(e) => { warn!(target: LOG_TARGET, "Could not set custom base node peer: {}", e); - self.error_message = - Some(format!("Error setting new Base Node Address:\n{}", e.to_string())); + self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e)); self.address_field = self.previous_address_field.clone(); self.public_key_field = self.previous_public_key_field.clone(); }, @@ -336,8 +335,7 @@ impl NetworkTab { if let Some(peer) = self.detailed_base_node.clone() { if let Err(e) = Handle::current().block_on(app_state.set_base_node_peer(peer)) { warn!(target: LOG_TARGET, "Could not set new base node peer: {}", e); - self.error_message = - Some(format!("Error setting new Base Node Address:\n{}", e.to_string())); + self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e)); } } @@ -443,7 +441,7 @@ impl Component for NetworkTab { }, Err(e) => { warn!(target: LOG_TARGET, "Could not set custom base node peer: {}", e); - self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e.to_string())); + self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e)); self.address_field = self.previous_address_field.clone(); self.public_key_field = self.previous_public_key_field.clone(); }, diff --git a/applications/test_faucet/src/main.rs b/applications/test_faucet/src/main.rs index 678f7287a1..da784d4249 100644 --- a/applications/test_faucet/src/main.rs +++ b/applications/test_faucet/src/main.rs @@ -105,7 +105,7 @@ async fn write_keys(mut rx: mpsc::Receiver<(TransactionOutput, PrivateKey, Micro println!("{} outputs written", written); } }, - Err(e) => println!("{}", e.to_string()), + Err(e) => println!("{}", e), } } let (pk, sig) = test_helpers::create_random_signature_from_s_key(key_sum, 0.into(), 0); diff --git a/base_layer/core/src/consensus/emission.rs b/base_layer/core/src/consensus/emission.rs index 6477765913..0a3df90052 100644 --- a/base_layer/core/src/consensus/emission.rs +++ b/base_layer/core/src/consensus/emission.rs @@ -141,8 +141,7 @@ impl EmissionSchedule { /// This is an infinite iterator, and each value returned is a tuple of (block number, reward, and total supply) /// /// ```edition2018 - /// use tari_core::consensus::emission::EmissionSchedule; - /// use tari_core::transactions::tari_amount::MicroTari; + /// use tari_core::{consensus::emission::EmissionSchedule, transactions::tari_amount::MicroTari}; /// // Print the reward and supply for first 100 blocks /// let schedule = EmissionSchedule::new(10.into(), &[3], 1.into()); /// for (n, reward, supply) in schedule.iter().take(100) { diff --git a/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs b/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs index 42466a91ee..cba4ed9817 100644 --- a/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs +++ b/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs @@ -83,7 +83,7 @@ impl Display for MoneroPowData { fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result { writeln!(fmt, "MoneroBlockHeader: {} ", self.header)?; writeln!(fmt, "RandomX vm key: {}", self.randomx_key.to_hex())?; - writeln!(fmt, "Monero tx count: {}", self.transaction_count.to_string())?; + writeln!(fmt, "Monero tx count: {}", self.transaction_count)?; writeln!(fmt, "Monero tx root: {}", to_hex(self.merkle_root.as_bytes()))?; writeln!(fmt, "Monero coinbase tx: {}", self.coinbase_tx) } diff --git a/base_layer/core/src/proof_of_work/randomx_factory.rs b/base_layer/core/src/proof_of_work/randomx_factory.rs index 67fcdaca5c..0bf3b78310 100644 --- a/base_layer/core/src/proof_of_work/randomx_factory.rs +++ b/base_layer/core/src/proof_of_work/randomx_factory.rs @@ -1,6 +1,6 @@ use std::{ collections::HashMap, - sync::{Arc, Mutex, RwLock}, + sync::{Arc, RwLock}, time::Instant, }; @@ -11,13 +11,18 @@ use crate::proof_of_work::monero_rx::MergeMineError; const LOG_TARGET: &str = "c::pow::randomx_factory"; +struct RandomXVMInstanceInner { + vm: RandomXVM, + _cache: RandomXCache, + _dataset: Option, +} + #[derive(Clone)] pub struct RandomXVMInstance { // Note: If a cache and dataset (if assigned) allocated to the VM drops, the VM will crash. // The cache and dataset for the VM need to be stored together with it since they are not // mix and match. - instance: Arc)>>, - _flags: RandomXFlag, + instance: Arc>, } impl RandomXVMInstance { @@ -49,16 +54,23 @@ impl RandomXVMInstance { // light mode. These are not set by RandomX automatically even in fast mode. Ok(Self { - instance: Arc::new(Mutex::new((vm, cache, None))), - _flags: flags, + instance: Arc::new(RwLock::new(RandomXVMInstanceInner { + vm, + _cache: cache, + _dataset: None, + })), }) } pub fn calculate_hash(&self, input: &[u8]) -> Result, RandomXError> { - self.instance.lock().unwrap().0.calculate_hash(input) + self.instance.read().unwrap().vm.calculate_hash(input) } } +// TODO: Find a better way of marking this Send and Sync +// This type should be Send and Sync since it is wrapped in an Arc RwLock, but +// for some reason Rust and clippy don't see it automatically. +#[allow(clippy::non_send_fields_in_send_ty)] unsafe impl Send for RandomXVMInstance {} unsafe impl Sync for RandomXVMInstance {} diff --git a/base_layer/core/src/transactions/tari_amount.rs b/base_layer/core/src/transactions/tari_amount.rs index 664c421cd3..06dca76185 100644 --- a/base_layer/core/src/transactions/tari_amount.rs +++ b/base_layer/core/src/transactions/tari_amount.rs @@ -58,10 +58,10 @@ pub enum MicroTariError { } /// A convenience constant that makes it easier to define Tari amounts. /// ```edition2018 -/// use tari_core::transactions::tari_amount::{MicroTari, uT, T}; -/// assert_eq!(MicroTari::from(42), 42 * uT); -/// assert_eq!(1 * T, 1_000_000.into()); -/// assert_eq!(3_000_000 * uT, 3 * T); +/// use tari_core::transactions::tari_amount::{uT, MicroTari, T}; +/// assert_eq!(MicroTari::from(42), 42 * uT); +/// assert_eq!(1 * T, 1_000_000.into()); +/// assert_eq!(3_000_000 * uT, 3 * T); /// ``` #[allow(non_upper_case_globals)] pub const uT: MicroTari = MicroTari(1); diff --git a/base_layer/core/src/transactions/transaction/transaction_output.rs b/base_layer/core/src/transactions/transaction/transaction_output.rs index 85f688f762..21fc785307 100644 --- a/base_layer/core/src/transactions/transaction/transaction_output.rs +++ b/base_layer/core/src/transactions/transaction/transaction_output.rs @@ -340,11 +340,7 @@ impl Display for TransactionOutput { fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { let proof = self.proof.to_hex(); let proof = if proof.len() > 32 { - format!( - "{}..{}", - proof[0..16].to_string(), - proof[proof.len() - 16..proof.len()].to_string() - ) + format!("{}..{}", &proof[0..16], &proof[proof.len() - 16..proof.len()]) } else { proof }; diff --git a/base_layer/key_manager/src/cipher_seed.rs b/base_layer/key_manager/src/cipher_seed.rs index 612dbfd7fe..087ab95a1d 100644 --- a/base_layer/key_manager/src/cipher_seed.rs +++ b/base_layer/key_manager/src/cipher_seed.rs @@ -383,9 +383,10 @@ mod test { match seed.to_mnemonic(&MnemonicLanguage::Spanish, Some("Passphrase".to_string())) { Ok(mnemonic_seq) => { - if CipherSeed::from_mnemonic(&mnemonic_seq, Some("WrongPassphrase".to_string())).is_ok() { - panic!("Should not be able to derive seed with wrong passphrase"); - } + assert!( + !CipherSeed::from_mnemonic(&mnemonic_seq, Some("WrongPassphrase".to_string())).is_ok(), + "Should not be able to derive seed with wrong passphrase" + ); }, Err(_e) => panic!("Couldn't convert CipherSeed to Mnemonic"), } diff --git a/base_layer/key_manager/src/key_manager.rs b/base_layer/key_manager/src/key_manager.rs index 8bf50f34d1..a0fff1c38b 100644 --- a/base_layer/key_manager/src/key_manager.rs +++ b/base_layer/key_manager/src/key_manager.rs @@ -76,7 +76,7 @@ where /// Derive a new private key from master key: derived_key=SHA256(master_key||branch_seed||index) pub fn derive_key(&self, key_index: u64) -> Result, ByteArrayError> { - let concatenated = format!("{}{}", self.seed.entropy().to_vec().to_hex(), key_index.to_string()); + let concatenated = format!("{}{}", self.seed.entropy().to_vec().to_hex(), key_index); match K::from_bytes(D::digest(&concatenated.into_bytes()).as_slice()) { Ok(k) => Ok(DerivedKey { k, key_index }), Err(e) => Err(e), diff --git a/base_layer/service_framework/src/lib.rs b/base_layer/service_framework/src/lib.rs index 8be866b794..4cfa4e0186 100644 --- a/base_layer/service_framework/src/lib.rs +++ b/base_layer/service_framework/src/lib.rs @@ -48,20 +48,20 @@ //! use tari_service_framework::{reply_channel, tower::ServiceExt}; //! //! block_on(async { -//! let (mut sender, mut receiver) = reply_channel::unbounded(); +//! let (mut sender, mut receiver) = reply_channel::unbounded(); //! -//! let (result, _) = futures::join!( +//! let (result, _) = futures::join!( //! // Make the request and make progress on the resulting future //! sender.call_ready("upper"), //! // At the same time receive the request and reply //! async move { -//! let req_context = receiver.next().await.unwrap(); -//! let msg = req_context.request().unwrap().clone(); -//! req_context.reply(msg.to_uppercase()); +//! let req_context = receiver.next().await.unwrap(); +//! let msg = req_context.request().unwrap().clone(); +//! req_context.reply(msg.to_uppercase()); //! } //! ); //! -//! assert_eq!(result.unwrap(), "UPPER"); +//! assert_eq!(result.unwrap(), "UPPER"); //! }); //! ``` //! diff --git a/base_layer/wallet/src/contacts_service/storage/database.rs b/base_layer/wallet/src/contacts_service/storage/database.rs index 6820c676b6..583a75693e 100644 --- a/base_layer/wallet/src/contacts_service/storage/database.rs +++ b/base_layer/wallet/src/contacts_service/storage/database.rs @@ -62,7 +62,7 @@ pub enum DbKeyValuePair { } pub enum WriteOperation { - Upsert(DbKeyValuePair), + Upsert(Box), Remove(DbKey), } @@ -121,10 +121,10 @@ where T: ContactsBackend + 'static let db_clone = self.db.clone(); tokio::task::spawn_blocking(move || { - db_clone.write(WriteOperation::Upsert(DbKeyValuePair::Contact( + db_clone.write(WriteOperation::Upsert(Box::new(DbKeyValuePair::Contact( contact.public_key.clone(), contact, - ))) + )))) }) .await .map_err(|err| ContactsServiceStorageError::BlockingTaskSpawnError(err.to_string()))??; diff --git a/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs b/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs index ed1003bacf..0fde8e1bff 100644 --- a/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs +++ b/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs @@ -72,7 +72,7 @@ impl ContactsBackend for ContactsServiceSqliteDatabase { let conn = self.database_connection.get_pooled_connection()?; match op { - WriteOperation::Upsert(kvp) => match kvp { + WriteOperation::Upsert(kvp) => match *kvp { DbKeyValuePair::Contact(k, c) => match ContactSql::find(&k.to_vec(), &conn) { Ok(found_c) => { let _ = found_c.update(UpdateContact { alias: Some(c.alias) }, &conn)?; diff --git a/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs b/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs index b1fabeb84f..b2ef3f79af 100644 --- a/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs +++ b/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs @@ -278,7 +278,7 @@ impl OutputSql { let mut time_locked_balance = Some(None); let mut pending_incoming_balance = None; let mut pending_outgoing_balance = None; - for balance in balance_query_result.clone() { + for balance in balance_query_result { match balance.category.as_str() { "available_balance" => available_balance = Some(MicroTari::from(balance.amount as u64)), "time_locked_balance" => time_locked_balance = Some(Some(MicroTari::from(balance.amount as u64))), diff --git a/base_layer/wallet/src/util/watch.rs b/base_layer/wallet/src/util/watch.rs index 6ab94fd676..d807f8e8ec 100644 --- a/base_layer/wallet/src/util/watch.rs +++ b/base_layer/wallet/src/util/watch.rs @@ -38,19 +38,13 @@ impl Watch { } pub async fn changed(&mut self) { - if self.1.changed().await.is_err() { - // Result::expect requires E: fmt::Debug and `watch::SendError` is not, this is equivalent - panic!("watch internal receiver is dropped"); - } + assert!(!self.1.changed().await.is_err(), "watch internal receiver is dropped"); } pub fn send(&self, item: T) { // PANIC: broadcast becomes infallible because the receiver is owned in Watch and so the failure case is // unreachable - if self.sender().send(item).is_err() { - // Result::expect requires E: fmt::Debug and `watch::SendError` is not, this is equivalent - panic!("watch internal receiver is dropped"); - } + assert!(!self.sender().send(item).is_err(), "watch internal receiver is dropped"); } fn sender(&self) -> &watch::Sender { diff --git a/common/src/configuration/bootstrap.rs b/common/src/configuration/bootstrap.rs index 0fd43c02b3..d3b91ca693 100644 --- a/common/src/configuration/bootstrap.rs +++ b/common/src/configuration/bootstrap.rs @@ -337,7 +337,7 @@ where F: Fn(ApplicationType, &Path) -> Result<(), std::io::Error> { println!( "Failed to install a new configuration file in {}: {}", path.to_str().unwrap_or("?"), - e.to_string() + e ) } } diff --git a/common/src/configuration/global.rs b/common/src/configuration/global.rs index 68ed002223..cbc50065e3 100644 --- a/common/src/configuration/global.rs +++ b/common/src/configuration/global.rs @@ -859,6 +859,8 @@ where ))) } +// Clippy thinks "socks5" is not lowercase ...? +#[allow(clippy::match_str_case_mismatch)] fn network_transport_config( cfg: &Config, mut application: ApplicationType, diff --git a/common/src/logging.rs b/common/src/logging.rs index e31b079a7d..5e00c871b3 100644 --- a/common/src/logging.rs +++ b/common/src/logging.rs @@ -43,7 +43,7 @@ pub fn initialize_logging(config_file: &Path, base_path: &Path) -> bool { }; if let Err(e) = log4rs::init_file(config_file, Default::default()) { - println!("We couldn't load a logging configuration file. {}", e.to_string()); + println!("We couldn't load a logging configuration file. {}", e); return false; } diff --git a/comms/dht/src/actor.rs b/comms/dht/src/actor.rs index 077f517d99..3936da53f6 100644 --- a/comms/dht/src/actor.rs +++ b/comms/dht/src/actor.rs @@ -500,7 +500,7 @@ impl DhtActor { let dest_node_id = destination .node_id() .cloned() - .or_else(|| destination.public_key().map(|pk| NodeId::from_public_key(pk))); + .or_else(|| destination.public_key().map(NodeId::from_public_key)); let connections = match dest_node_id { Some(node_id) => { diff --git a/comms/dht/src/outbound/message_params.rs b/comms/dht/src/outbound/message_params.rs index 6fc70b3ffd..1bd28ad766 100644 --- a/comms/dht/src/outbound/message_params.rs +++ b/comms/dht/src/outbound/message_params.rs @@ -41,9 +41,9 @@ use crate::{ /// // the peer with the corresponding secret key of `dest_public_key`. /// let dest_public_key = CommsPublicKey::default(); /// let params = SendMessageParams::new() -/// .random(5) -/// .with_encryption(OutboundEncryption::encrypt_for(dest_public_key)) -/// .finish(); +/// .random(5) +/// .with_encryption(OutboundEncryption::encrypt_for(dest_public_key)) +/// .finish(); /// ``` #[derive(Debug, Clone)] pub struct SendMessageParams { diff --git a/comms/examples/stress/service.rs b/comms/examples/stress/service.rs index 425672cf06..6d073ff323 100644 --- a/comms/examples/stress/service.rs +++ b/comms/examples/stress/service.rs @@ -81,6 +81,7 @@ pub fn start_service( } #[derive(Debug)] +#[allow(clippy::large_enum_variant)] pub enum StressTestServiceRequest { BeginProtocol(Peer, StressProtocol, oneshot::Sender>), Shutdown, diff --git a/comms/src/memsocket/mod.rs b/comms/src/memsocket/mod.rs index 669c20bfc7..7ad53423d3 100644 --- a/comms/src/memsocket/mod.rs +++ b/comms/src/memsocket/mod.rs @@ -70,9 +70,10 @@ pub fn acquire_next_memsocket_port() -> NonZeroU16 { let port = NonZeroU16::new(switchboard.1).unwrap_or_else(|| unreachable!()); // The switchboard is full and all ports are in use - if switchboard.0.len() == (std::u16::MAX - 1) as usize { - panic!("All memsocket addresses in use!"); - } + assert!( + !(switchboard.0.len() == (std::u16::MAX - 1) as usize), + "All memsocket addresses in use!" + ); // Instead of overflowing to 0, resume searching at port 1 since port 0 isn't a // valid port to bind to. @@ -119,9 +120,9 @@ pub fn release_memsocket_port(port: NonZeroU16) { /// ```rust,no_run /// use std::io::Result; /// +/// use futures::prelude::*; /// use tari_comms::memsocket::{MemoryListener, MemorySocket}; /// use tokio::io::*; -/// use futures::prelude::*; /// /// async fn write_stormlight(mut stream: MemorySocket) -> Result<()> { /// let msg = b"The most important step a person can take is always the next one."; @@ -260,7 +261,7 @@ impl MemoryListener { /// Ok(stream) => { /// println!("new connection!"); /// }, - /// Err(e) => { /* connection failed */ } + /// Err(e) => { /* connection failed */ }, /// } /// } /// # Ok(())} @@ -309,8 +310,8 @@ impl<'a> Stream for Incoming<'a> { /// /// ```rust, no_run /// use futures::prelude::*; -/// use tokio::io::*; /// use tari_comms::memsocket::MemorySocket; +/// use tokio::io::*; /// /// # async fn run() -> ::std::io::Result<()> { /// let (mut socket_a, mut socket_b) = MemorySocket::new_pair(); @@ -407,7 +408,7 @@ impl MemorySocket { impl AsyncRead for MemorySocket { /// Attempt to read from the `AsyncRead` into `buf`. - fn poll_read(mut self: Pin<&mut Self>, mut context: &mut Context, buf: &mut ReadBuf<'_>) -> Poll> { + fn poll_read(mut self: Pin<&mut Self>, context: &mut Context, buf: &mut ReadBuf<'_>) -> Poll> { if self.incoming.is_terminated() { if self.seen_eof { return Poll::Ready(Err(ErrorKind::UnexpectedEof.into())); @@ -444,7 +445,7 @@ impl AsyncRead for MemorySocket { // Either we've exhausted our current buffer or don't have one _ => { self.current_buffer = { - match Pin::new(&mut self.incoming).poll_next(&mut context) { + match Pin::new(&mut self.incoming).poll_next(context) { Poll::Pending => { // If we've read anything up to this point return the bytes read if bytes_read > 0 { diff --git a/comms/src/noise/socket.rs b/comms/src/noise/socket.rs index 3cdb3c0b67..232989eda7 100644 --- a/comms/src/noise/socket.rs +++ b/comms/src/noise/socket.rs @@ -161,7 +161,7 @@ impl NoiseSocket { } fn poll_write_all( - mut context: &mut Context, + context: &mut Context, mut socket: Pin<&mut TSocket>, buf: &[u8], offset: &mut usize, @@ -170,7 +170,7 @@ where TSocket: AsyncWrite, { loop { - let n = ready!(socket.as_mut().poll_write(&mut context, &buf[*offset..]))?; + let n = ready!(socket.as_mut().poll_write(context, &buf[*offset..]))?; trace!( target: LOG_TARGET, "poll_write_all: wrote {}/{} bytes", @@ -216,7 +216,7 @@ where } fn poll_read_exact( - mut context: &mut Context, + context: &mut Context, mut socket: Pin<&mut TSocket>, buf: &mut [u8], offset: &mut usize, @@ -227,7 +227,7 @@ where loop { let mut read_buf = ReadBuf::new(&mut buf[*offset..]); let prev_rem = read_buf.remaining(); - ready!(socket.as_mut().poll_read(&mut context, &mut read_buf))?; + ready!(socket.as_mut().poll_read(context, &mut read_buf))?; let n = prev_rem .checked_sub(read_buf.remaining()) .expect("buffer underflow: prev_rem < read_buf.remaining()"); @@ -252,7 +252,7 @@ where impl NoiseSocket where TSocket: AsyncRead + Unpin { - fn poll_read(&mut self, mut context: &mut Context, buf: &mut [u8]) -> Poll> { + fn poll_read(&mut self, context: &mut Context, buf: &mut [u8]) -> Poll> { loop { trace!(target: LOG_TARGET, "NoiseSocket ReadState::{:?}", self.read_state); match self.read_state { @@ -263,12 +263,7 @@ where TSocket: AsyncRead + Unpin ref mut buf, ref mut offset, } => { - match ready!(poll_read_u16frame_len( - &mut context, - Pin::new(&mut self.socket), - buf, - offset - )) { + match ready!(poll_read_u16frame_len(context, Pin::new(&mut self.socket), buf, offset)) { Ok(Some(frame_len)) => { // Empty Frame if frame_len == 0 { @@ -293,7 +288,7 @@ where TSocket: AsyncRead + Unpin ref mut offset, } => { match ready!(poll_read_exact( - &mut context, + context, Pin::new(&mut self.socket), &mut self.buffers.read_encrypted[..(frame_len as usize)], offset @@ -369,11 +364,7 @@ where TSocket: AsyncRead + Unpin impl NoiseSocket where TSocket: AsyncWrite + Unpin { - fn poll_write_or_flush( - &mut self, - mut context: &mut Context, - buf: Option<&[u8]>, - ) -> Poll>> { + fn poll_write_or_flush(&mut self, context: &mut Context, buf: Option<&[u8]>) -> Poll>> { loop { trace!( target: LOG_TARGET, @@ -436,7 +427,7 @@ where TSocket: AsyncWrite + Unpin frame_len, ref buf, ref mut offset, - } => match ready!(poll_write_all(&mut context, Pin::new(&mut self.socket), buf, offset)) { + } => match ready!(poll_write_all(context, Pin::new(&mut self.socket), buf, offset)) { Ok(()) => { self.write_state = WriteState::WriteEncryptedFrame { frame_len, offset: 0 }; }, @@ -452,7 +443,7 @@ where TSocket: AsyncWrite + Unpin ref mut offset, } => { match ready!(poll_write_all( - &mut context, + context, Pin::new(&mut self.socket), &self.buffers.write_encrypted[..(frame_len as usize)], offset @@ -469,7 +460,7 @@ where TSocket: AsyncWrite + Unpin } }, WriteState::Flush => { - ready!(Pin::new(&mut self.socket).poll_flush(&mut context))?; + ready!(Pin::new(&mut self.socket).poll_flush(context))?; self.write_state = WriteState::Init; }, WriteState::Eof => return Poll::Ready(Err(io::ErrorKind::WriteZero.into())), @@ -595,8 +586,8 @@ where TSocket: AsyncRead + AsyncWrite + Unpin #[derive(Debug)] enum NoiseState { - HandshakeState(HandshakeState), - TransportState(TransportState), + HandshakeState(Box), + TransportState(Box), } macro_rules! proxy_state_method { @@ -629,7 +620,7 @@ impl NoiseState { pub fn into_transport_mode(self) -> Result { match self { - NoiseState::HandshakeState(state) => Ok(NoiseState::TransportState(state.into_transport_mode()?)), + NoiseState::HandshakeState(state) => Ok(NoiseState::TransportState(Box::new(state.into_transport_mode()?))), _ => Err(snow::Error::State(StateProblem::HandshakeAlreadyFinished)), } } @@ -637,13 +628,13 @@ impl NoiseState { impl From for NoiseState { fn from(state: HandshakeState) -> Self { - NoiseState::HandshakeState(state) + NoiseState::HandshakeState(Box::new(state)) } } impl From for NoiseState { fn from(state: TransportState) -> Self { - NoiseState::TransportState(state) + NoiseState::TransportState(Box::new(state)) } } diff --git a/comms/src/peer_manager/wrapper.rs b/comms/src/peer_manager/wrapper.rs index e36b02236c..de6d12dfaf 100644 --- a/comms/src/peer_manager/wrapper.rs +++ b/comms/src/peer_manager/wrapper.rs @@ -41,9 +41,10 @@ impl KeyValueStore for KeyValueWrapper where T: KeyValueStore { fn insert(&self, key: u64, value: Peer) -> Result<(), KeyValStoreError> { - if key == MIGRATION_VERSION_KEY { - panic!("MIGRATION_VERSION_KEY used in `KeyValueWrapper::insert`. MIGRATION_VERSION_KEY is a reserved key"); - } + assert!( + !(key == MIGRATION_VERSION_KEY), + "MIGRATION_VERSION_KEY used in `KeyValueWrapper::insert`. MIGRATION_VERSION_KEY is a reserved key" + ); self.inner.insert(key, value) } @@ -88,9 +89,10 @@ where T: KeyValueStore } fn delete(&self, key: &u64) -> Result<(), KeyValStoreError> { - if key == &MIGRATION_VERSION_KEY { - panic!("MIGRATION_VERSION_KEY used in `KeyValueWrapper::delete`. MIGRATION_VERSION_KEY is a reserved key"); - } + assert!( + !(key == &MIGRATION_VERSION_KEY), + "MIGRATION_VERSION_KEY used in `KeyValueWrapper::delete`. MIGRATION_VERSION_KEY is a reserved key" + ); self.inner.delete(key) } } diff --git a/comms/src/protocol/rpc/client/mod.rs b/comms/src/protocol/rpc/client/mod.rs index 65f8655a74..cfe8ffc9d3 100644 --- a/comms/src/protocol/rpc/client/mod.rs +++ b/comms/src/protocol/rpc/client/mod.rs @@ -807,7 +807,7 @@ where TSubstream: AsyncRead + AsyncWrite + Unpin + Send + StreamId return Err(RpcError::ResponseIdDidNotMatchRequest { actual, expected }); } continue; - } + }, Err(err) => return Err(err), } }; diff --git a/comms/src/protocol/rpc/server/mock.rs b/comms/src/protocol/rpc/server/mock.rs index 8a5e250464..d9183e746c 100644 --- a/comms/src/protocol/rpc/server/mock.rs +++ b/comms/src/protocol/rpc/server/mock.rs @@ -112,7 +112,7 @@ impl RpcRequestMock { /// // async fn my_method(&self, request: Request<()>) -> Result, RpcStatus> { /// // self.request_response(request, &self.my_method).await /// // } -/// impl RpcMock for MyServiceMock{}; +/// impl RpcMock for MyServiceMock {}; /// ``` #[async_trait] pub trait RpcMock { diff --git a/infrastructure/storage/src/lmdb_store/store.rs b/infrastructure/storage/src/lmdb_store/store.rs index bde9e8a7cf..a00c6fc983 100644 --- a/infrastructure/storage/src/lmdb_store/store.rs +++ b/infrastructure/storage/src/lmdb_store/store.rs @@ -721,7 +721,7 @@ impl<'txn, 'db: 'txn> LMDBReadTransaction<'txn, 'db> { { match val { Ok(None) => Ok(None), - Err(e) => Err(LMDBError::GetError(format!("LMDB get error: {}", e.to_string()))), + Err(e) => Err(LMDBError::GetError(format!("LMDB get error: {}", e))), Ok(Some(v)) => match bincode::deserialize(v) { // The reference to v is about to be dropped, so we must copy the data now Ok(val) => Ok(Some(val)), diff --git a/infrastructure/test_utils/src/enums.rs b/infrastructure/test_utils/src/enums.rs index a35e41ec61..333eb1b131 100644 --- a/infrastructure/test_utils/src/enums.rs +++ b/infrastructure/test_utils/src/enums.rs @@ -38,8 +38,11 @@ /// assert_eq!(age, 123); /// assert_eq!(name, "Hubert etc."); /// -/// let e = AnyEnum::Struct{age: 123, name: "Hubert etc."}; -/// unpack_enum!(AnyEnum::Struct{ age, name } = e); +/// let e = AnyEnum::Struct { +/// age: 123, +/// name: "Hubert etc.", +/// }; +/// unpack_enum!(AnyEnum::Struct { age, name } = e); /// assert_eq!(age, 123); /// assert_eq!(name, "Hubert etc."); /// diff --git a/infrastructure/test_utils/src/futures/async_assert_eventually.rs b/infrastructure/test_utils/src/futures/async_assert_eventually.rs index f9a1f3ee9d..0449ab101d 100644 --- a/infrastructure/test_utils/src/futures/async_assert_eventually.rs +++ b/infrastructure/test_utils/src/futures/async_assert_eventually.rs @@ -40,12 +40,11 @@ macro_rules! async_assert_eventually { let mut attempts = 0; while value != $expect { attempts += 1; - if attempts > $max_attempts { - panic!( - "assert_eventually assertion failed. Expression did not equal value after {} attempts.", - $max_attempts - ); - } + assert!( + attempts <= $max_attempts, + "assert_eventually assertion failed. Expression did not equal value after {} attempts.", + attempts + ); tokio::time::sleep($interval).await; value = $check_expr; } @@ -76,12 +75,11 @@ macro_rules! async_assert { let mut attempts = 0; while !($check_expr) { attempts += 1; - if attempts > $max_attempts { - panic!( - "Assertion failed. Expression was not true after {} attempts.", - $max_attempts - ); - } + assert!( + attempts <= $max_attempts, + "Assertion failed. Expression was not true after {} attempts.", + $max_attempts + ); tokio::time::sleep($interval).await; } }}; diff --git a/infrastructure/test_utils/src/futures/mod.rs b/infrastructure/test_utils/src/futures/mod.rs index 7a2f10333f..cf4165bfa0 100644 --- a/infrastructure/test_utils/src/futures/mod.rs +++ b/infrastructure/test_utils/src/futures/mod.rs @@ -30,16 +30,16 @@ mod async_assert_eventually; /// # use tari_test_utils::counter_context; /// /// { -/// let mut my_fut = future::ready(()); -/// counter_context!(cx); // cx variable in scope -/// assert!(my_fut.poll_unpin(&mut cx).is_ready()); +/// let mut my_fut = future::ready(()); +/// counter_context!(cx); // cx variable in scope +/// assert!(my_fut.poll_unpin(&mut cx).is_ready()); /// } /// /// { -/// let mut my_fut = future::ready(()); -/// counter_context!(cx, counter); // cx and counter variables in scope -/// assert!(my_fut.poll_unpin(&mut cx).is_ready()); -/// assert_eq!(counter.get(), 0); // `poll` didn't call the waker +/// let mut my_fut = future::ready(()); +/// counter_context!(cx, counter); // cx and counter variables in scope +/// assert!(my_fut.poll_unpin(&mut cx).is_ready()); +/// assert_eq!(counter.get(), 0); // `poll` didn't call the waker /// } /// ``` #[macro_export] @@ -63,9 +63,9 @@ macro_rules! counter_context { /// # use futures::future::{self, FutureExt}; /// # use tari_test_utils::panic_context; /// -/// let mut my_fut = future::ready(()); -/// panic_context!(cx); // cx variable in scope -/// assert!(my_fut.poll_unpin(&mut cx).is_ready()); +/// let mut my_fut = future::ready(()); +/// panic_context!(cx); // cx variable in scope +/// assert!(my_fut.poll_unpin(&mut cx).is_ready()); /// ``` #[macro_export] macro_rules! panic_context { diff --git a/infrastructure/test_utils/src/streams/mod.rs b/infrastructure/test_utils/src/streams/mod.rs index d3b2beabdd..c03a865264 100644 --- a/infrastructure/test_utils/src/streams/mod.rs +++ b/infrastructure/test_utils/src/streams/mod.rs @@ -51,7 +51,10 @@ where /// /// let mut rt = Runtime::new().unwrap(); /// let mut stream = stream::iter(1..10); -/// assert_eq!(rt.block_on(async { collect_stream!(stream, take=3, timeout=Duration::from_secs(1)) }), vec![1,2,3]); +/// assert_eq!( +/// rt.block_on(async { collect_stream!(stream, take = 3, timeout = Duration::from_secs(1)) }), +/// vec![1, 2, 3] +/// ); /// ``` #[macro_export] macro_rules! collect_stream { @@ -182,8 +185,12 @@ macro_rules! collect_try_recv { /// # use tari_test_utils::collect_stream_count; /// /// let rt = Runtime::new().unwrap(); -/// let mut stream = stream::iter(vec![1,2,2,3,2]); -/// assert_eq!(rt.block_on(async { collect_stream_count!(&mut stream, timeout=Duration::from_secs(1)) }).get(&2), Some(&3)); +/// let mut stream = stream::iter(vec![1, 2, 2, 3, 2]); +/// assert_eq!( +/// rt.block_on(async { collect_stream_count!(&mut stream, timeout = Duration::from_secs(1)) }) +/// .get(&2), +/// Some(&3) +/// ); /// ``` #[macro_export] macro_rules! collect_stream_count { diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 20c6ecf071..493a995cd4 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -10,4 +10,4 @@ # Hours spent updating the Rust Toolchain = 4 [toolchain] -channel = "nightly-2021-09-18" +channel = "nightly-2021-11-20"