Compare commits

..

16 Commits

Author SHA1 Message Date
713ca17c62 WIP: JSONRPC server refactoring
Some checks reported errors
Pyxis/orion/feature%2Fjsonrpc-next Something is wrong with the build of this commit
Pyxis/orion/pipeline/head Something is wrong with the build of this commit
LaCanne/orion/pipeline/head Something is wrong with the build of this commit
2019-02-12 10:17:06 +01:00
0f0213c326 web application base layout 2018-12-06 22:12:32 +01:00
e3bfd27b0a Make roverConfiguration with JSON-RPC possible 2018-12-06 16:37:51 +01:00
128b135d5c Make linter happy ... 2018-12-06 16:37:51 +01:00
dc195d0d21 Fixing tests for new specs 2018-12-06 16:37:51 +01:00
94b4b220c6 Using mdns instead of hardcoded IP ... 2018-12-06 16:37:51 +01:00
b1a4dc162d Fixing go.sum and go.mod 2018-12-06 16:37:51 +01:00
ec2fd846cc Add SkipUpdate() Updater method
Allow to skip the update step and reboot to ReachView
2018-12-06 16:37:51 +01:00
68e9ba80b3 Adding Tests run and improving reply 2018-12-06 16:37:51 +01:00
e0a32a2ecb refactoring server.go 2018-12-06 16:37:51 +01:00
e6ee5d688f Improve JSON-RPC methods for emlid interaction 2018-12-06 16:37:51 +01:00
cadd3482a2 Lint Clean ! 2018-12-06 16:37:51 +01:00
aed2271bf7 Continuing work on JSON-RPC API ! 2018-12-06 16:37:51 +01:00
6a316c53ee Begin of json rpc API and ... making openwrt module work
Openwrt module was broken reworking all module !
2018-12-06 16:37:51 +01:00
1694111ed5 Tag bin/build target as PHONY 2018-12-06 16:37:51 +01:00
2f05a4573b Base implementation of the RPC endpoint 2018-12-06 16:37:51 +01:00
86 changed files with 14135 additions and 2282 deletions

4
.editorconfig Normal file
View File

@ -0,0 +1,4 @@
[*.{js,html,tmpl,json}]
charset = utf-8
indent_style = space
indent_size = 2

3
.gitignore vendored
View File

@ -1,5 +1,4 @@
/vendor /vendor
/bin /bin
/.env /.env
/release /.vscode
*.log

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"printcode.browserPath": "/usr/bin/firefox"
}

2
Jenkinsfile vendored
View File

@ -9,7 +9,7 @@ pipeline {
stage('Prepare environment') { stage('Prepare environment') {
steps { steps {
script { script {
sh 'make install-devtools' sh 'make deps'
sh 'make vendor' sh 'make vendor'
} }
} }

View File

@ -1,4 +1,5 @@
LINT_ARGS ?= ./... LINT_ARGS ?= ./...
DEPLOY_HOST ?= 192.168.100.1
export GO111MODULE := on export GO111MODULE := on
build: bin/server build: bin/server
@ -6,6 +7,10 @@ build: bin/server
bin/server: bin/server:
CGO_ENABLED=0 go build -mod=vendor -v -o ./bin/server ./cmd/server CGO_ENABLED=0 go build -mod=vendor -v -o ./bin/server ./cmd/server
cmd/server/static/dist:
cd cmd/server && npm install
cd cmd/server && npm run build
watch: watch:
modd modd
@ -14,8 +19,7 @@ test: tidy
go test -mod=vendor -v ./... go test -mod=vendor -v ./...
lint: lint:
go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.32.2 @GO111MODULE=off golangci-lint run --tests=false --skip-dirs 'example' -e '.*/pkg/mod' -e ".*/go/src" --enable-all --disable lll $(LINT_ARGS)
go run github.com/golangci/golangci-lint/cmd/golangci-lint run -e '.*/pkg/mod' -e ".*/go/src" --enable-all --disable lll $(LINT_ARGS)
tidy: tidy:
go mod tidy go mod tidy
@ -23,24 +27,28 @@ tidy:
vendor: tidy vendor: tidy
go mod vendor go mod vendor
install-devtools: vendor deps:
# Install modd # Install modd
GO111MODULE=off go get -u github.com/cortesi/modd/cmd/modd GO111MODULE=off go get -u github.com/cortesi/modd/cmd/modd
# Install golangci-lint # Install golangci-lint
GO111MODULE=off go get -u github.com/golangci/golangci-lint/cmd/golangci-lint GO111MODULE=off go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
release: cmd/server/static/dist
rm -rf release
NODE_ENV=production ./script/release
clean: clean:
rm -rf ./bin ./release rm -rf ./bin
go clean -i -x -r -modcache go clean -i -x -r -modcache
deploy: release
rsync -avzz --delete release/server-linux-arm/. root@$(DEPLOY_HOST):/opt/orion/
scp misc/openwrt/orion.init root@$(DEPLOY_HOST):/etc/init.d/orion
ssh root@$(DEPLOY_HOST) chmod +x /etc/init.d/orion
ssh root@$(DEPLOY_HOST) /etc/init.d/orion restart
doc: doc:
@echo "Open your browser to http://localhost:6060/pkg/forge.cadoles.com/Pyxis/orion/ to see the documentation" @echo "Open your browser to http://localhost:6060/pkg/forge.cadoles.com/Pyxis/orion/ to see the documentation"
@godoc -http=:6060 @godoc -http=:6060
release: .PHONY: test clean generate vendor deps lint watch tidy doc bin/server cmd/server/static/dist release
scripts/release
spy-websocket:
echo > websocket.log && sudo tshark -Y websocket.payload -Tfields -e text | tee -a websocket.log
.PHONY: test clean generate vendor install-devtools lint watch tidy doc release

View File

@ -1,58 +0,0 @@
package main
import (
"context"
"flag"
"log"
"time"
"forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid/reachview"
"github.com/davecgh/go-spew/spew"
)
var (
host = "192.168.42.1"
)
func init() {
flag.StringVar(&host, "host", host, "ReachRS module host")
}
func main() {
flag.Parse()
c := connect()
defer c.Close()
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
events, err := c.Broadcast(ctx)
if err != nil {
log.Fatal(err)
}
for e := range events {
log.Printf("received event: %s", spew.Sdump(e))
}
log.Println("done")
}
func connect() *reachview.Client {
c := reachview.NewClient(
emlid.WithEndpoint(host, 80),
)
log.Printf("connecting to module '%s'", host)
if err := c.Connect(); err != nil {
log.Fatal(err)
}
log.Println("connected")
return c
}

View File

@ -1,64 +0,0 @@
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"log"
"time"
"forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid/reachview"
)
var (
host = "192.168.42.1"
)
func init() {
flag.StringVar(&host, "host", host, "ReachRS module host")
}
func main() {
flag.Parse()
c := connect()
defer c.Close()
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
config, err := c.Configuration(ctx)
if err != nil {
log.Fatal(err)
}
data, err := json.MarshalIndent(config, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data))
log.Println("done")
}
func connect() *reachview.Client {
c := reachview.NewClient(
emlid.WithEndpoint(host, 80),
)
log.Printf("connecting to module '%s'", host)
if err := c.Connect(); err != nil {
log.Fatal(err)
}
log.Println("connected")
return c
}

2
cmd/server/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/static/dist
/node_modules

View File

@ -7,6 +7,8 @@ import (
type config struct { type config struct {
HTTPHost string `env:"ORION_HTTP_HOST"` HTTPHost string `env:"ORION_HTTP_HOST"`
HTTPPort string `env:"ORION_HTTP_PORT"` HTTPPort string `env:"ORION_HTTP_PORT"`
TemplateDir string `env:"ORION_TEMPLATE_DIR"`
AssetDir string `env:"ORION_ASSET_DIR"`
} }
func overwriteFromEnv(conf *config) error { func overwriteFromEnv(conf *config) error {
@ -20,5 +22,7 @@ func newDefaultConfig() *config {
return &config{ return &config{
HTTPHost: "0.0.0.0", HTTPHost: "0.0.0.0",
HTTPPort: "8888", HTTPPort: "8888",
TemplateDir: "./templates",
AssetDir: "./static",
} }
} }

525
cmd/server/jsonrpc/rpc.go Normal file
View File

@ -0,0 +1,525 @@
package jsonrpc
import (
"context"
"fmt"
"log"
"net/http"
"time"
"forge.cadoles.com/Cadoles/owrt"
"forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid/reachview"
"forge.cadoles.com/Pyxis/orion/emlid/updater"
"github.com/gorilla/rpc"
"github.com/gorilla/rpc/json"
"github.com/pkg/errors"
)
// OrionService is the JSON-RPC API
type OrionService struct {
UCI *owrt.UCI
}
// NewOrionService create a new OrionService !
func NewOrionService() *OrionService {
uci := owrt.NewUCI()
return &OrionService{
UCI: uci,
}
}
// UCIArgs argument structure for exported method OwrtListWifiDevices
type UCIArgs struct{}
// UCIResponse is the response structure for exposed method OwrtListWifiDevices
type UCIResponse struct {
Devices []map[string]string
}
// OwrtListWifiDevices offers an RPC Method to list Wifi nics in a OpenWRT device.
func (o *OrionService) OwrtListWifiDevices(r *http.Request, args *UCIArgs, reply *UCIResponse) error {
o.UCI.LoadWirelessConf()
devs := o.UCI.GetWifiDevices()
reply.Devices = devs
return nil
}
// ListIfaceArgs argument structure for exported method OwrtListWifiDevices
type ListIfaceArgs struct{}
// ListIfaceResponse is the response structure for exposed method OwrtListWifiDevices
type ListIfaceResponse struct {
Interfaces map[int]*owrt.UCIWirelessInterface
}
// OwrtListWifiInterfaces offers an RPC Method to list wifi interfaces in a OpenWRT device.
func (o *OrionService) OwrtListWifiInterfaces(r *http.Request, args *ListIfaceArgs, reply *ListIfaceResponse) error {
o.UCI.LoadWirelessConf()
reply.Interfaces = o.UCI.GetWifiIfaces()
return nil
}
// CreateIfaceArgs argument structure for exported method OwrtCreateWifiInterface
type CreateIfaceArgs struct {
Cleanup bool
Iface *owrt.UCIWirelessInterface
}
// CreateIfaceResponse argument structure for exported method OwrtCreateWifiInterface
type CreateIfaceResponse struct {
Errors []*owrt.Action
Iface *owrt.UCIWirelessInterface
}
// OwrtCreateWifiInterface Create a WifiInterface in openwrt
func (o *OrionService) OwrtCreateWifiInterface(r *http.Request,
args *CreateIfaceArgs,
reply *CreateIfaceResponse) error {
reply.Iface = nil
if args.Cleanup {
o.UCI.LoadWirelessConf()
w := o.UCI.GetWifiIfaces()
for _, iface := range w {
iface.Delete(o.UCI)
}
o.UCI.Commit()
o.UCI.Reload()
time.Sleep(3 * time.Second)
}
o.UCI.LoadWirelessConf()
create := args.Iface.Create(o.UCI)
if create.ReturnCode != 0 {
reply.Errors = append(reply.Errors, create)
return nil
}
create = args.Iface.SysAdd(o.UCI)
if create.ReturnCode == 233 {
delete := args.Iface.SysDel(o.UCI)
if delete.ReturnCode != 0 {
reply.Errors = append(reply.Errors, delete)
return nil
}
create = args.Iface.SysAdd(o.UCI)
if create.ReturnCode != 0 {
reply.Errors = append(reply.Errors, create)
return nil
}
}
create = args.Iface.Up(o.UCI)
if create.ReturnCode != 0 {
reply.Errors = append(reply.Errors, create)
return nil
}
create = args.Iface.Save(o.UCI)
if create.ReturnCode != 0 {
reply.Errors = append(reply.Errors, create)
return nil
}
reply.Iface = args.Iface
return nil
}
// ConnectIfaceArgs argument structure for exported method OwrtCreateWifiInterface
type ConnectIfaceArgs struct {
Iface *owrt.UCIWirelessInterface
SSID string
Key string
}
// ConnectIfaceResponse argument structure for exported method OwrtCreateWifiInterface
type ConnectIfaceResponse struct {
status int
Errors []string
}
// OwrtConnectWifiInterface connects a given Wifi Interface to a given SSID
func (o *OrionService) OwrtConnectWifiInterface(r *http.Request,
args *ConnectIfaceArgs,
reply *ConnectIfaceResponse) error {
o.UCI.LoadWirelessConf()
iface := o.UCI.GetWifiIface(args.Iface.Index)
cells := iface.Scan()
for _, cell := range cells {
if cell.Ssid == args.SSID {
cn := iface.Connect(o.UCI, cell, args.Key)
if cn.ReturnCode != 0 {
reply.status = cn.ReturnCode
reply.Errors = append(reply.Errors, cn.Stdout, cn.Stderr, cn.Command)
}
reply.status = 0
return nil
}
}
reply.status = 1
msg := fmt.Sprintf("Wifi Cell with SSID %s is not available !", args.SSID)
reply.Errors = append(reply.Errors, msg)
return nil
}
// OrionBox describe an fresh Orion box (base or rover)
type OrionBox struct {
Address string
NewAddress string
SSID string
Security string
WifiKey string
}
// OrionServer describe the Orion master server
type OrionServer struct {
Address string
SSID string
Security string
WifiKey string
ClientIface *owrt.UCIWirelessInterface
}
// UpdateOrionBoxArgs argument structure for exported method OwrtCreateWifiInterface
type UpdateOrionBoxArgs struct {
Box *OrionBox
Server *OrionServer
}
// UpdateOrionBoxResponse argument structure for exported method OwrtCreateWifiInterface
type UpdateOrionBoxResponse struct {
IP string
Netmask string
Synced bool
Version string
Status *updater.UpdateStatus
Results *updater.TestResults
}
// connect wifi interface to a Orion box wifi hotspot!
func (o *OrionService) connectBox(box *OrionBox, server *OrionServer) error {
o.UCI.LoadWirelessConf()
if server == nil {
return fmt.Errorf("Server definition is empty")
}
if box == nil {
return fmt.Errorf("Box definitioni is emtpy")
}
iface := server.ClientIface
cells := iface.Scan()
for _, cell := range cells {
if cell.Ssid == box.SSID {
cn := iface.Connect(o.UCI, cell, box.WifiKey)
if cn.ReturnCode != 0 {
return fmt.Errorf("%s\n%s", cn.Stdout, cn.Stderr)
}
dhcli := owrt.NewDhcpClient(iface.SysDevName)
dhres := dhcli.AskForIP()
if dhres.CmdRes.ReturnCode != 0 {
return fmt.Errorf("%s\n%s", cn.Stdout, cn.Stderr)
}
re := o.UCI.Reload()
if re.ReturnCode != 0 {
return fmt.Errorf("%s\n%s", re.Stdout, re.Stderr)
}
return nil
}
}
return fmt.Errorf("Wifi cell with SSID %s is not available", box.SSID)
}
func (o *OrionService) discoverService(rqContext context.Context) ([]emlid.Service, error) {
ctx, cancelDiscover := context.WithTimeout(rqContext, 55*time.Second)
defer cancelDiscover()
return emlid.Discover(ctx)
}
func (o *OrionService) connectUpdater(rqContext context.Context, box *OrionBox) (*updater.Client, error) {
var boxCli *updater.Client
service, err := o.discoverService(rqContext)
fmt.Printf("DEBUG len = %d\n", len(service))
if len(service) == 0 {
fmt.Println("DEBUG Connecting to box with EndPoint !")
boxCli = updater.NewClient(
emlid.WithEndpoint(box.Address, 80),
)
} else if err == nil {
fmt.Println("DEBUG Connecting to box with Service !")
boxCli = updater.NewClient(
emlid.WithService(service[0]),
)
} else {
fmt.Printf("Non mais là c'est vraiment étrange !")
return nil, err
}
//fmt.Printf("NAME: %s, IP: %s", service[0].Name, service[0].AddrV4)
return boxCli, err
}
// setupMasterWifi connects to the box, add wifi network and join it !
func (o *OrionService) setupMasterWifi(rqContext context.Context, box *OrionBox, server *OrionServer) error {
if err := o.connectBox(box, server); err != nil {
return errors.Wrap(err, "Connect to box failed")
}
if server.Security == "" {
server.Security = string(updater.SecurityWPAPSK)
}
boxCli, cliErr := o.connectUpdater(rqContext, box)
if cliErr != nil {
return errors.Wrap(cliErr, "Creation of updater client failed")
}
if err := boxCli.Connect(); err != nil {
return errors.Wrap(err, "Connecting to Box failed")
}
defer boxCli.Close()
fmt.Println("Running Tests !")
ctx, testResultsCancel := context.WithTimeout(rqContext, 55*time.Second)
defer testResultsCancel()
_, err := boxCli.TestResults(ctx)
if err != nil {
return errors.Wrap(err, "Minimal test failed")
}
fmt.Println("Add Wifi !")
ctx, addWifiCancel := context.WithTimeout(rqContext, 55*time.Second)
defer addWifiCancel()
done, err := boxCli.AddWifiNetwork(ctx, server.SSID, updater.WifiSecurity(server.Security), server.WifiKey)
if err != nil {
return errors.Wrap(err, "AddWifiNetworkFailed")
}
if !done {
return fmt.Errorf("Impossible to add wifi network")
}
ctx, joinWifiCancel := context.WithTimeout(ctx, 55*time.Second)
defer joinWifiCancel()
fmt.Println("Join Wifi !")
if err := boxCli.JoinWifiNetwork(ctx, server.SSID, true); err != nil {
return errors.Wrap(err, "Time sync failed")
}
return nil
}
// updateAndReboot connects to the box with the New address and run basic tests on version dans updates
func (o *OrionService) updateAndReboot(rqContext context.Context, box *OrionBox, reply *UpdateOrionBoxResponse) error {
time.Sleep(3 * time.Second)
boxCli, err := o.connectUpdater(rqContext, box)
if err != nil {
return errors.Wrap(err, "Problem connecting to updater")
}
if err := boxCli.Connect(); err != nil {
fmt.Println("Waiting 3 seconds on error")
time.Sleep(3 * time.Second)
boxCli, clerr := o.connectUpdater(rqContext, box)
if clerr != nil {
return errors.Wrap(err, "Problem connecting to updater")
}
if err := boxCli.Connect(); err != nil {
return errors.Wrap(err, "Connecting to Box on master wifi network failed")
}
}
defer boxCli.Close()
ctx, timeSyncedCancel := context.WithTimeout(rqContext, 55*time.Second)
defer timeSyncedCancel()
synced, err := boxCli.TimeSynced(ctx)
if err != nil {
return errors.Wrap(err, "Time sync failed")
}
reply.Synced = synced
ctx, reachviewVersionCancel := context.WithTimeout(rqContext, 55*time.Second)
defer reachviewVersionCancel()
version, err := boxCli.ReachViewVersion(ctx)
if err != nil {
return err
}
reply.Version = version
ctx, updateCancel := context.WithTimeout(rqContext, 55*time.Second)
defer updateCancel()
status, err := boxCli.Update(ctx)
if err != nil {
return errors.Wrap(err, "System update failed")
}
reply.Status = status
if err := boxCli.SkipUpdate(); err != nil {
log.Fatalf("error while skipping update: %s", err)
}
ctx, rebootCancel := context.WithTimeout(rqContext, 55*time.Second)
defer rebootCancel()
return boxCli.RebootNow(ctx, true)
}
// UpdateOrionBox starts provisionning process for an Orion box (base or rover)
func (o *OrionService) UpdateOrionBox(r *http.Request,
args *UpdateOrionBoxArgs,
reply *UpdateOrionBoxResponse) error {
// if err := o.setupMasterWifi(r.Context(), args.Box, args.Server); err != nil {
// return err
// }
_ = o.setupMasterWifi(r.Context(), args.Box, args.Server)
return o.updateAndReboot(r.Context(), args.Box, reply)
}
// connectReachview creates the client to a reachview module and returns it !
func (o *OrionService) connectReachView(rqContext context.Context, box *OrionBox) (*reachview.Client, error) {
var boxCli *reachview.Client
service, err := o.discoverService(rqContext)
fmt.Printf("DEBUG len = %d\n", len(service))
if len(service) == 0 {
fmt.Println("DEBUG Connecting to box with EndPoint !")
boxCli = reachview.NewClient(
emlid.WithEndpoint(box.Address, 80),
)
} else if err == nil {
fmt.Println("DEBUG Connecting to box with Service !")
boxCli = reachview.NewClient(
emlid.WithService(service[0]),
)
} else {
fmt.Printf("Non mais là c'est vraiment étrange !")
return nil, err
}
//fmt.Printf("NAME: %s, IP: %s", service[0].Name, service[0].AddrV4)
return boxCli, err
}
// ConfigOrionBoxArgs argument structure for exported method OwrtCreateWifiInterface
type ConfigOrionBoxArgs struct {
Box *OrionBox
}
// ConfigOrionBoxResponse argument structure for exported method OwrtCreateWifiInterface
type ConfigOrionBoxResponse struct {
}
func (o *OrionService) resetConfiguration(rqContext context.Context, c *reachview.Client) {
ctx, resetCancel := context.WithTimeout(rqContext, 55*time.Second)
defer resetCancel()
result, _, err := c.ResetConfiguration(ctx)
if err != nil {
log.Fatal(err)
}
if result != reachview.ConfigurationApplySuccess {
log.Fatal("configuration reset failed !")
}
}
// FIXME have to came from parameters !
func (o *OrionService) getCommonConfiguration() *reachview.Configuration {
return &reachview.Configuration{
RTKSettings: &reachview.RTKSettings{
PositioningSystems: &reachview.PositionningSystems{
GPS: reachview.True,
GLONASS: reachview.True,
Galileo: reachview.True,
SBAS: reachview.True,
QZSS: reachview.True,
},
UpdateRate: reachview.String("5"),
},
LoRa: &reachview.LoRa{
AirRate: reachview.String("9.11"),
Frequency: reachview.Float(868000),
OutputPower: reachview.String("20"),
},
PositionOutput: &reachview.PositionOutput{
Output1: &reachview.Output{
Enabled: reachview.False,
},
Output2: &reachview.Output{
Enabled: reachview.False,
},
},
}
}
func (o *OrionService) applyConfiguration(rqContext context.Context, c *reachview.Client, config *reachview.Configuration) error {
ctx, applyConfCancel := context.WithTimeout(rqContext, 55*time.Second)
defer applyConfCancel()
result, _, err := c.ApplyConfiguration(ctx, config)
if err != nil {
return err
}
if result != reachview.ConfigurationApplySuccess {
return fmt.Errorf("Configuration update failed")
}
return c.RestartRTKLib()
}
func (o *OrionService) configureRover(rqContext context.Context, c *reachview.Client) error {
_ = c.Connect()
defer c.Close()
o.resetConfiguration(rqContext, c)
config := o.getCommonConfiguration()
config.RTKSettings.GPSARMode = reachview.GPSARModeFixAndHold
config.RTKSettings.GLONASSARMode = reachview.On
config.RTKSettings.PositionningMode = reachview.PositionningModeKinematic
config.RTKSettings.UpdateRate = reachview.String("5")
config.CorrectionInput = &reachview.CorrectionInput{
Input2: &reachview.Input2{
Input: reachview.Input{
Enabled: reachview.True,
Format: reachview.IOFormatRTCM3,
Type: reachview.IOTypeLoRa,
Path: reachview.String("lora"),
},
SendPositionToBase: reachview.Off,
},
}
config.BaseMode = &reachview.BaseMode{
Output: &reachview.Output{
Enabled: reachview.False,
},
}
log.Println("configuring module as rover")
return o.applyConfiguration(rqContext, c, config)
}
// ConfigureOrionBox starts provisionning process for an Orion box (base or rover)
func (o *OrionService) ConfigureOrionBox(r *http.Request,
args *ConfigOrionBoxArgs,
reply *ConfigOrionBoxResponse) error {
reach, err := o.connectReachView(r.Context(), args.Box)
if err != nil {
return errors.Wrap(err, "Impossible to create ReachView client")
}
fmt.Println("Start Rover Configuraiton !")
return o.configureRover(r.Context(), reach)
}
// NewServer returns a new configured JSON-RPC server
func NewServer() *rpc.Server {
server := rpc.NewServer()
server.RegisterCodec(json.NewCodec(), "application/json")
if err := server.RegisterService(NewOrionService(), "Orion"); err != nil {
panic(err)
}
return server
}

View File

@ -0,0 +1,32 @@
package jsonrpc
import (
"net/http"
"forge.cadoles.com/Cadoles/owrt"
"github.com/davecgh/go-spew/spew"
)
type ScanWifiArgs struct{}
type ScanWifiReply struct {
AccessPoints []*owrt.WifiCell
}
// ScanWifi starts a WiFi scan and returns available access points
func (o *OrionService) ScanWifi(r *http.Request, args *ScanWifiArgs, reply *ScanWifiReply) error {
o.UCI.LoadWirelessConf()
ifaces := o.UCI.GetWifiIfaces()
reply.AccessPoints = make([]*owrt.WifiCell, 0)
for _, iface := range ifaces {
scanner := owrt.NewWifiScanner(iface.Name)
cells := scanner.Scan()
spew.Dump(iface, cells)
reply.AccessPoints = append(reply.AccessPoints, cells...)
}
return nil
}

View File

@ -0,0 +1,32 @@
package jsonrpc
import (
"github.com/gorilla/rpc"
"forge.cadoles.com/wpetit/goweb/service"
"github.com/pkg/errors"
)
const ServiceName service.Name = "jsonrpc"
// From retrieves the JSONRPC service in the given container or panic
func From(container *service.Container) (*rpc.Server, error) {
service, err := container.Service(ServiceName)
if err != nil {
return nil, errors.Wrapf(err, "error while retrieving '%s' service", ServiceName)
}
jsonRPCService, ok := service.(*rpc.Server)
if !ok {
return nil, errors.Errorf("retrieved service is not a valid '%s' service", ServiceName)
}
return jsonRPCService, nil
}
// Must retrieves the json-rpc service in the given container or panic otherwise
func Must(container *service.Container) *rpc.Server {
service, err := From(container)
if err != nil {
panic(err)
}
return service
}

View File

@ -0,0 +1,104 @@
POST http://192.168.100.1:8888/rpc HTTP/1.1
content-type: application/json
{
"id": 0,
"method": "Orion.OwrtListWifiDevices",
"params": []
}
###
POST http://192.168.100.1:8888/rpc HTTP/1.1
content-type: application/json
{
"id": 1,
"method": "Orion.OwrtCreateWifiInterface",
"params": [ {
"Iface": {
"Name": "PyxisNetwork",
"Network": "lan",
"Index": 0,
"Ssid": "Pyxis",
"SysDevName": "wlan0",
"Encryption": "psk2",
"Key": "A2Z3E4R5T6Y7U",
"Device": "radio0",
"DevicePath": "soc/soc:pcie/pci0000:00/0000:00:01.0/0000:01:00.0",
"Mode": "ap"
},
"Cleanup": true
}
]
}
###
POST http://192.168.100.1:8888/rpc HTTP/1.1
content-type: application/json
{
"id": 1,
"method": "Orion.OwrtCreateWifiInterface",
"params": [ {
"Iface": {
"Name": "PyxisClient",
"Index": 1,
"SysDevName": "wlan1",
"Device": "radio1",
"DevicePath": "soc/soc:pcie/pci0000:00/0000:00:02.0/0000:02:00.0",
"Mode": "sta"
},
"Cleanup": false
}]
}
###
POST http://192.168.100.1:8888/rpc HTTP/1.1
content-type: application/json
{
"id": 1,
"method": "Orion.UpdateOrionBox",
"params": [ {
"Box": {
"Address": "",
"NewAddress": "",
"Security": "",
"SSID" : "reach:2a:03",
"WifiKey": "emlidreach"
},
"Server": {
"Address": "",
"SSID": "Pyxis",
"Security": "",
"WifiKey": "A2Z3E4R5T6Y7U",
"ClientIface" : {
"Name": "PyxisClient",
"Index": 1,
"SysDevName": "wlan1",
"Device": "radio1",
"DevicePath": "soc/soc:pcie/pci0000:00/0000:00:02.0/0000:02:00.0",
"Mode": "sta"
}
}
} ]
}
###
POST http://192.168.100.1:8888/rpc HTTP/1.1
content-type: application/json
{
"id": 1,
"method": "Orion.ConfigureOrionBox",
"params": [ {
"Box": {
"Address": "",
"NewAddress": "",
"Security": "",
"SSID" : "reach:2a:03",
"WifiKey": "emlidreach"
}
} ]
}

View File

@ -5,8 +5,20 @@ import (
"log" "log"
"net/http" "net/http"
"github.com/go-chi/chi" "github.com/gorilla/sessions"
"forge.cadoles.com/wpetit/goweb/session/gorilla"
"forge.cadoles.com/wpetit/goweb/template/html"
"github.com/go-chi/chi/middleware" "github.com/go-chi/chi/middleware"
"forge.cadoles.com/wpetit/goweb/service/session"
"forge.cadoles.com/wpetit/goweb/service/template"
"forge.cadoles.com/Pyxis/orion/cmd/server/jsonrpc"
containerMiddleware "forge.cadoles.com/wpetit/goweb/middleware/container"
"forge.cadoles.com/wpetit/goweb/service"
"github.com/go-chi/chi"
) )
var ( var (
@ -19,18 +31,58 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
// Create service container
container := service.NewContainer()
container.Provide(jsonrpc.ServiceName, getJSONRPCServiceProvider())
container.Provide(template.ServiceName, html.ServiceProvider(conf.TemplateDir))
container.Provide(session.ServiceName, getSessionServiceProvider())
r := chi.NewRouter() r := chi.NewRouter()
r.Use(middleware.Recoverer) r.Use(middleware.Recoverer)
r.Use(middleware.RequestID) r.Use(middleware.RequestID)
r.Use(middleware.RealIP)
r.Use(middleware.Logger) r.Use(middleware.Logger)
r.Use(containerMiddleware.ServiceContainer(container))
configureRoutes(r)
hostStr := fmt.Sprintf("%s:%s", conf.HTTPHost, conf.HTTPPort) hostStr := fmt.Sprintf("%s:%s", conf.HTTPHost, conf.HTTPPort)
log.Printf("listening on http://%s", hostStr)
log.Printf("listening on http://%s", hostStr)
if err := http.ListenAndServe(hostStr, r); err != nil { if err := http.ListenAndServe(hostStr, r); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
func getJSONRPCServiceProvider() service.Provider {
jsonrpc := jsonrpc.NewServer()
return func(c *service.Container) (interface{}, error) {
return jsonrpc, nil
}
}
func getSessionServiceProvider() service.Provider {
// Create a new encrypted/authenticated cookie store for the session
cookieStore, err := gorilla.CreateCookieSessionStore(32, 64)
var sessionService session.Service
if err == nil {
sessionService = gorilla.NewSessionService(
"orion",
cookieStore,
&sessions.Options{
HttpOnly: true,
},
)
}
return func(c *service.Container) (interface{}, error) {
if err != nil {
return nil, err
}
return sessionService, nil
}
}

5767
cmd/server/package-lock.json generated Normal file
View File

@ -0,0 +1,5767 @@
{
"name": "server",
"version": "0.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@stimulus/core": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@stimulus/core/-/core-1.1.0.tgz",
"integrity": "sha512-tBQkrijjk8p3ZAhMMu2u87kXbTeBLPWiemoZqmb62krUt/IofQMFrbbiSzPAkkVqlv3kwjs0bmlO3H4fWE9HBQ==",
"dev": true,
"requires": {
"@stimulus/mutation-observers": "^1.1.0"
}
},
"@stimulus/multimap": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@stimulus/multimap/-/multimap-1.1.0.tgz",
"integrity": "sha512-LoAyUhHX5b8/gVXHVMKUXT8vZnXSyJAWs1sopQZNBWDs34zSpWF5tqclf0T3TNg3aCbQlWaHnYv3lickpbrNEQ==",
"dev": true
},
"@stimulus/mutation-observers": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@stimulus/mutation-observers/-/mutation-observers-1.1.0.tgz",
"integrity": "sha512-Tr0bmJEFqAm3o0mJPZcCLurlW+lp8gohFeUQNbkjj9bmCGygQKuWr1b3dwyJgG94qRuzo66QdKkvp04tp1o7lw==",
"dev": true,
"requires": {
"@stimulus/multimap": "^1.1.0"
}
},
"@stimulus/webpack-helpers": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@stimulus/webpack-helpers/-/webpack-helpers-1.1.0.tgz",
"integrity": "sha512-trzloYQ7RBZcYIbB5hLLgYvC7MHJkj1avPFIrEFCd2t7WCFhH5wQApyzAZAS+BtjvFwHp0o1o7Rp1OceRgjOCw==",
"dev": true
},
"@webassemblyjs/ast": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
"integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
"dev": true,
"requires": {
"@webassemblyjs/helper-module-context": "1.7.11",
"@webassemblyjs/helper-wasm-bytecode": "1.7.11",
"@webassemblyjs/wast-parser": "1.7.11"
}
},
"@webassemblyjs/floating-point-hex-parser": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
"integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
"integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
"integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
"dev": true
},
"@webassemblyjs/helper-code-frame": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
"integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
"dev": true,
"requires": {
"@webassemblyjs/wast-printer": "1.7.11"
}
},
"@webassemblyjs/helper-fsm": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
"integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
"dev": true
},
"@webassemblyjs/helper-module-context": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
"integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
"dev": true
},
"@webassemblyjs/helper-wasm-bytecode": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
"integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
"integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/helper-buffer": "1.7.11",
"@webassemblyjs/helper-wasm-bytecode": "1.7.11",
"@webassemblyjs/wasm-gen": "1.7.11"
}
},
"@webassemblyjs/ieee754": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
"integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
"dev": true,
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
"integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
"dev": true,
"requires": {
"@xtuc/long": "4.2.1"
}
},
"@webassemblyjs/utf8": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
"integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
"integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/helper-buffer": "1.7.11",
"@webassemblyjs/helper-wasm-bytecode": "1.7.11",
"@webassemblyjs/helper-wasm-section": "1.7.11",
"@webassemblyjs/wasm-gen": "1.7.11",
"@webassemblyjs/wasm-opt": "1.7.11",
"@webassemblyjs/wasm-parser": "1.7.11",
"@webassemblyjs/wast-printer": "1.7.11"
}
},
"@webassemblyjs/wasm-gen": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
"integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/helper-wasm-bytecode": "1.7.11",
"@webassemblyjs/ieee754": "1.7.11",
"@webassemblyjs/leb128": "1.7.11",
"@webassemblyjs/utf8": "1.7.11"
}
},
"@webassemblyjs/wasm-opt": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
"integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/helper-buffer": "1.7.11",
"@webassemblyjs/wasm-gen": "1.7.11",
"@webassemblyjs/wasm-parser": "1.7.11"
}
},
"@webassemblyjs/wasm-parser": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
"integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/helper-api-error": "1.7.11",
"@webassemblyjs/helper-wasm-bytecode": "1.7.11",
"@webassemblyjs/ieee754": "1.7.11",
"@webassemblyjs/leb128": "1.7.11",
"@webassemblyjs/utf8": "1.7.11"
}
},
"@webassemblyjs/wast-parser": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
"integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/floating-point-hex-parser": "1.7.11",
"@webassemblyjs/helper-api-error": "1.7.11",
"@webassemblyjs/helper-code-frame": "1.7.11",
"@webassemblyjs/helper-fsm": "1.7.11",
"@xtuc/long": "4.2.1"
}
},
"@webassemblyjs/wast-printer": {
"version": "1.7.11",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
"integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/wast-parser": "1.7.11",
"@xtuc/long": "4.2.1"
}
},
"@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.1",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
"integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
"dev": true
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"acorn": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
"integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
"dev": true
},
"acorn-dynamic-import": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
"integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
"dev": true,
"requires": {
"acorn": "^5.0.0"
}
},
"adjust-sourcemap-loader": {
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz",
"integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==",
"dev": true,
"requires": {
"assert": "^1.3.0",
"camelcase": "^1.2.1",
"loader-utils": "^1.1.0",
"lodash.assign": "^4.0.1",
"lodash.defaults": "^3.1.2",
"object-path": "^0.9.2",
"regex-parser": "^2.2.9"
},
"dependencies": {
"camelcase": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
"dev": true
},
"lodash.defaults": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz",
"integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=",
"dev": true,
"requires": {
"lodash.assign": "^3.0.0",
"lodash.restparam": "^3.0.0"
},
"dependencies": {
"lodash.assign": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
"integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
"dev": true,
"requires": {
"lodash._baseassign": "^3.0.0",
"lodash._createassigner": "^3.0.0",
"lodash.keys": "^3.0.0"
}
}
}
}
}
},
"ajv": {
"version": "6.6.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
"integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-errors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
"integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
"dev": true
},
"ajv-keywords": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
"integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
"dev": true
},
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"anymatch": {
"version": "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"
}
},
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true
},
"are-we-there-yet": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"dev": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"arity-n": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
"integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=",
"dev": true
},
"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-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.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"requires": {
"safer-buffer": "~2.1.0"
}
},
"asn1.js": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
"dev": true,
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"assert": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
"integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
"dev": true,
"requires": {
"util": "0.10.3"
}
},
"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
},
"async-each": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
"integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
"dev": true
},
"async-foreach": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
"integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
"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
},
"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.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
"dev": true
},
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
"chalk": "^1.1.3",
"esutils": "^2.0.2",
"js-tokens": "^3.0.2"
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"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"
}
},
"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-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-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"
}
}
}
},
"base64-js": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
"dev": true
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
"requires": {
"tweetnacl": "^0.14.3"
}
},
"big.js": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
"integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
"dev": true
},
"binary-extensions": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
"integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
"dev": true
},
"block-stream": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
"dev": true,
"requires": {
"inherits": "~2.0.0"
}
},
"bluebird": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
"integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
"dev": true
},
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
"dev": true
},
"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"
}
}
}
},
"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": "http://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.0.1",
"resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"dev": true,
"requires": {
"bn.js": "^4.1.0",
"randombytes": "^2.0.1"
}
},
"browserify-sign": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
"integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
"dev": true,
"requires": {
"bn.js": "^4.1.1",
"browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.2",
"elliptic": "^6.0.0",
"inherits": "^2.0.1",
"parse-asn1": "^5.0.0"
}
},
"browserify-zlib": {
"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"
}
},
"buffer": {
"version": "4.9.1",
"resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
"dev": true,
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4",
"isarray": "^1.0.0"
}
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"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-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"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
},
"bulma": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.7.2.tgz",
"integrity": "sha512-6JHEu8U/1xsyOst/El5ImLcZIiE2JFXgvrz8GGWbnDLwTNRPJzdAM0aoUM1Ns0avALcVb6KZz9NhzmU53dGDcQ==",
"dev": true
},
"cacache": {
"version": "11.3.1",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
"integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
"dev": true,
"requires": {
"bluebird": "^3.5.1",
"chownr": "^1.0.1",
"figgy-pudding": "^3.1.0",
"glob": "^7.1.2",
"graceful-fs": "^4.1.11",
"lru-cache": "^4.1.3",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
"rimraf": "^2.6.2",
"ssri": "^6.0.0",
"unique-filename": "^1.1.0",
"y18n": "^4.0.0"
},
"dependencies": {
"y18n": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true
}
}
},
"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"
}
},
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"dev": true
},
"camelcase-keys": {
"version": "2.1.0",
"resolved": "http://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"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"chalk": {
"version": "1.1.3",
"resolved": "http://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"
}
},
"chokidar": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
"integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
"async-each": "^1.0.0",
"braces": "^2.3.0",
"fsevents": "^1.2.2",
"glob-parent": "^3.1.0",
"inherits": "^2.0.1",
"is-binary-path": "^1.0.0",
"is-glob": "^4.0.0",
"lodash.debounce": "^4.0.8",
"normalize-path": "^2.1.1",
"path-is-absolute": "^1.0.0",
"readdirp": "^2.0.0",
"upath": "^1.0.5"
}
},
"chownr": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
"integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
"dev": true
},
"chrome-trace-event": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
"integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
},
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
"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"
}
}
}
},
"cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wrap-ansi": "^2.0.0"
}
},
"clone-deep": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
"integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
"dev": true,
"requires": {
"for-own": "^1.0.0",
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.0",
"shallow-clone": "^1.0.0"
}
},
"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-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
},
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"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.2.1",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
"dev": true
},
"compose-function": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
"integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
"dev": true,
"requires": {
"arity-n": "^1.0.4"
}
},
"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"
}
},
"console-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
"integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
"dev": true,
"requires": {
"date-now": "^0.1.4"
}
},
"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
},
"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
},
"convert-source-map": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
"integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.1"
}
},
"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
},
"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
},
"create-ecdh": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
"integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
"dev": true,
"requires": {
"bn.js": "^4.1.0",
"elliptic": "^6.0.0"
}
},
"create-hash": {
"version": "1.2.0",
"resolved": "http://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": "http://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-spawn": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
"integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
"dev": true,
"requires": {
"lru-cache": "^4.0.1",
"which": "^1.2.9"
}
},
"crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
"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"
}
},
"css": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
"integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"source-map": "^0.6.1",
"source-map-resolve": "^0.5.2",
"urix": "^0.1.0"
}
},
"css-loader": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
"integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
"dev": true,
"requires": {
"babel-code-frame": "^6.26.0",
"css-selector-tokenizer": "^0.7.0",
"icss-utils": "^2.1.0",
"loader-utils": "^1.0.2",
"lodash": "^4.17.11",
"postcss": "^6.0.23",
"postcss-modules-extract-imports": "^1.2.0",
"postcss-modules-local-by-default": "^1.2.0",
"postcss-modules-scope": "^1.1.0",
"postcss-modules-values": "^1.3.0",
"postcss-value-parser": "^3.3.0",
"source-list-map": "^2.0.0"
}
},
"css-selector-tokenizer": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
"integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
"dev": true,
"requires": {
"cssesc": "^0.1.0",
"fastparse": "^1.1.1",
"regexpu-core": "^1.0.0"
}
},
"cssesc": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
"integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
"dev": true
},
"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": "0.2.2",
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
"integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
"dev": true
},
"d": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz",
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
"es5-ext": "^0.10.9"
}
},
"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"
}
},
"date-now": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
"integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
"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"
}
},
"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
},
"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"
},
"dependencies": {
"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-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-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"
}
}
}
},
"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
},
"des.js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
"integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"diffie-hellman": {
"version": "5.0.3",
"resolved": "http://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"
}
},
"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
},
"duplexify": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
"integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
"dev": true,
"requires": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
"readable-stream": "^2.0.0",
"stream-shift": "^1.0.0"
}
},
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"elliptic": {
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
"integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"dev": true,
"requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
"hash.js": "^1.0.0",
"hmac-drbg": "^1.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
}
},
"emojis-list": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
"dev": true
},
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
"enhanced-resolve": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
"integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"memory-fs": "^0.4.0",
"tapable": "^1.0.0"
}
},
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"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"
}
},
"es5-ext": {
"version": "0.10.46",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
"integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
"dev": true,
"requires": {
"es6-iterator": "~2.0.3",
"es6-symbol": "~3.1.1",
"next-tick": "1"
}
},
"es6-iterator": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"dev": true,
"requires": {
"d": "1",
"es5-ext": "^0.10.35",
"es6-symbol": "^3.1.1"
}
},
"es6-symbol": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
"dev": true,
"requires": {
"d": "1",
"es5-ext": "~0.10.14"
}
},
"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-scope": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
"integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
"dev": true,
"requires": {
"esrecurse": "^4.1.0",
"estraverse": "^4.1.1"
}
},
"esrecurse": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
"estraverse": "^4.1.0"
}
},
"estraverse": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
"dev": true
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
},
"events": {
"version": "1.1.1",
"resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
"dev": true
},
"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"
}
},
"execa": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
"integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
"dev": true,
"requires": {
"cross-spawn": "^6.0.0",
"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"
},
"dependencies": {
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
}
}
},
"expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
"extend-shallow": "^2.0.1",
"posix-character-classes": "^0.1.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"dependencies": {
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
}
}
},
"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"
},
"dependencies": {
"is-extendable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
}
}
},
"extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
"expand-brackets": "^2.1.4",
"extend-shallow": "^2.0.1",
"fragment-cache": "^0.2.1",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"dependencies": {
"define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
},
"is-accessor-descriptor": {
"version": "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-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-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"
}
}
}
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
},
"fastparse": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
"dev": true
},
"figgy-pudding": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
"integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
"dev": true
},
"file-loader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz",
"integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==",
"dev": true,
"requires": {
"loader-utils": "^1.0.2",
"schema-utils": "^1.0.0"
}
},
"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"
}
}
}
},
"find-cache-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
"integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
"dev": true,
"requires": {
"commondir": "^1.0.1",
"make-dir": "^1.0.0",
"pkg-dir": "^3.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"
}
},
"flush-write-stream": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
"integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.4"
}
},
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
"for-own": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
"integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
"dev": true,
"requires": {
"for-in": "^1.0.1"
}
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"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"
}
},
"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-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": "1.2.4",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
"integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
"dev": true,
"optional": true,
"requires": {
"nan": "^2.9.2",
"node-pre-gyp": "^0.10.0"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
},
"aproba": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"debug": {
"version": "2.6.9",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ms": "2.0.0"
}
},
"deep-extend": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.21",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safer-buffer": "^2.1.0"
}
},
"ignore-walk": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
},
"ini": {
"version": "1.3.5",
"bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
"version": "2.2.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"debug": "^2.1.2",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
"version": "0.10.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.0",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.1.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.1.10",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.7",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"deep-extend": "^0.5.1",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.6.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"glob": "^7.0.5"
}
},
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"bundled": true,
"dev": true,
"optional": true
},
"semver": {
"version": "5.5.0",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "^1.0.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.2.4",
"minizlib": "^1.1.0",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.1",
"yallist": "^3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
"dev": true
}
}
},
"fstream": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
"integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
"mkdirp": ">=0.5 0",
"rimraf": "2"
}
},
"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"
}
},
"gaze": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
"integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
"dev": true,
"requires": {
"globule": "^1.0.0"
}
},
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
"get-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": "3.0.0",
"resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"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"
}
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"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"
}
}
}
},
"global-modules-path": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.1.tgz",
"integrity": "sha512-y+shkf4InI7mPRHSo2b/k6ix6+NLDtyccYv86whhxrSGX9wjPX1VMITmrDbE1eh7zkzhiWtW2sHklJYoQ62Cxg==",
"dev": true
},
"globule": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
"integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
"dev": true,
"requires": {
"glob": "~7.1.1",
"lodash": "~4.17.10",
"minimatch": "~3.0.2"
}
},
"graceful-fs": {
"version": "4.1.15",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
"dev": true
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
"har-validator": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"dev": true,
"requires": {
"ajv": "^6.5.5",
"har-schema": "^2.0.0"
}
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"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"
}
}
}
},
"hash-base": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
"integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
"dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.1"
}
},
"hosted-git-info": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
"dev": true
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
"icss-replace-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
"integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
"dev": true
},
"icss-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
"integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
"dev": true,
"requires": {
"postcss": "^6.0.1"
}
},
"ieee754": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
"integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
"dev": true
},
"iferr": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
"integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
"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"
}
},
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
"in-publish": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
"integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
"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"
}
},
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
"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.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"interpret": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
"integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
"dev": true
},
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
"dev": true
},
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true,
"requires": {
"binary-extensions": "^1.0.0"
}
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
"is-builtin-module": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true,
"requires": {
"builtin-modules": "^1.0.0"
}
},
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
}
},
"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
}
}
},
"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
},
"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.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"is-fullwidth-code-point": {
"version": "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"
}
},
"is-glob": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
"integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"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-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-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
"is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"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
},
"js-base64": {
"version": "2.4.9",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
"integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==",
"dev": true
},
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
"jsesc": {
"version": "0.5.0",
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"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-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-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
},
"json5": {
"version": "0.5.1",
"resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
"dev": true
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
},
"lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"dev": true,
"requires": {
"invert-kv": "^1.0.0"
}
},
"load-json-file": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0",
"strip-bom": "^2.0.0"
}
},
"loader-runner": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
"integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
"dev": true
},
"loader-utils": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
"dev": true,
"requires": {
"big.js": "^3.1.3",
"emojis-list": "^2.0.0",
"json5": "^0.5.0"
}
},
"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"
},
"dependencies": {
"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
}
}
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
"dev": true
},
"lodash._baseassign": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
"integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
"dev": true,
"requires": {
"lodash._basecopy": "^3.0.0",
"lodash.keys": "^3.0.0"
}
},
"lodash._basecopy": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
"integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
"dev": true
},
"lodash._bindcallback": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
"integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
"dev": true
},
"lodash._createassigner": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
"integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
"dev": true,
"requires": {
"lodash._bindcallback": "^3.0.0",
"lodash._isiterateecall": "^3.0.0",
"lodash.restparam": "^3.0.0"
}
},
"lodash._getnative": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
"dev": true
},
"lodash._isiterateecall": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
"integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
"dev": true
},
"lodash.assign": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
"integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
"dev": true
},
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"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.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
"integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
"dev": true
},
"lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
"dev": true
},
"lodash.isarray": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
"dev": true
},
"lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
"dev": true,
"requires": {
"lodash._getnative": "^3.0.0",
"lodash.isarguments": "^3.0.0",
"lodash.isarray": "^3.0.0"
}
},
"lodash.mergewith": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
"integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
"dev": true
},
"lodash.restparam": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
"integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
"dev": true
},
"lodash.tail": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
"integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
"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"
}
},
"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"
}
},
"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
}
}
},
"map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"dev": true,
"requires": {
"p-defer": "^1.0.0"
}
},
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"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"
}
},
"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"
}
},
"mem": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz",
"integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
"dev": true,
"requires": {
"map-age-cleaner": "^0.1.1",
"mimic-fn": "^1.0.0",
"p-is-promise": "^1.1.0"
}
},
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
"integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
"dev": true,
"requires": {
"errno": "^0.1.3",
"readable-stream": "^2.0.1"
}
},
"meow": {
"version": "3.7.0",
"resolved": "http://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"
}
},
"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"
}
},
"mime-db": {
"version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
"dev": true
},
"mime-types": {
"version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"dev": true,
"requires": {
"mime-db": "~1.37.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
},
"mini-css-extract-plugin": {
"version": "0.4.5",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz",
"integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
"schema-utils": "^1.0.0",
"webpack-sources": "^1.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.0",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"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.1",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
"integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
"dev": true,
"requires": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
},
"dependencies": {
"is-extendable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
}
}
},
"mixin-object": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
"integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
"dev": true,
"requires": {
"for-in": "^0.1.3",
"is-extendable": "^0.1.1"
},
"dependencies": {
"for-in": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
"integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
"dev": true
}
}
},
"mkdirp": {
"version": "0.5.1",
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"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.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"nan": {
"version": "2.11.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
"integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
"dev": true
},
"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"
}
},
"neo-async": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
"integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
"dev": true
},
"next-tick": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
"integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
"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
},
"node-gyp": {
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
"integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
"dev": true,
"requires": {
"fstream": "^1.0.0",
"glob": "^7.0.3",
"graceful-fs": "^4.1.2",
"mkdirp": "^0.5.0",
"nopt": "2 || 3",
"npmlog": "0 || 1 || 2 || 3 || 4",
"osenv": "0",
"request": "^2.87.0",
"rimraf": "2",
"semver": "~5.3.0",
"tar": "^2.0.0",
"which": "1"
},
"dependencies": {
"semver": {
"version": "5.3.0",
"resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
"dev": true
}
}
},
"node-libs-browser": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
"integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
"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": "^1.0.0",
"https-browserify": "^1.0.0",
"os-browserify": "^0.3.0",
"path-browserify": "0.0.0",
"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.10.3",
"vm-browserify": "0.0.4"
},
"dependencies": {
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
}
}
},
"node-sass": {
"version": "4.10.0",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.10.0.tgz",
"integrity": "sha512-fDQJfXszw6vek63Fe/ldkYXmRYK/QS6NbvM3i5oEo9ntPDy4XX7BcKZyTKv+/kSSxRtXXc7l+MSwEmYc0CSy6Q==",
"dev": true,
"requires": {
"async-foreach": "^0.1.3",
"chalk": "^1.1.1",
"cross-spawn": "^3.0.0",
"gaze": "^1.0.0",
"get-stdin": "^4.0.1",
"glob": "^7.0.3",
"in-publish": "^2.0.0",
"lodash.assign": "^4.2.0",
"lodash.clonedeep": "^4.3.2",
"lodash.mergewith": "^4.6.0",
"meow": "^3.7.0",
"mkdirp": "^0.5.1",
"nan": "^2.10.0",
"node-gyp": "^3.8.0",
"npmlog": "^4.0.0",
"request": "^2.88.0",
"sass-graph": "^2.2.4",
"stdout-stream": "^1.4.0",
"true-case-path": "^1.0.2"
}
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
"abbrev": "1"
}
},
"normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"is-builtin-module": "^1.0.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
},
"npm-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"
}
},
"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"
}
},
"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-path": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
"integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=",
"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.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"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"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-homedir": {
"version": "1.0.2",
"resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
"os-locale": {
"version": "1.4.0",
"resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"dev": true,
"requires": {
"lcid": "^1.0.0"
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
"osenv": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
"dev": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"p-is-promise": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
"integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
"dev": true
},
"p-limit": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
"integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
},
"p-try": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
"dev": true
},
"pako": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
"integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==",
"dev": true
},
"parallel-transform": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
"integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
"dev": true,
"requires": {
"cyclist": "~0.2.2",
"inherits": "^2.0.3",
"readable-stream": "^2.1.5"
}
},
"parse-asn1": {
"version": "5.1.1",
"resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
"integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
"dev": true,
"requires": {
"asn1.js": "^4.0.0",
"browserify-aes": "^1.0.0",
"create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.0",
"pbkdf2": "^3.0.3"
}
},
"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"
}
},
"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.0",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
"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": "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-is-absolute": {
"version": "1.0.1",
"resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"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-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0"
}
},
"pbkdf2": {
"version": "3.0.17",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
"integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"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"
}
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"pify": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
"dev": true
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
"pinkie": "^2.0.0"
}
},
"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"
},
"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"
}
}
}
},
"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": "6.0.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
"integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
"dev": true,
"requires": {
"chalk": "^2.4.1",
"source-map": "^0.6.1",
"supports-color": "^5.4.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"postcss-modules-extract-imports": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
"integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
"dev": true,
"requires": {
"postcss": "^6.0.1"
}
},
"postcss-modules-local-by-default": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
"integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
"dev": true,
"requires": {
"css-selector-tokenizer": "^0.7.0",
"postcss": "^6.0.1"
}
},
"postcss-modules-scope": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
"integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
"dev": true,
"requires": {
"css-selector-tokenizer": "^0.7.0",
"postcss": "^6.0.1"
}
},
"postcss-modules-values": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
"integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
"dev": true,
"requires": {
"icss-replace-symbols": "^1.1.0",
"postcss": "^6.0.1"
}
},
"postcss-value-parser": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
"integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
"dev": true
},
"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.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"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
},
"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.1.29",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
"integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
"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"
}
},
"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
},
"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
},
"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
},
"randombytes": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
"integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
"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"
}
},
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"requires": {
"load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^1.0.0"
}
},
"read-pkg-up": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dev": true,
"requires": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
}
},
"readable-stream": {
"version": "2.3.6",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"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"
}
},
"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"
}
},
"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"
}
},
"regenerate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
"integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
"dev": true
},
"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"
}
},
"regex-parser": {
"version": "2.2.9",
"resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.9.tgz",
"integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==",
"dev": true
},
"regexpu-core": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
"dev": true,
"requires": {
"regenerate": "^1.2.1",
"regjsgen": "^0.2.0",
"regjsparser": "^0.1.4"
}
},
"regjsgen": {
"version": "0.2.0",
"resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
"integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
"dev": true
},
"regjsparser": {
"version": "0.1.5",
"resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true,
"requires": {
"jsesc": "~0.5.0"
}
},
"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
},
"repeat-element": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
"integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
"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"
}
},
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"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.0",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.4.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
}
},
"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": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
"dev": true
},
"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
},
"resolve-url-loader": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.0.0.tgz",
"integrity": "sha512-ZzRUnpu+pLkrN2ZBsEEifOD6W+9ZNtdIu+kY3vs+11PwuZ2WykxbAY9qO+S9SmasSDRllxNdSm9IhN8HU4xGKg==",
"dev": true,
"requires": {
"adjust-sourcemap-loader": "^1.1.0",
"camelcase": "^4.1.0",
"compose-function": "^3.0.3",
"convert-source-map": "^1.5.1",
"es6-iterator": "^2.0.3",
"loader-utils": "^1.1.0",
"lodash.defaults": "^4.0.0",
"postcss": "^7.0.0",
"rework": "^1.0.1",
"rework-visit": "^1.0.0",
"source-map": "^0.5.7"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
"chalk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"postcss": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.6.tgz",
"integrity": "sha512-Nq/rNjnHFcKgCDDZYO0lNsl6YWe6U7tTy+ESN+PnLxebL8uBtYX59HZqvrj7YLK5UCyll2hqDsJOo3ndzEW8Ug==",
"dev": true,
"requires": {
"chalk": "^2.4.1",
"source-map": "^0.6.1",
"supports-color": "^5.5.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": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"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
},
"rework": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
"integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
"dev": true,
"requires": {
"convert-source-map": "^0.3.3",
"css": "^2.0.0"
},
"dependencies": {
"convert-source-map": {
"version": "0.3.5",
"resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
"integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=",
"dev": true
}
}
},
"rework-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz",
"integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=",
"dev": true
},
"rimraf": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
"glob": "^7.0.5"
}
},
"ripemd160": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
"dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
}
},
"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"
}
},
"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": "http://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
},
"sass-graph": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
"integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
"dev": true,
"requires": {
"glob": "^7.0.0",
"lodash": "^4.0.0",
"scss-tokenizer": "^0.2.3",
"yargs": "^7.0.0"
}
},
"sass-loader": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz",
"integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==",
"dev": true,
"requires": {
"clone-deep": "^2.0.1",
"loader-utils": "^1.0.1",
"lodash.tail": "^4.1.1",
"neo-async": "^2.5.0",
"pify": "^3.0.0",
"semver": "^5.5.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
}
}
},
"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"
}
},
"scss-tokenizer": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
"integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
"dev": true,
"requires": {
"js-base64": "^2.1.8",
"source-map": "^0.4.2"
},
"dependencies": {
"source-map": {
"version": "0.4.4",
"resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
"amdefine": ">=0.0.4"
}
}
}
},
"semver": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true
},
"serialize-javascript": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
"integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
"dev": true
},
"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.0",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
"integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
"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"
}
}
}
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
"dev": true
},
"sha.js": {
"version": "2.4.11",
"resolved": "http://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"
}
},
"shallow-clone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
"integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
"dev": true,
"requires": {
"is-extendable": "^0.1.1",
"kind-of": "^5.0.0",
"mixin-object": "^2.0.1"
},
"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
}
}
},
"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
},
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"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": {
"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"
}
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"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"
}
},
"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-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-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"
}
}
}
},
"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"
}
}
}
},
"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.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"source-map-resolve": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
"integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"dev": true,
"requires": {
"atob": "^2.1.1",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
"urix": "^0.1.0"
}
},
"source-map-support": {
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
"integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
"spdx-correct": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
"integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
"dev": true
},
"spdx-expression-parse": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
"integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
"dev": true
},
"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"
}
},
"sshpk": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
"integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
"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": "6.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
"integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
"dev": true,
"requires": {
"figgy-pudding": "^3.5.1"
}
},
"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"
}
}
}
},
"stdout-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
"integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
"dev": true,
"requires": {
"readable-stream": "^2.0.1"
}
},
"stimulus": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stimulus/-/stimulus-1.1.0.tgz",
"integrity": "sha512-H5B/jYGoKHW7KZCdkxsjml16wMp9ubHh/Db2ewcMWIV5Y4LOGKqYOKsNDs650DidKdGht8CBTtF7jAodIOHZMA==",
"dev": true,
"requires": {
"@stimulus/core": "^1.1.0",
"@stimulus/webpack-helpers": "^1.1.0"
}
},
"stream-browserify": {
"version": "2.0.1",
"resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
"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.0",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
"dev": true
},
"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"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "http://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": "3.0.1",
"resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-bom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
"dev": true,
"requires": {
"is-utf8": "^0.2.0"
}
},
"strip-eof": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"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"
}
},
"style-loader": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
"integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
"schema-utils": "^1.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
},
"tapable": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
"integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
"dev": true
},
"tar": {
"version": "2.2.1",
"resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
"dev": true,
"requires": {
"block-stream": "*",
"fstream": "^1.0.2",
"inherits": "2"
}
},
"terser": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-3.11.0.tgz",
"integrity": "sha512-5iLMdhEPIq3zFWskpmbzmKwMQixKmTYwY3Ox9pjtSklBLnHiuQ0GKJLhL1HSYtyffHM3/lDIFBnb82m9D7ewwQ==",
"dev": true,
"requires": {
"commander": "~2.17.1",
"source-map": "~0.6.1",
"source-map-support": "~0.5.6"
}
},
"terser-webpack-plugin": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
"integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
"dev": true,
"requires": {
"cacache": "^11.0.2",
"find-cache-dir": "^2.0.0",
"schema-utils": "^1.0.0",
"serialize-javascript": "^1.4.0",
"source-map": "^0.6.1",
"terser": "^3.8.1",
"webpack-sources": "^1.1.0",
"worker-farm": "^1.5.2"
}
},
"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"
}
},
"timers-browserify": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
"integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
"dev": true,
"requires": {
"setimmediate": "^1.0.4"
}
},
"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-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-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"
}
},
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"dev": true,
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
},
"dependencies": {
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
}
}
},
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
"dev": true
},
"true-case-path": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
"integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
"dev": true,
"requires": {
"glob": "^7.1.2"
}
},
"tslib": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
"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
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
"union-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
"integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
"dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
"set-value": "^0.4.3"
},
"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"
}
},
"set-value": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
"integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
"is-plain-object": "^2.0.1",
"to-object-path": "^0.3.0"
}
}
}
},
"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.1",
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
"integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4"
}
},
"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.1.0",
"resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
"integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
"dev": true
},
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
"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
}
}
},
"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.10.3",
"resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
"dev": true,
"requires": {
"inherits": "2.0.1"
},
"dependencies": {
"inherits": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
"integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
"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
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
"dev": true
},
"v8-compile-cache": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
"integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==",
"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"
}
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"vm-browserify": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
"integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
"dev": true,
"requires": {
"indexof": "0.0.1"
}
},
"watchpack": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
"integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
"dev": true,
"requires": {
"chokidar": "^2.0.2",
"graceful-fs": "^4.1.2",
"neo-async": "^2.5.0"
}
},
"webpack": {
"version": "4.27.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.27.1.tgz",
"integrity": "sha512-WArHiLvHrlfyRM8i7f+2SFbr/XbQ0bXqTkPF8JpHOzub5482Y3wx7rEO8stuLGOKOgZJcqcisLhD7LrM/+fVMw==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.7.11",
"@webassemblyjs/helper-module-context": "1.7.11",
"@webassemblyjs/wasm-edit": "1.7.11",
"@webassemblyjs/wasm-parser": "1.7.11",
"acorn": "^5.6.2",
"acorn-dynamic-import": "^3.0.0",
"ajv": "^6.1.0",
"ajv-keywords": "^3.1.0",
"chrome-trace-event": "^1.0.0",
"enhanced-resolve": "^4.1.0",
"eslint-scope": "^4.0.0",
"json-parse-better-errors": "^1.0.2",
"loader-runner": "^2.3.0",
"loader-utils": "^1.1.0",
"memory-fs": "~0.4.1",
"micromatch": "^3.1.8",
"mkdirp": "~0.5.0",
"neo-async": "^2.5.0",
"node-libs-browser": "^2.0.0",
"schema-utils": "^0.4.4",
"tapable": "^1.1.0",
"terser-webpack-plugin": "^1.1.0",
"watchpack": "^1.5.0",
"webpack-sources": "^1.3.0"
},
"dependencies": {
"schema-utils": {
"version": "0.4.7",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
"integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
"dev": true,
"requires": {
"ajv": "^6.1.0",
"ajv-keywords": "^3.1.0"
}
}
}
},
"webpack-cli": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz",
"integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==",
"dev": true,
"requires": {
"chalk": "^2.4.1",
"cross-spawn": "^6.0.5",
"enhanced-resolve": "^4.1.0",
"global-modules-path": "^2.3.0",
"import-local": "^2.0.0",
"interpret": "^1.1.0",
"loader-utils": "^1.1.0",
"supports-color": "^5.5.0",
"v8-compile-cache": "^2.0.2",
"yargs": "^12.0.2"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"camelcase": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
"integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
"dev": true
},
"chalk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"cliui": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
"integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"dev": true,
"requires": {
"string-width": "^2.1.1",
"strip-ansi": "^4.0.0",
"wrap-ansi": "^2.0.0"
}
},
"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"
}
},
"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"
}
},
"invert-kv": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
"dev": true
},
"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
},
"lcid": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
"integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"dev": true,
"requires": {
"invert-kv": "^2.0.0"
}
},
"os-locale": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
"integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
"dev": true,
"requires": {
"execa": "^0.10.0",
"lcid": "^2.0.0",
"mem": "^4.0.0"
}
},
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
}
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0"
}
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"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
},
"yargs": {
"version": "12.0.5",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
"cliui": "^4.0.0",
"decamelize": "^1.2.0",
"find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
"os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
"y18n": "^3.2.1 || ^4.0.0",
"yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
}
},
"webpack-sources": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
"integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
"dev": true,
"requires": {
"source-list-map": "^2.0.0",
"source-map": "~0.6.1"
}
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"which-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
"dev": true
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"dev": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"worker-farm": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
"integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
"dev": true,
"requires": {
"errno": "~0.1.7"
}
},
"wrap-ansi": {
"version": "2.1.0",
"resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
},
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
"dev": true
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
},
"yargs": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
"integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
"dev": true,
"requires": {
"camelcase": "^3.0.0",
"cliui": "^3.2.0",
"decamelize": "^1.1.1",
"get-caller-file": "^1.0.1",
"os-locale": "^1.4.0",
"read-pkg-up": "^1.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^1.0.2",
"which-module": "^1.0.0",
"y18n": "^3.2.1",
"yargs-parser": "^5.0.0"
},
"dependencies": {
"camelcase": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
"dev": true
}
}
},
"yargs-parser": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
"integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
"dev": true,
"requires": {
"camelcase": "^3.0.0"
},
"dependencies": {
"camelcase": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
"dev": true
}
}
}
}
}

26
cmd/server/package.json Normal file
View File

@ -0,0 +1,26 @@
{
"name": "server",
"version": "0.0.0",
"description": "Orion web application",
"main": "static/src/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack-cli",
"watch": "webpack-cli --watch"
},
"author": "Cadoles <contact@cadoles.com>",
"license": "AGPL-3.0",
"devDependencies": {
"bulma": "^0.7.2",
"css-loader": "^1.0.1",
"file-loader": "^2.0.0",
"mini-css-extract-plugin": "^0.4.4",
"node-sass": "^4.10.0",
"resolve-url-loader": "^3.0.0",
"sass-loader": "^7.1.0",
"stimulus": "^1.1.0",
"style-loader": "^0.23.1",
"webpack": "^4.25.0",
"webpack-cli": "^3.1.2"
}
}

37
cmd/server/route.go Normal file
View File

@ -0,0 +1,37 @@
package main
import (
"net/http"
"forge.cadoles.com/wpetit/goweb/middleware/container"
"forge.cadoles.com/wpetit/goweb/service/template"
"forge.cadoles.com/wpetit/goweb/static"
"github.com/go-chi/chi"
"forge.cadoles.com/Pyxis/orion/cmd/server/jsonrpc"
)
func configureRoutes(r *chi.Mux) {
r.Get("/", serveHomepage)
r.Get("/modules", serveModulesList)
r.Post("/rpc", handleJSONRPC)
r.Get("/**", static.Dir(conf.AssetDir, "", r.NotFoundHandler()))
}
func serveHomepage(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/modules", http.StatusFound)
}
func serveModulesList(w http.ResponseWriter, r *http.Request) {
ctn := container.Must(r.Context())
templateService := template.Must(ctn)
if err := templateService.RenderPage(w, "modules_list.html.tmpl", nil); err != nil {
panic(err)
}
}
func handleJSONRPC(w http.ResponseWriter, r *http.Request) {
ctn := container.Must(r.Context())
rpcServer := jsonrpc.Must(ctn)
rpcServer.ServeHTTP(w, r)
}

View File

@ -0,0 +1,21 @@
import { Controller } from "stimulus"
export default class extends Controller {
connect() {
this.updateLinkStatus();
}
updateLinkStatus() {
const href = window.location.href;
const links = Array.from(this.element.querySelectorAll("a[href]"));
links.forEach(l => {
if (l.href === href) {
l.classList.add("is-active");
} else {
l.classList.remove("is-active");
}
});
}
}

View File

@ -0,0 +1,18 @@
import { Controller } from "stimulus"
import { JSONRPC } from "../util/jsonrpc";
export default class extends Controller {
connect() {
this.rpc = new JSONRPC("/rpc");
}
listWifiDevices() {
return this.rpc.call("Orion.ScanWifi");
}
onScanClick() {
this.listWifiDevices().then(result => console.log(result));
}
}

View File

@ -0,0 +1,11 @@
require('bulma/bulma.sass');
import { Application } from "stimulus"
import { definitionsFromContext } from "stimulus/webpack-helpers"
const application = Application.start();
const localContext = require.context("./controllers", true, /\.js$/);
const definitions = [
...definitionsFromContext(localContext),
];
application.load(definitions);

View File

@ -0,0 +1,53 @@
export class RPCError extends Error {
constructor(source) {
super("A remote error occured");
this.source = source;
this.name = this.constructor.name;
if (typeof Error.captureStackTrace === 'function') {
Error.captureStackTrace(this, this.constructor);
} else {
this.stack = (new Error(message)).stack;
}
}
getSource() {
return this.source;
}
}
export class JSONRPC {
constructor(endpoint) {
this.endpoint = endpoint;
this.id = 0;
}
call(method, params, isNotification = false) {
const requestId = this.id++;
return fetch(this.endpoint, {
method: 'POST',
headers:{
'Content-Type': 'application/json',
},
body: JSON.stringify({
id: isNotification ? null : requestId,
method,
params: params || [],
})
})
.then(res => res.json())
.then(result => {
if (result.error) throw new RPCError(result.error);
if (!isNotification && requestId !== result.id) throw new Error("unexpected id in rpc response");
return result;
});
}
}

View File

@ -0,0 +1,27 @@
{{define "base"}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Orion</title>
<link rel="stylesheet" href="/css/server.css">
</head>
<body>
{{template "navbar" .}}
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-3">
{{template "menu" .}}
</div>
<div class="column is-9">
{{block "page_content" .}}{{end}}
</div>
</div>
</div>
</section>
<script type="text/javascript" src="/server.js"></script>
</body>
</html>
{{end}}

View File

@ -0,0 +1,10 @@
{{define "menu"}}
<aside class="menu" data-controller="menu">
<p class="menu-label">
Gestion de la flotte
</p>
<ul class="menu-list">
<li><a href="/modules">Modules</a></li>
</ul>
</aside>
{{end}}

View File

@ -0,0 +1,10 @@
{{define "navbar"}}
<nav class="navbar is-info" role="navigation" aria-label="main navigation">
<div class="container">
<div class="navbar-brand">
<a class="navbar-item" href="/">
<b>Orion</b>
</a>
</div>
</nav>
{{end}}

View File

@ -0,0 +1,24 @@
{{define "page_content"}}
<div data-controller="modules">
<div class="level is-mobile">
<div class="level-left">
<h4 class="is-size-4 level-item">Modules à portée</h4>
</div>
<div class="level-right">
<button data-action="click->modules#onScanClick" class="button is-primary">Scanner</button>
</div>
</div>
<table class="table">
<thead>
<tr>
<th>SSID</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr></tr>
</tbody>
</table>
</div>
{{end}}
{{template "base" .}}

View File

@ -0,0 +1,68 @@
const path = require('path');
const env = process.env;
// Plugins
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
mode: `${env.NODE_ENV ? env.NODE_ENV : 'production'}`,
entry: {
server: './static/src/index.js',
},
devtool: 'eval-source-map',
output: {
filename: '[name].js',
path: path.join(__dirname, 'static', 'dist')
},
module: {
rules: [{
test: /\.(scss|sass)$/,
include: [
path.resolve(__dirname, 'node_modules'),
],
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {}
},
{
loader: "resolve-url-loader",
options: {}
},
{
loader: "sass-loader",
options: {
sourceMap: true,
sourceMapContents: false
}
}
]
},{
test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '/fonts/'
}
}]
},{
test: /\.(svg|png|jpg)(\?v=\d+\.\d+\.\d+)?$/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: '/img/'
}
}]
}]
},
plugins: [
new MiniCssExtractPlugin({
filename: "/css/[name].css",
chunkFilename: "/css/[id].css"
})
]
}

View File

@ -4,7 +4,7 @@ import (
"context" "context"
"sync" "sync"
gosocketio "forge.cadoles.com/Pyxis/golang-socketio" "forge.cadoles.com/Pyxis/golang-socketio"
"forge.cadoles.com/Pyxis/golang-socketio/transport" "forge.cadoles.com/Pyxis/golang-socketio/transport"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -78,19 +78,8 @@ func (c *Client) Close() {
c.conn = nil c.conn = nil
} }
func (c *Client) IsAlive() bool {
if c.conn == nil {
return false
}
return c.conn.IsAlive()
}
// Emit a new event with the given data // Emit a new event with the given data
func (c *Client) Emit(event string, data interface{}) error { func (c *Client) Emit(event string, data interface{}) error {
// enc := json.NewEncoder(os.Stdout)
// enc.SetIndent("", " ")
// enc.Encode(data)
c.Logf("emit '%s' event", event) c.Logf("emit '%s' event", event)
if err := c.conn.Emit(event, data); err != nil { if err := c.conn.Emit(event, data); err != nil {
return errors.Wrapf(err, "error while emitting '%s' event", event) return errors.Wrapf(err, "error while emitting '%s' event", event)
@ -132,13 +121,7 @@ func (c *Client) ReqResp(ctx context.Context,
}() }()
err = c.conn.On(responseEvent, func(_ *gosocketio.Channel, data interface{}) { err = c.conn.On(responseEvent, func(_ *gosocketio.Channel, data interface{}) {
if res != nil {
// enc := json.NewEncoder(os.Stdout)
// enc.SetIndent("", " ")
// enc.Encode(data)
err = mapstructure.WeakDecode(data, res) err = mapstructure.WeakDecode(data, res)
}
once.Do(done) once.Do(done)
}) })
if err != nil { if err != nil {

View File

@ -1,17 +0,0 @@
package common
import (
"forge.cadoles.com/Pyxis/orion/emlid"
)
// Client is a ReachRS Updater client
type Client struct {
*emlid.Client
}
// NewClient returns a new ReachRS ReachView client
func NewClient(opts ...emlid.OptionFunc) *Client {
return &Client{
Client: emlid.NewClient(opts...),
}
}

View File

@ -1,51 +0,0 @@
package common
import (
"context"
"github.com/blang/semver/v4"
"github.com/pkg/errors"
)
type VersionHandlerFunc func(ctx context.Context, version string, stable bool) error
type VersionHandler struct {
Range string
Handler VersionHandlerFunc
}
func NewVersionHandler(versionRange string, h VersionHandlerFunc) *VersionHandler {
return &VersionHandler{
Range: versionRange,
Handler: h,
}
}
func (c *Client) HandleVersion(ctx context.Context, handlers ...*VersionHandler) error {
rawVersion, stable, err := c.ReachViewVersion(ctx)
if err != nil {
return errors.Wrap(err, "could not retrieve reachview version")
}
version, err := semver.ParseTolerant(rawVersion)
if err != nil {
return errors.Wrap(err, "could not parse reachview version")
}
for _, h := range handlers {
versionRange, err := semver.ParseRange(h.Range)
if err != nil {
return errors.Wrap(err, "could not parse handler version range")
}
if !versionRange(version) {
continue
}
if err := h.Handler(ctx, rawVersion, stable); err != nil {
return errors.WithStack(err)
}
}
return nil
}

View File

@ -1,13 +0,0 @@
package common
import "flag"
var runCommonIntegrationTests = flag.Bool(
"common-integration", false,
"Run the 'Common' integration tests (in addition to the unit tests)",
)
var reachHost = flag.String(
"reach-host", "192.168.42.1",
"The Reach module host to use in integration tests",
)

View File

@ -1,60 +0,0 @@
package reachview
import (
"context"
"sync"
gosocketio "forge.cadoles.com/Pyxis/golang-socketio"
"github.com/mitchellh/mapstructure"
"github.com/pkg/errors"
)
const (
eventBroadcast = "broadcast"
)
const (
BroadcastRoverStatus = "rover_status"
BroadcastBaseStatus = "base_status"
BroadcastRTKStatus = "rtk_status"
BroadcastObservations = "observations"
BroadcastTimeMarks = "time_marks"
BroadcastBatteryStatus = "battery_status"
)
// Broadcast is a broadcasted message containing modules status informations.
type Broadcast struct {
Name string `mapstructure:"name"`
Payload map[string]interface{} `mapstructure:"payload"`
}
// Broadcast listens for broadcast messages.
func (c *Client) Broadcast(ctx context.Context) (chan Broadcast, error) {
out := make(chan Broadcast)
closer := new(sync.Once)
handler := func(_ *gosocketio.Channel, data interface{}) {
res := Broadcast{}
if err := mapstructure.WeakDecode(data, &res); err != nil {
c.Logf("error while decoding broadcast message: %s", errors.WithStack(err))
}
select {
case <-ctx.Done():
closer.Do(func() {
c.Off(eventBroadcast)
close(out)
})
return
default:
out <- res
}
}
if err := c.On(eventBroadcast, handler); err != nil {
return nil, errors.WithStack(err)
}
return out, nil
}

View File

@ -1,18 +1,14 @@
package reachview package reachview
import ( import "forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid/common"
)
// Client is a ReachRS Updater client // Client is a ReachRS Updater client
type Client struct { type Client struct {
*common.Client *emlid.Client
} }
// NewClient returns a new ReachRS ReachView client // NewClient returns a new ReachRS ReachView client
func NewClient(opts ...emlid.OptionFunc) *Client { func NewClient(opts ...emlid.OptionFunc) *Client {
return &Client{ client := emlid.NewClient(opts...)
Client: common.NewClient(opts...), return &Client{client}
}
} }

View File

@ -1,11 +1,6 @@
package reachview package reachview
import ( import "context"
"context"
"forge.cadoles.com/Pyxis/orion/emlid/common"
"github.com/pkg/errors"
)
const ( const (
eventGetConfiguration = "get configuration" eventGetConfiguration = "get configuration"
@ -13,7 +8,6 @@ const (
eventApplyConfiguration = "apply configuration" eventApplyConfiguration = "apply configuration"
eventConfigurationApplied = "configuration applied" eventConfigurationApplied = "configuration applied"
eventResetConfiguration = "reset configuration to default" eventResetConfiguration = "reset configuration to default"
eventSettingsResetToDefault = "settings reset to default"
) )
// Configuration fetches and return the current configuration of the ReachRS module // Configuration fetches and return the current configuration of the ReachRS module
@ -48,32 +42,10 @@ func (r *Client) ApplyConfiguration(ctx context.Context, config *Configuration)
} }
// ResetConfiguration resets the module configuration to factory defaults // ResetConfiguration resets the module configuration to factory defaults
func (r *Client) ResetConfiguration(ctx context.Context) error { func (r *Client) ResetConfiguration(ctx context.Context) (string, *Configuration, error) {
err := r.HandleVersion(
ctx,
common.NewVersionHandler("< 2.24.0", func(ctx context.Context, version string, stable bool) error {
res := &configurationApplied{} res := &configurationApplied{}
if err := r.ReqResp(ctx, eventResetConfiguration, nil, eventConfigurationApplied, res); err != nil { if err := r.ReqResp(ctx, eventResetConfiguration, nil, eventConfigurationApplied, res); err != nil {
return errors.WithStack(err) return ConfigurationApplyFailed, nil, err
} }
return res.Result, res.Configuration, nil
if res.Result != ConfigurationApplySuccess {
return errors.New(res.Result)
}
return nil
}),
common.NewVersionHandler(">= 2.24.0", func(ctx context.Context, version string, stable bool) error {
if err := r.ReqResp(ctx, eventResetConfiguration, nil, eventSettingsResetToDefault, nil); err != nil {
return errors.WithStack(err)
}
return nil
}),
)
if err != nil {
return errors.WithStack(err)
}
return nil
} }

View File

@ -80,7 +80,7 @@ type Configuration struct {
// RTKSettings - // RTKSettings -
type RTKSettings struct { type RTKSettings struct {
GLONASSARMode *string `mapstructure:"glonass ar mode,omitempty" json:"glonass ar mode,omitempty"` GLONASSARMode *string `mapstructure:"glonass ar mode,omitempty" json:"glonass ar mode,omitempty"`
UpdateRate *float64 `mapstructure:"update rate,omitempty" json:"update rate,omitempty"` UpdateRate *string `mapstructure:"update rate,omitempty" json:"update rate,omitempty"`
ElevationMaskAngle *string `mapstructure:"elevation mask angle,omitempty" json:"elevation mask angle,omitempty"` ElevationMaskAngle *string `mapstructure:"elevation mask angle,omitempty" json:"elevation mask angle,omitempty"`
MaxHorizontalAcceleration *string `mapstructure:"max horizontal acceleration,omitempty" json:"max horizontal acceleration,omitempty"` MaxHorizontalAcceleration *string `mapstructure:"max horizontal acceleration,omitempty" json:"max horizontal acceleration,omitempty"`
SNRMask *string `mapstructure:"snr mask,omitempty" json:"snr mask,omitempty"` SNRMask *string `mapstructure:"snr mask,omitempty" json:"snr mask,omitempty"`
@ -233,7 +233,7 @@ type Constraints struct {
// LoRaConstraints - // LoRaConstraints -
type LoRaConstraints struct { type LoRaConstraints struct {
Frequency [][]int `mapstructure:"frequency,omitempty" json:"frequency,omitempty"` Frequency *LoRaFrequencyRange `mapstructure:"frequency,omitempty" json:"frequency,omitempty"`
} }
// LoRaFrequencyRange - // LoRaFrequencyRange -

View File

@ -1,56 +0,0 @@
package reachview
import (
"context"
"sync"
"forge.cadoles.com/Pyxis/golang-socketio"
"github.com/pkg/errors"
)
const (
eventReboot = "reboot"
)
// Reboot asks the ReachRS module to reboot
func (c *Client) Reboot(ctx context.Context, waitDisconnect bool) error {
var err error
var wg sync.WaitGroup
if waitDisconnect {
var once sync.Once
done := func() {
c.Off(gosocketio.OnDisconnection)
wg.Done()
}
wg.Add(1)
go func() {
<-ctx.Done()
err = ctx.Err()
once.Do(done)
}()
err = c.On(gosocketio.OnDisconnection, func(h *gosocketio.Channel) {
once.Do(done)
})
if err != nil {
return errors.Wrapf(err, "error while binding to '%s' event", gosocketio.OnDisconnection)
}
}
if err = c.Emit(eventReboot, nil); err != nil {
return err
}
if waitDisconnect {
wg.Wait()
}
return err
}

View File

@ -1,33 +0,0 @@
package reachview
import (
"context"
"testing"
"time"
"forge.cadoles.com/Pyxis/orion/emlid"
)
func TestClientReboot(t *testing.T) {
if !*runRebootTest {
t.Skip("To run this test, use: go test -reboot-test")
}
client := NewClient(
emlid.WithStandardLogger(),
emlid.WithEndpoint(*reachHost, 80),
)
if err := client.Connect(); err != nil {
t.Fatal(err)
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := client.Reboot(ctx, true); err != nil {
t.Error(err)
}
defer client.Close()
}

View File

@ -0,0 +1,142 @@
package reachview
import (
"context"
"forge.cadoles.com/Pyxis/golang-socketio"
"github.com/mitchellh/mapstructure"
)
const (
eventStatusBroadcast = "status broadcast"
)
// StatusBroadcast is a broadcasted message containing modules'
// positioning informations
/* Source sample
{
"receiver time mark count": "0",
"ant type base": "",
"solution status": "-",
"vel enu (m/s) base": "0.000,0.000,0.000",
"time of receiver clock rover": "2018/10/16 13:55:26.006000000",
"baseline length float (m)": "0.000",
"# of rtcm messages rover": "",
"time sys offset (ns)": "26.748,-6.962,0.000,0.000",
"# of average single pos base": "0",
"pos xyz float std (m) rover": "0.000,0.000,0.000",
"ant delta rover": "0.000 0.000 0.000",
"# of rtcm messages corr": "",
"accumulated time to run": "05:45:59.7",
"cpu time for a cycle (ms)": "16",
"Parameter": "Value",
"# of rtcm messages base": "",
"vel enu (m/s) rover": "0.467,0.476,0.577",
"ant type rover": "",
"pos xyz single (m) rover": "4315030.518,379718.279,4666208.342",
"pos xyz (m) base": "0.000,0.000,0.000",
"# of input data corr": "obs(0),nav(0),gnav(0),ion(0),sbs(0),pos(0),dgps(0),ssr(0),err(0)",
"rtk server state": "run",
"pos xyz fixed (m) rover": "0.000,0.000,0.000",
"age of differential (s)": "0.000",
"pos xyz fixed std (m) rover": "0.000,0.000,0.000",
"# of all estimated states": "170",
"processing cycle (ms)": "10",
"ant delta base": "0.000 0.000 0.000",
"# of valid satellites": "6",
"rtklib version": "2.4.3 Emlid b28",
"bytes in input buffer": "0,0",
"# of satellites rover": "11",
"# of input data rover": "obs(103738),nav(60),gnav(45),ion(3305),sbs(0),pos(0),dgps(0),ssr(0),err(0)",
"pos xyz float (m) rover": "0.000,0.000,0.000",
"ratio for ar validation": "0.000",
"pos llh (deg,m) base": "0.00000000,0.00000000,0.000",
"missing obs data count": "4468",
"# of real estimated states": "9",
"baseline length fixed (m)": "0.000",
"# of satellites base": "0",
"last time mark": "-",
"# of input data base": "obs(0),nav(0),gnav(0),ion(0),sbs(0),pos(0),dgps(0),ssr(0),err(0)",
"GDOP/PDOP/HDOP/VDOP": "0.0,0.0,0.0,0.0",
"positioning mode": "kinematic",
"pos llh single (deg,m) rover": "47.32085966,5.02901552,257.086",
"solution interval (s)": "0.200",
"rtklib time mark count": "0"
}
*/
type Status struct {
ReceiverTimeMarkCount int `mapstructure:"receiver time mark count"`
BaseAntType string `mapstructure:"ant type base"`
SolutionStatus string `mapstructure:"solution status"`
PositioningMode string `mapstructure:"positioning mode"`
BaseVelocityEnum string `mapstructure:"vel enu (m/s) base"`
RoverReceiverTime string `mapstructure:"time of receiver clock rover"`
BaselineLengthFloat string `mapstructure:"baseline length float (m)"`
RoverNumberOfRTCMMessages string `mapstructure:"# of rtcm messages rover"`
TimeSysOffset string `mapstructure:"time sys offset (ns)"`
BaseNumberOfAverageSinglePos int `mapstructure:"# of average single pos base"`
RoverPosXYZStandaloneFloat string `mapstructure:"pos xyz float std (m) rover"`
RoverAntDelta string `mapstructure:"ant delta rover"`
NumberOfRTCMCorrection string `mapstructure:"# of rtcm messages corr"`
AccumulatedTimeToRun string `mapstructure:"accumulated time to run"`
CPUTimeForACycle int `mapstructure:"cpu time for a cycle (ms)"`
Parameter string `mapstructure:"Parameter"`
BaseNumberOfRTCMMessages string `mapstructure:"# of rtcm messages base"`
RoverVelocityEnum string `mapstructure:"vel enu (m/s) rover"`
RoverAntType string `mapstructure:"ant type rover"`
RoverPosXYZSingle string `mapstructure:"pos xyz single (m) rover"`
BasePosXYZ string `mapstructure:"pos xyz (m) base"`
NumberOfInputDataCorrection string `mapstructure:"# of input data corr"`
RTKServerState string `mapstructure:"rtk server state"`
RoverPosXYZFixed string `mapstructure:"pos xyz fixed (m) rover"`
AgeOfDifferential float32 `mapstructure:"age of differential (s)"`
RoverPosXYZStandaloneFixed string `mapstructure:"pos xyz fixed std (m) rover"`
NumberOfAllEstimatedStates int `mapstructure:"# of all estimated states"`
ProcessingCycle int `mapstructure:"processing cycle (ms)"`
BaseAntDelta string `mapstructure:"ant delta base"`
NumberOfValidStellites int `mapstructure:"# of valid satellites"`
RTKLibVersion string `mapstructure:"2.4.3 Emlid b28"`
BytesInInputBuffer string `mapstructure:"bytes in input buffer"`
RoverNumberOfSatellites int `mapstructure:"# of satellites rover"`
RoverNumberOfInputData string `mapstructure:"# of input data rover"`
RoverPosXYZFloat string `mapstructure:"pos xyz float (m) rover"`
RatioForARValidation float32 `mapstructure:"ratio for ar validation"`
BasePosLLH string `mapstructure:"pos llh (deg,m) base"`
MissingObsDataCount int `mapstructure:"missing obs data count"`
NumberOfRealEstimatedStates int `mapstructure:"# of real estimated states"`
BaselineLengthFixed float32 `mapstructure:"baseline length fixed (m)"`
BaseNumberOfSatellites int `mapstructure:"# of satellites base"`
LastTimemark string `mapstructure:"last time mark"`
BaseNumberOfInputData string `mapstructure:"# of input data base"`
GdopPdopHdopVdop string `mapstructure:"GDOP/PDOP/HDOP/VDOP"`
RoverPosLLHSingle string `mapstructure:"pos llh single (deg,m) rover"`
SolutionInterval float32 `mapstructure:"solution interval (s)"`
RTKLibTimeMarkCount int `mapstructure:"rtklib time mark count"`
}
// StatusBroadcast listens for StatusBroadcast messages
func (c *Client) StatusBroadcast(ctx context.Context) (chan Status, error) {
out := make(chan Status)
handler := func(_ *gosocketio.Channel, data interface{}) {
res := Status{}
if err := mapstructure.WeakDecode(data, &res); err != nil {
c.Logf("error while decoding status broadcast: %s", err)
}
select {
case <-ctx.Done():
c.Off(eventStatusBroadcast)
close(out)
default:
out <- res
}
}
if err := c.On(eventStatusBroadcast, handler); err != nil {
return nil, err
}
return out, nil
}

View File

@ -10,6 +10,7 @@ import (
) )
func TestReachViewStatusBroadcast(t *testing.T) { func TestReachViewStatusBroadcast(t *testing.T) {
if !*runReachViewIntegrationTests { if !*runReachViewIntegrationTests {
t.Skip("To run this test, use: go test -reachview-integration") t.Skip("To run this test, use: go test -reachview-integration")
} }
@ -26,12 +27,13 @@ func TestReachViewStatusBroadcast(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel() defer cancel()
broadcastChan, err := client.Broadcast(ctx) statuses, err := client.StatusBroadcast(ctx)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
for b := range broadcastChan { for s := range statuses {
spew.Dump(b) spew.Dump(s)
} }
} }

View File

@ -7,11 +7,6 @@ var runReachViewIntegrationTests = flag.Bool(
"Run the 'ReachView' integration tests (in addition to the unit tests)", "Run the 'ReachView' integration tests (in addition to the unit tests)",
) )
var runRebootTest = flag.Bool(
"reboot-test", false,
"Run the updater 'Reboot' test (in addition to the unit tests)",
)
var reachHost = flag.String( var reachHost = flag.String(
"reach-host", "192.168.42.1", "reach-host", "192.168.42.1",
"The Reach module host to use in integration tests", "The Reach module host to use in integration tests",

View File

@ -1,18 +1,15 @@
// Package updater provides an API to communicate with the ReachRS modules "Updater" application // Package updater provides an API to communicate with the ReachRS modules "Updater" application
package updater package updater
import ( import "forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid/common"
)
// Client is a ReachRS Updater client // Client is a ReachRS Updater client
type Client struct { type Client struct {
*common.Client *emlid.Client
} }
// NewClient returns a new ReachRS Updater client // NewClient returns a new ReachRS Updater client
func NewClient(opts ...emlid.OptionFunc) *Client { func NewClient(opts ...emlid.OptionFunc) *Client {
client := common.NewClient(opts...) client := emlid.NewClient(opts...)
return &Client{client} return &Client{client}
} }

View File

@ -1,9 +1,6 @@
package common package updater
import ( import "context"
"context"
"strings"
)
const ( const (
eventGetReachViewVersion = "get reachview version" eventGetReachViewVersion = "get reachview version"
@ -12,15 +9,13 @@ const (
type reachViewVersion struct { type reachViewVersion struct {
Version string `json:"version"` Version string `json:"version"`
Stable bool `json:"bool"`
} }
// ReachViewVersion returns the ReachRS module ReachView version // ReachViewVersion returns the ReachRS module ReachView version
func (c *Client) ReachViewVersion(ctx context.Context) (string, bool, error) { func (c *Client) ReachViewVersion(ctx context.Context) (string, error) {
res := &reachViewVersion{} res := &reachViewVersion{}
if err := c.ReqResp(ctx, eventGetReachViewVersion, nil, eventReachViewVersionResults, res); err != nil { if err := c.ReqResp(ctx, eventGetReachViewVersion, nil, eventReachViewVersionResults, res); err != nil {
return "", false, err return "", err
} }
return res.Version, nil
return strings.TrimSpace(res.Version), res.Stable, nil
} }

View File

@ -1,4 +1,4 @@
package common package updater
import ( import (
"context" "context"
@ -10,7 +10,7 @@ import (
func TestClientReachViewVersion(t *testing.T) { func TestClientReachViewVersion(t *testing.T) {
if !*runCommonIntegrationTests { if !*runUpdaterIntegrationTests {
t.Skip("To run this test, use: go test -updater-integration") t.Skip("To run this test, use: go test -updater-integration")
} }
@ -21,11 +21,9 @@ func TestClientReachViewVersion(t *testing.T) {
if err := client.Connect(); err != nil { if err := client.Connect(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() defer cancel()
version, err := client.ReachViewVersion(ctx)
version, _, err := client.ReachViewVersion(ctx)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
} }

View File

@ -10,8 +10,12 @@ import (
func TestClientRebootNow(t *testing.T) { func TestClientRebootNow(t *testing.T) {
if !*runUpdaterIntegrationTests {
t.Skip("To run this test, use: go test -updater-integration")
}
if !*runRebootTest { if !*runRebootTest {
t.Skip("To run this test, use: go test -reboot-test") t.Skip("To run this test, use: go test -updater-reboot-test")
} }
client := NewClient( client := NewClient(

View File

@ -5,6 +5,7 @@ import "context"
const ( const (
eventUpdate = "update" eventUpdate = "update"
eventOPKGUpdateResult = "opkg update result" eventOPKGUpdateResult = "opkg update result"
eventSkipUpdate = "skip update"
) )
// UpdateStatus embeds informations about update status // UpdateStatus embeds informations about update status
@ -26,3 +27,8 @@ func (c *Client) Update(ctx context.Context) (*UpdateStatus, error) {
) )
return res, nil return res, nil
} }
// SkipUpdate asks the ReachRS module to skip the update
func (c *Client) SkipUpdate() error {
return c.Emit(eventSkipUpdate, nil)
}

View File

@ -7,16 +7,16 @@ var runUpdaterIntegrationTests = flag.Bool(
"Run the 'Updater' integration tests (in addition to the unit tests)", "Run the 'Updater' integration tests (in addition to the unit tests)",
) )
var runRebootTest = flag.Bool(
"updater-reboot-test", false,
"Run the updater 'Reboot' test (in addition to the unit tests)",
)
var runJoinNetworkTest = flag.Bool( var runJoinNetworkTest = flag.Bool(
"updater-join-network-test", false, "updater-join-network-test", false,
"Run the updater 'JoinWiFiNetwork' test (in addition to the unit tests)", "Run the updater 'JoinWiFiNetwork' test (in addition to the unit tests)",
) )
var runRebootTest = flag.Bool(
"reboot-test", false,
"Run the updater 'Reboot' test (in addition to the unit tests)",
)
var reachHost = flag.String( var reachHost = flag.String(
"reach-host", "192.168.42.1", "reach-host", "192.168.42.1",
"The Reach module host to use in integration tests", "The Reach module host to use in integration tests",

View File

@ -6,8 +6,3 @@ var runDiscoveryIntegrationTests = flag.Bool(
"discovery-integration", false, "discovery-integration", false,
"Run the 'Discovery' integration tests (in addition to the unit tests)", "Run the 'Discovery' integration tests (in addition to the unit tests)",
) )
var reachHost = flag.String(
"reach-host", "192.168.42.1",
"The Reach module host to use in integration tests",
)

View File

@ -10,7 +10,7 @@ import (
) )
var ( var (
timeout = 10 * time.Second timeout = 5 * time.Second
) )
func init() { func init() {

View File

@ -1,4 +1,4 @@
# Example: Configurator # Example: ReachView
A simple example of a ReachView client that can: A simple example of a ReachView client that can:
@ -10,7 +10,7 @@ A simple example of a ReachView client that can:
2. Launch the example: 2. Launch the example:
```shell ```shell
go run cmd/configurator/main.go \ go run example/reachview/main.go \
-mode 'rover|base'\ -mode 'rover|base'\
-host '<DEVICE_IP_ADDRESS'\ -host '<DEVICE_IP_ADDRESS'\
``` ```

View File

@ -10,7 +10,6 @@ import (
"forge.cadoles.com/Pyxis/orion/emlid" "forge.cadoles.com/Pyxis/orion/emlid"
"forge.cadoles.com/Pyxis/orion/emlid/reachview" "forge.cadoles.com/Pyxis/orion/emlid/reachview"
"github.com/pkg/errors"
) )
const ( const (
@ -77,7 +76,7 @@ func configureRover() {
config.RTKSettings.GPSARMode = reachview.GPSARModeFixAndHold config.RTKSettings.GPSARMode = reachview.GPSARModeFixAndHold
config.RTKSettings.GLONASSARMode = reachview.On config.RTKSettings.GLONASSARMode = reachview.On
config.RTKSettings.PositionningMode = reachview.PositionningModeKinematic config.RTKSettings.PositionningMode = reachview.PositionningModeKinematic
config.RTKSettings.UpdateRate = reachview.Float(5) config.RTKSettings.UpdateRate = reachview.String("5")
config.CorrectionInput = &reachview.CorrectionInput{ config.CorrectionInput = &reachview.CorrectionInput{
Input2: &reachview.Input2{ Input2: &reachview.Input2{
Input: reachview.Input{ Input: reachview.Input{
@ -89,19 +88,11 @@ func configureRover() {
SendPositionToBase: reachview.Off, SendPositionToBase: reachview.Off,
}, },
} }
config.BaseMode.Output = &reachview.Output{
Enabled: reachview.False,
}
log.Println("configuring module as rover") log.Println("configuring module as rover")
applyConfiguration(c, config) applyConfiguration(c, config)
log.Println("rebooting module")
if err := c.Reboot(context.Background(), true); err != nil {
log.Fatal(errors.Wrap(err, "could not reboot module"))
}
} }
func configureBase() { func configureBase() {
@ -114,96 +105,21 @@ func configureBase() {
log.Println("configuring module as base") log.Println("configuring module as base")
config := getCommonConfiguration() config := getCommonConfiguration()
config.RTKSettings.UpdateRate = reachview.Float(1) config.RTKSettings.UpdateRate = reachview.String("1")
config.BaseMode.Output = &reachview.Output{ config.BaseMode = &reachview.BaseMode{
Output: &reachview.Output{
Enabled: reachview.True, Enabled: reachview.True,
Format: reachview.IOFormatRTCM3, Format: reachview.IOFormatRTCM3,
Type: reachview.IOTypeLoRa, Type: reachview.IOTypeLoRa,
} },
config.BaseMode.BaseCoordinates = &reachview.BaseCoordinates{ BaseCoordinates: &reachview.BaseCoordinates{
Accumulation: reachview.String("1"), Accumulation: reachview.String("1"),
AntennaOffset: &reachview.AntennaOffset{ AntennaOffset: &reachview.AntennaOffset{
East: reachview.String("0"), Up: reachview.String("0"),
North: reachview.String("0"),
Up: reachview.String("2.20"),
}, },
Mode: reachview.BaseCoordinatesModeManual, Mode: reachview.BaseCoordinatesModeAverageSingle,
Format: reachview.BaseCoordinatesFormatLLH, Format: reachview.BaseCoordinatesFormatLLH,
Coordinates: []*string{
reachview.String("0"),
reachview.String("0"),
reachview.String("0"),
}, },
}
applyConfiguration(c, config)
log.Println("rebooting module")
if err := c.Reboot(context.Background(), true); err != nil {
log.Fatal(errors.Wrap(err, "could not reboot module"))
}
}
func applyConfiguration(c *reachview.Client, config *reachview.Configuration) {
ctx, applyConfCancel := context.WithTimeout(context.Background(), 60*time.Second)
defer applyConfCancel()
result, _, err := c.ApplyConfiguration(ctx, config)
if err != nil {
log.Fatal(err)
}
if result != reachview.ConfigurationApplySuccess {
log.Fatal("configuration update failed !")
}
}
func resetConfiguration(c *reachview.Client) {
log.Println("resetting module configuration")
ctx, resetCancel := context.WithTimeout(context.Background(), 10*time.Second)
defer resetCancel()
if err := c.ResetConfiguration(ctx); err != nil {
log.Fatal(err)
}
}
func getCommonConfiguration() *reachview.Configuration {
return &reachview.Configuration{
RTKSettings: &reachview.RTKSettings{
PositioningSystems: &reachview.PositionningSystems{
GPS: reachview.True,
GLONASS: reachview.True,
Galileo: reachview.True,
SBAS: reachview.True,
QZSS: reachview.True,
Compass: reachview.False,
},
MaxHorizontalAcceleration: reachview.String("1"),
GPSARMode: reachview.String("fix-and-hold"),
SNRMask: reachview.String("35"),
GLONASSARMode: reachview.String("off"),
UpdateRate: reachview.Float(5),
ElevationMaskAngle: reachview.String("15"),
PositionningMode: reachview.String("kinematic"),
MaxVerticalAcceleration: reachview.String("1"),
},
LoRa: &reachview.LoRa{
AirRate: reachview.String("9.11"),
Frequency: reachview.Float(868000),
OutputPower: reachview.String("20"),
},
PositionOutput: &reachview.PositionOutput{
Output1: &reachview.Output{
Enabled: reachview.False,
},
Output2: &reachview.Output{
Enabled: reachview.False,
},
},
BaseMode: &reachview.BaseMode{
RTCM3Messages: &reachview.RTCM3Messages{ RTCM3Messages: &reachview.RTCM3Messages{
Type1002: &reachview.RTCMMessageType{ Type1002: &reachview.RTCMMessageType{
Enabled: reachview.True, Enabled: reachview.True,
@ -240,6 +156,73 @@ func getCommonConfiguration() *reachview.Configuration {
Enabled: reachview.False, Enabled: reachview.False,
}, },
}, },
}
applyConfiguration(c, config)
}
func applyConfiguration(c *reachview.Client, config *reachview.Configuration) {
ctx, applyConfCancel := context.WithTimeout(context.Background(), 10*time.Second)
defer applyConfCancel()
result, _, err := c.ApplyConfiguration(ctx, config)
if err != nil {
log.Fatal(err)
}
if result != reachview.ConfigurationApplySuccess {
log.Fatal("configuration update failed !")
}
log.Println("restarting rtklib")
if err := c.RestartRTKLib(); err != nil {
log.Fatal(err)
}
}
func resetConfiguration(c *reachview.Client) {
log.Println("resetting module configuration")
ctx, resetCancel := context.WithTimeout(context.Background(), 10*time.Second)
defer resetCancel()
result, _, err := c.ResetConfiguration(ctx)
if err != nil {
log.Fatal(err)
}
if result != reachview.ConfigurationApplySuccess {
log.Fatal("configuration reset failed !")
}
}
func getCommonConfiguration() *reachview.Configuration {
return &reachview.Configuration{
RTKSettings: &reachview.RTKSettings{
PositioningSystems: &reachview.PositionningSystems{
GPS: reachview.True,
GLONASS: reachview.True,
Galileo: reachview.True,
SBAS: reachview.True,
QZSS: reachview.True,
},
UpdateRate: reachview.String("5"),
},
LoRa: &reachview.LoRa{
AirRate: reachview.String("9.11"),
Frequency: reachview.Float(868000),
OutputPower: reachview.String("20"),
},
PositionOutput: &reachview.PositionOutput{
Output1: &reachview.Output{
Enabled: reachview.False,
},
Output2: &reachview.Output{
Enabled: reachview.False,
},
}, },
} }
} }

View File

@ -11,7 +11,7 @@ A simple example of an updater client wich can:
2. Launch the example in `configure-wifi` phase and provides WiFi network informations. 2. Launch the example in `configure-wifi` phase and provides WiFi network informations.
```shell ```shell
go run cmd/updater/main.go \ go run example/updater/main.go \
-phase 'configure-wifi'\ -phase 'configure-wifi'\
-host '<DEVICE_IP_ADDRESS'\ -host '<DEVICE_IP_ADDRESS'\
-ssid '<WIFI_SSID>'\ -ssid '<WIFI_SSID>'\
@ -21,7 +21,7 @@ A simple example of an updater client wich can:
3. The device will switch to the provided WiFi network, as you should do. 3. The device will switch to the provided WiFi network, as you should do.
4. Launch the example in `update-then-reboot` phase. 4. Launch the example in `update-then-reboot` phase.
```shell ```shell
go run cmd/updater/main.go \ go run example/updater/main.go \
-phase 'update-and-reboot'\ -phase 'update-and-reboot'\
-host '<DEVICE_IP_ADDRESS' -host '<DEVICE_IP_ADDRESS'
``` ```

View File

@ -12,6 +12,8 @@ import (
"forge.cadoles.com/Pyxis/orion/emlid/updater" "forge.cadoles.com/Pyxis/orion/emlid/updater"
) )
const stepSleep = 5
const ( const (
phaseConfigureWifi = "configure-wifi" phaseConfigureWifi = "configure-wifi"
phaseUpdateThenReboot = "update-then-reboot" phaseUpdateThenReboot = "update-then-reboot"
@ -97,6 +99,8 @@ func configureWifi() {
log.Printf("stc activated ? %v", results.STC) log.Printf("stc activated ? %v", results.STC)
log.Printf("ublox activated ? %v", results.UBlox) log.Printf("ublox activated ? %v", results.UBlox)
sleep(stepSleep)
log.Printf("adding wifi network '%s'", ssid) log.Printf("adding wifi network '%s'", ssid)
ctx, addWifiCancel := context.WithTimeout(ctx, 5*time.Second) ctx, addWifiCancel := context.WithTimeout(ctx, 5*time.Second)
@ -110,6 +114,8 @@ func configureWifi() {
log.Fatal("couldnt add wifi network") log.Fatal("couldnt add wifi network")
} }
sleep(stepSleep)
log.Println("connecting module to wifi network") log.Println("connecting module to wifi network")
ctx, joinWifiCancel := context.WithTimeout(ctx, 5*time.Second) ctx, joinWifiCancel := context.WithTimeout(ctx, 5*time.Second)
defer joinWifiCancel() defer joinWifiCancel()
@ -125,47 +131,71 @@ func updateThenReboot() {
c := connect() c := connect()
defer c.Close() defer c.Close()
ctx := context.Background() log.Println("checking module status")
ctx, testResultsCancel := context.WithTimeout(context.Background(), 20*time.Second)
defer testResultsCancel()
results, err := c.TestResults(ctx)
if err != nil {
log.Fatalf("error while checking device state: %s", err)
}
log.Printf("device: '%s'", results.Device)
log.Printf("lora activated ? %v", results.Lora)
log.Printf("mpu activated ? %v", results.MPU)
log.Printf("stc activated ? %v", results.STC)
log.Printf("ublox activated ? %v", results.UBlox)
sleep(stepSleep)
log.Println("checking time sync") log.Println("checking time sync")
ctx, timeSyncedCancel := context.WithTimeout(ctx, 5*time.Second) ctx, timeSyncedCancel := context.WithTimeout(context.Background(), 20*time.Second)
defer timeSyncedCancel() defer timeSyncedCancel()
synced, err := c.TimeSynced(ctx) synced, err := c.TimeSynced(ctx)
if err != nil { if err != nil {
log.Fatal(err) log.Fatalf("error while checking time sync status: %s", err)
} }
log.Printf("time synced ? %v", synced) log.Printf("time synced ? %v", synced)
log.Println("checking reachview version") sleep(stepSleep)
ctx, reachviewVersionCancel := context.WithTimeout(ctx, 5*time.Second)
defer reachviewVersionCancel() log.Println("checking for upgrade")
version, _, err := c.ReachViewVersion(ctx) ctx, upgradeAvailableCancel := context.WithTimeout(context.Background(), 20*time.Second)
defer upgradeAvailableCancel()
_, _, err = c.ReceiverUpgradeAvailable(ctx)
if err != nil { if err != nil {
log.Fatal(err) log.Fatalf("error while checking for upgrade: %s", err)
}
sleep(stepSleep)
log.Println("checking reachview version")
ctx, reachviewVersionCancel := context.WithTimeout(context.Background(), 20*time.Second)
defer reachviewVersionCancel()
version, err := c.ReachViewVersion(ctx)
if err != nil {
log.Fatalf("error while checking version: %s", err)
} }
log.Printf("reachview version ? '%s'", version) log.Printf("reachview version ? '%s'", version)
log.Println("checking for update") sleep(stepSleep)
ctx, updateCancel := context.WithTimeout(ctx, 5*time.Second)
defer updateCancel() log.Println("skipping update")
status, err := c.Update(ctx) if err := c.SkipUpdate(); err != nil {
if err != nil { log.Fatalf("error while skipping update: %s", err)
log.Fatal(err)
} }
log.Printf("is update running ? %v", status.Active) sleep(stepSleep)
log.Printf("is update locked ? %v", status.Locked)
log.Printf("last update state ? '%s'", status.State)
if status.Active {
log.Fatal("cannot reboot while an update is active")
}
log.Println("rebooting device") log.Println("rebooting device")
ctx, rebootCancel := context.WithTimeout(ctx, 5*time.Second) ctx, rebootCancel := context.WithTimeout(context.Background(), 20*time.Second)
defer rebootCancel() defer rebootCancel()
if err := c.RebootNow(ctx, true); err != nil { if err := c.RebootNow(ctx, true); err != nil {
log.Fatal(err) log.Fatalf("error while rebooting: %s", err)
} }
} }
func sleep(seconds int) {
log.Printf("sleeping for %d seconds...", seconds)
time.Sleep(time.Duration(seconds) * time.Second)
}

23
go.mod
View File

@ -1,19 +1,26 @@
module forge.cadoles.com/Pyxis/orion module forge.cadoles.com/Pyxis/orion
go 1.15
require ( require (
forge.cadoles.com/Cadoles/owrt v0.0.0-20181112081730-972e21754f2d
forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95 forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95
github.com/blang/semver/v4 v4.0.0 forge.cadoles.com/wpetit/goweb v0.0.0-20181207091353-38f4c7b7359c
github.com/caarlos0/env v3.5.0+incompatible github.com/caarlos0/env v3.4.0+incompatible
github.com/cenkalti/backoff v2.0.0+incompatible // indirect github.com/cenkalti/backoff v2.0.0+incompatible // indirect
github.com/davecgh/go-spew v1.1.1 github.com/davecgh/go-spew v1.1.1
github.com/go-chi/chi v3.3.3+incompatible github.com/go-chi/chi v3.3.3+incompatible
github.com/golangci/golangci-lint v1.32.2 // indirect github.com/gorilla/rpc v1.1.0
github.com/gorilla/websocket v1.4.2 // indirect github.com/gorilla/sessions v1.1.3
github.com/gorilla/websocket v1.4.0 // indirect
github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1 github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1
github.com/miekg/dns v1.0.12 // indirect
github.com/mitchellh/mapstructure v1.1.2 github.com/mitchellh/mapstructure v1.1.2
github.com/pkg/errors v0.9.1 github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 // indirect
github.com/pkg/errors v0.8.0
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 // indirect github.com/stretchr/testify v1.2.2 // indirect
golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 // indirect
golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 // indirect
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect
golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e // indirect
golang.org/x/text v0.3.0 // indirect
) )

617
go.sum
View File

@ -1,637 +1,48 @@
4d63.com/gochecknoglobals v0.0.0-20201008074935-acfc0b28355a h1:wFEQiK85fRsEVF0CRrPAos5LoAryUsIX1kPW/WrIqFw= forge.cadoles.com/Cadoles/owrt v0.0.0-20181112081730-972e21754f2d h1:JrHRNqeepC+rk7/06UYd9a/+WA/CppGswZdmRNyzSgU=
4d63.com/gochecknoglobals v0.0.0-20201008074935-acfc0b28355a/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= forge.cadoles.com/Cadoles/owrt v0.0.0-20181112081730-972e21754f2d/go.mod h1:VLonz5tZXLI6NIndv6vr3741fCLntobz4gIG37b96xo=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95 h1:o3G5+9RjczCK1xAYFaRMknk1kY9Ule6PNfiW6N6hEpg= forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95 h1:o3G5+9RjczCK1xAYFaRMknk1kY9Ule6PNfiW6N6hEpg=
forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95/go.mod h1:I6kYOFWNkFlNeQLI7ZqfTRz4NdPHZxX0Bzizmzgchs0= forge.cadoles.com/Pyxis/golang-socketio v0.0.0-20180919100209-bb857ced6b95/go.mod h1:I6kYOFWNkFlNeQLI7ZqfTRz4NdPHZxX0Bzizmzgchs0=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= forge.cadoles.com/wpetit/goweb v0.0.0-20181207091353-38f4c7b7359c h1:kGi00vgn8lniN9MSelOWGeJMiRsXWeQyCc6mio00ayI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= forge.cadoles.com/wpetit/goweb v0.0.0-20181207091353-38f4c7b7359c/go.mod h1:0zrl4O5z1OWAlQYtFF8/O/iGpCMsiDmbXx3ZO+PNG3o=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Djarvur/go-err113 v0.0.0-20200511133814-5174e21577d5 h1:XTrzB+F8+SpRmbhAH8HLxhiiG6nYNwaBZjrFps1oWEk=
github.com/Djarvur/go-err113 v0.0.0-20200511133814-5174e21577d5/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us=
github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/blang/semver v1.1.0 h1:ol1rO7QQB5uy7umSNV7VAmLugfLRD+17sYJujRNYPhg=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/bombsimon/wsl/v3 v3.1.0 h1:E5SRssoBgtVFPcYWUOFJEcgaySgdtTNYzsSKDOY7ss8=
github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
github.com/caarlos0/env v3.4.0+incompatible h1:FRwBdvENjLHZoUbFnULnFss9wKtcapdaM35DfxiTjeM= github.com/caarlos0/env v3.4.0+incompatible h1:FRwBdvENjLHZoUbFnULnFss9wKtcapdaM35DfxiTjeM=
github.com/caarlos0/env v3.4.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y= github.com/caarlos0/env v3.4.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y=
github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs=
github.com/caarlos0/env v3.5.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y=
github.com/cenkalti/backoff v2.0.0+incompatible h1:5IIPUHhlnUZbcHQsQou5k1Tn58nJkeJL9U+ig5CHJbY= github.com/cenkalti/backoff v2.0.0+incompatible h1:5IIPUHhlnUZbcHQsQou5k1Tn58nJkeJL9U+ig5CHJbY=
github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.0.0+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/daixiang0/gci v0.2.4 h1:BUCKk5nlK2m+kRIsoj+wb/5hazHvHeZieBKWd9Afa8Q=
github.com/daixiang0/gci v0.2.4/go.mod h1:+AV8KmHTGxxwp/pY84TLQfFKp2vuKXXJVzF3kD/hfR4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denis-tingajkin/go-header v0.3.1 h1:ymEpSiFjeItCy1FOP+x0M2KdCELdEAHUsNa8F+hHc6w=
github.com/denis-tingajkin/go-header v0.3.1/go.mod h1:sq/2IxMhaZX+RRcgHfCRx/m0M5na0fBt4/CRe7Lrji0=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-chi/chi v3.3.3+incompatible h1:KHkmBEMNkwKuK4FdQL7N2wOeB9jnIx7jR5wsuSBEFI8= github.com/go-chi/chi v3.3.3+incompatible h1:KHkmBEMNkwKuK4FdQL7N2wOeB9jnIx7jR5wsuSBEFI8=
github.com/go-chi/chi v3.3.3+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-chi/chi v3.3.3+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
github.com/go-critic/go-critic v0.5.2 h1:3RJdgf6u4NZUumoP8nzbqiiNT8e1tC2Oc7jlgqre/IA= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/go-critic/go-critic v0.5.2/go.mod h1:cc0+HvdE3lFpqLecgqMaJcvWWH77sLdBp+wLGPM1Yyo= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/gorilla/rpc v1.1.0 h1:marKfvVP0Gpd/jHlVBKCQ8RAoUPdX7K1Nuh6l1BNh7A=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/gorilla/rpc v1.1.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9RU=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g=
github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8=
github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ=
github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k=
github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw=
github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU=
github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg=
github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI=
github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc=
github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4=
github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk=
github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo=
github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY=
github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0=
github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM=
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w=
github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw=
github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8=
github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8=
github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o=
github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d h1:pXTK/gkVNs7Zyy7WKgLXmpQ5bHTrq5GDsp8R9Qs67g0=
github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU=
github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks=
github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU=
github.com/golangci/golangci-lint v1.32.2 h1:CgIeFWTLJ3Nt1w/WU1RO351j/CjN6LIVjppbJfI9nMk=
github.com/golangci/golangci-lint v1.32.2/go.mod h1:ydr+IqtIVyAh72L16aK0bNdNg/YGa+AEgdbKj9MluzI=
github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI=
github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU=
github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA=
github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA=
github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o=
github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk=
github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA=
github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us=
github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI=
github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg=
github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys=
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gookit/color v1.3.1/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
github.com/gostaticanalysis/analysisutil v0.1.0 h1:E4c8Y1EQURbBEAHoXc/jBTK7Np14ArT8NPUiSFOl9yc=
github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw=
github.com/gostaticanalysis/comment v1.3.0 h1:wTVgynbFu8/nz6SGgywA0TcyIoAVsYc7ai/Zp5xNGlw=
github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI=
github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1 h1:VSELJSxQlpi1bz4ZwT+93hPpzNLRcgytLr77iVRJpcE= github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1 h1:VSELJSxQlpi1bz4ZwT+93hPpzNLRcgytLr77iVRJpcE=
github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1/go.mod h1:YjKB0WsLXlMkO9p+wGTCoPIDGRJH0mz7E526PxkQVxI= github.com/grandcat/zeroconf v0.0.0-20180329153754-df75bb3ccae1/go.mod h1:YjKB0WsLXlMkO9p+wGTCoPIDGRJH0mz7E526PxkQVxI=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a h1:GmsqmapfzSJkm28dhRoHz2tLRbJmqhU86IPgBtN3mmk=
github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s=
github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3 h1:jNYPNLe3d8smommaoQlK7LOA5ESyUJJ+Wf79ZtA7Vp4=
github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kyoh86/exportloopref v0.1.7 h1:u+iHuTbkbTS2D/JP7fCuZDo/t3rBVGo3Hf58Rc+lQVY=
github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKoALdbQ=
github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU=
github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE=
github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mbilski/exhaustivestruct v1.1.0 h1:4ykwscnAFeHJruT+EY3M3vdeP8uXMh0VV2E61iR7XD8=
github.com/mbilski/exhaustivestruct v1.1.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc=
github.com/miekg/dns v1.0.12 h1:814rTNaw7Q7pGncpSEDT06YS8rdGmpUEnKgpQzctJsk= github.com/miekg/dns v1.0.12 h1:814rTNaw7Q7pGncpSEDT06YS8rdGmpUEnKgpQzctJsk=
github.com/miekg/dns v1.0.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.0.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 h1:CXwSGu/LYmbjEab5aMCs5usQRVBGThelUKBNnoSOuso=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0=
github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4=
github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k=
github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nakabonne/nestif v0.3.0 h1:+yOViDGhg8ygGrmII72nV9B/zGxY188TYpfolntsaPw=
github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c=
github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E=
github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nishanths/exhaustive v0.1.0 h1:kVlMw8h2LHPMGUVqUj6230oQjjTMFjwcZrnkhXzFfl8=
github.com/nishanths/exhaustive v0.1.0/go.mod h1:S1j9110vxV1ECdCudXRkeMnFQ/DQk9ajLT0Uf2MYZQQ=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA=
github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw=
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/polyfloyd/go-errorlint v0.0.0-20201006195004-351e25ade6e3 h1:Amgs0nbayPhBNGh1qPqqr2e7B2qNAcBgRjnBH/lmn8k=
github.com/polyfloyd/go-errorlint v0.0.0-20201006195004-351e25ade6e3/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
github.com/quasilyte/go-ruleguard v0.2.0 h1:UOVMyH2EKkxIfzrULvA9n/tO+HtEhqD9mrLSWMr5FwU=
github.com/quasilyte/go-ruleguard v0.2.0/go.mod h1:2RT/tf0Ce0UDj5y243iWKosQogJd8+1G3Rs2fxmlYnw=
github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY=
github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryancurrah/gomodguard v1.1.0 h1:DWbye9KyMgytn8uYpuHkwf0RHqAYO6Ay/D0TbCpPtVU=
github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM=
github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw=
github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/securego/gosec/v2 v2.5.0 h1:kjfXLeKdk98gBe2+eYRFMpC4+mxmQQtbidpiiOQ69Qc=
github.com/securego/gosec/v2 v2.5.0/go.mod h1:L/CDXVntIff5ypVHIkqPXbtRpJiNCh6c6Amn68jXDjo=
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU=
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs=
github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY=
github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI=
github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ=
github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4=
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/ssgreg/nlreturn/v2 v2.1.0 h1:6/s4Rc49L6Uo6RLjhWZGBpWWjfzk2yrf1nIW8m4wgVA=
github.com/ssgreg/nlreturn/v2 v2.1.0/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 h1:Xr9gkxfOP0KQWXKNqmwe8vEeSUiUj4Rlee9CMVX2ZUQ=
github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM=
github.com/tetafro/godot v0.4.9 h1:dSOiuasshpevY73eeI3+zaqFnXSBKJ3mvxbyhh54VRo=
github.com/tetafro/godot v0.4.9/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0=
github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q=
github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tomarrell/wrapcheck v0.0.0-20200807122107-df9e8bcb914d h1:3EZyvNUMsGD1QA8cu0STNn1L7I77rvhf2IhOcHYQhSw=
github.com/tomarrell/wrapcheck v0.0.0-20200807122107-df9e8bcb914d/go.mod h1:yiFB6fFoV7saXirUGfuK+cPtUh4NX/Hf5y2WC2lehu0=
github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa h1:RC4maTWLKKwb7p1cnoygsbKIgNlJqSYBeAFON3Ar8As=
github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig=
github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA=
github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA=
github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg=
github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA=
github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjPs=
github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA=
github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY=
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 h1:Vk3wNqEZwyGyei9yq5ekj7frek2u7HUfffJ1/opblzc= golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4 h1:Vk3wNqEZwyGyei9yq5ekj7frek2u7HUfffJ1/opblzc=
golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 h1:phUcVbl53swtrUN8kQEXFhUxPlIlWyBfKmidCu7P95o=
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 h1:czFLhve3vsQetD6JOJ8NZZvGQIXlnN3/yXxbT6/awxI= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 h1:czFLhve3vsQetD6JOJ8NZZvGQIXlnN3/yXxbT6/awxI=
golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e h1:EfdBzeKbFSvOjoIqSZcfS8wp0FBLokGBEs9lz1OtSg0= golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e h1:EfdBzeKbFSvOjoIqSZcfS8wp0FBLokGBEs9lz1OtSg0=
golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200321224714-0d839f3cf2ed/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20201011145850-ed2f50202694/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20201013201025-64a9e34f3752 h1:2ntEwh02rqo2jSsrYmp4yKHHjh0CbXP3ZtSUetSB+q8=
golang.org/x/tools v0.0.0-20201013201025-64a9e34f3752/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.6 h1:W18jzjh8mfPez+AwGLxmOImucz/IFjpNlrKVnaj2YVc=
honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY=
mvdan.cc/gofumpt v0.0.0-20200802201014-ab5a8192947d h1:t8TAw9WgTLghti7RYkpPmqk4JtQ3+wcP5GgZqgWeWLQ=
mvdan.cc/gofumpt v0.0.0-20200802201014-ab5a8192947d/go.mod h1:bzrjFmaD6+xqohD3KYP0H2FEuxknnBmyyOxdhLdaIws=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7 h1:kAREL6MPwpsk1/PQPFD3Eg7WAQR5mPTWZJaBiG5LDbY=
mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=

24
misc/openwrt/orion.init Normal file
View File

@ -0,0 +1,24 @@
#!/bin/sh /etc/rc.common
PID_FILE=/var/run/orion.pid
COMMAND="/opt/orion/server"
WORKDIR=/opt/orion
start() {
cd "$WORKDIR"
start-stop-daemon -S \
-b -m \
-p "$PID_FILE" \
-x "$COMMAND"
}
stop() {
start-stop-daemon -K \
-p "$PID_FILE" \
-x "$COMMAND"
}
restart() {
stop
start
}

View File

@ -2,11 +2,18 @@
!**/*_test.go !**/*_test.go
modd.conf modd.conf
.env .env
cmd/server/templates/**
Makefile { Makefile {
prep: make build prep: make build
daemon: [ -e .env ] && . .env; ./bin/server daemon: [ -e .env ] && . .env; \
ORION_TEMPLATE_DIR="cmd/server/templates" \
ORION_ASSET_DIR="cmd/server/static/dist" \
./bin/server
} }
{
daemon: [ ! -z "$(which node)" ] && cd cmd/server && npm run watch
}
**/*.go **/*.go
modd.conf modd.conf

View File

@ -1,38 +0,0 @@
package openwrt
// DhcpClient represents a dhcp client ... :)
type DhcpClient struct {
exec Executor
iface string
}
// NewDhcpClient return an UCI instance to interact with UCI
func NewDhcpClient(netIface string) *DhcpClient {
exec := &localExecutor{}
iface := netIface
return &DhcpClient{exec, iface}
}
// NewDhcpClientWithExecutor return an UCI instance to interact with UCI
func NewDhcpClientWithExecutor(netIface string, exe Executor) *DhcpClient {
exec := exe
iface := netIface
return &DhcpClient{exec, iface}
}
// NewDhcpClient return an UCI instance to interact with UCI
//func NewDhcpClient(netIface string, exe Executor) *DhcpClient {
// var exec Executor
// if exe == nil {
// exec = &localExecutor{}
// } else {
// exec = exe
// }
// iface := netIface
// return &DhcpClient{exec, iface}
//}
// AskForIP runs a dhclient ip request with udhcpc
func (dc *DhcpClient) AskForIP() *CommandResult {
return dc.exec.Run("udhcpc", "-i", dc.iface)
}

View File

@ -1,12 +0,0 @@
package openwrt
import "testing"
func TestDhcpClientAskForIP(t *testing.T) {
uexec := createMockExecutor("", "", 0)
dhc := NewDhcpClientWithExecutor("wlan1", uexec)
res := dhc.AskForIP()
if res.ReturnCode != 0 {
t.Error("Error in DHCP Client !!")
}
}

View File

@ -1,67 +0,0 @@
package openwrt
import (
"bytes"
"fmt"
"log"
"os/exec"
"syscall"
)
// Executor interface to describe command runners signature
type Executor interface {
Run(command string, params ...string) *CommandResult
}
// CommandResult contain all information about a command execution, stdout, stderr
type CommandResult struct {
Stdout string
Stderr string
ReturnCode int
}
type localExecutor struct{}
func (e *localExecutor) Run(command string, params ...string) *CommandResult {
var out bytes.Buffer
var stderr bytes.Buffer
var exitCode int
defaultFailedCode := 255
exe := exec.Command(command, params...)
exe.Stdout = &out
exe.Stderr = &stderr
err := exe.Run()
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
ws := exitError.Sys().(syscall.WaitStatus)
exitCode = ws.ExitStatus()
} else {
// This will happen (in OSX) if `name` is not available in $PATH,
// in this situation, exit code could not be get, and stderr will be
// empty string very likely, so we use the default fail code, and format err
// to string and set to stderr
log.Printf("Could not get exit code for failed program: %v, %v", command, params)
exitCode = defaultFailedCode
}
fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
log.Fatal(err)
}
if err != nil {
// try to get the exit code
} else {
// success, exitCode should be 0 if go is ok
ws := exe.ProcessState.Sys().(syscall.WaitStatus)
exitCode = ws.ExitStatus()
}
return &CommandResult{
Stdout: out.String(),
Stderr: stderr.String(),
ReturnCode: exitCode,
}
}

View File

@ -1,18 +0,0 @@
package openwrt
import (
"testing"
)
func TestRun(t *testing.T) {
exec := &localExecutor{}
res := exec.Run("uname", "-a")
if g, e := res.ReturnCode, 0; g != e {
t.Errorf("Run command failed ! Got bad return code [%d], [%d} is expected\n", g, e)
}
// res = exec.Run("noCommandWithThisNameExists", "-a")
// if g, e := res.ReturnCode, 127; g != e {
// t.Errorf("Run command failed ! Got bad return code [%d], [%d} is expected\n", g, e)
// }
}

View File

@ -1,77 +0,0 @@
package openwrt
import (
"fmt"
"io/ioutil"
"net"
"strings"
)
// Network provides a representation of network
type Network struct {
exec Executor
}
// NewNetwork return an UCI instance to interact with UCI
func NewNetwork() *Network {
exec := &localExecutor{}
return &Network{exec}
}
// NewNetworkWithExecutor return an UCI instance to interact with UCI
func NewNetworkWithExecutor(exe Executor) *Network {
exec := exe
return &Network{exec}
}
// ListInterfaces list all available interfaces on a system using "ip" command
func (n *Network) ListInterfaces() []net.Interface {
var result []net.Interface
ifaces, err := net.Interfaces()
if err != nil {
fmt.Print(fmt.Errorf("error listing network interfacess: %+v", err.Error()))
return nil
}
result = append(result, ifaces...)
return result
}
// ListWirelessInterfaces list all wifi cards
// you need to provide the wireless file or "" to use
// Linux default one "/proc/net/wireless"
func (n *Network) ListWirelessInterfaces(wifiFile string) []net.Interface {
var result []net.Interface
var ifaceNames []string
if wifiFile == "" {
wifiFile = "/proc/net/wireless"
}
wifiFileContent, err := ioutil.ReadFile(wifiFile)
check(err)
index := 0
for _, line := range strings.Split(string(wifiFileContent), "\n") {
if index < 2 {
index++
continue
} else {
name := strings.Split(line, ":")[0]
ifaceNames = append(ifaceNames, name)
}
}
ifaces, err := net.Interfaces()
if err != nil {
fmt.Print(fmt.Errorf("error listing network interfaces : %+v", err.Error()))
return nil
}
for _, i := range ifaces {
for _, name := range ifaceNames {
if name == i.Name {
result = append(result, i)
}
}
}
return result
}

View File

@ -1,22 +0,0 @@
package openwrt
import (
"fmt"
"testing"
)
func TestNetworkListInterfaces(t *testing.T) {
net := NewNetwork()
iface := net.ListInterfaces()
for _, ife := range iface {
fmt.Printf("%s\n", ife.Name)
}
}
func TestListWirelessInterfaces(t *testing.T) {
net := NewNetwork()
res := net.ListWirelessInterfaces("./testdata/proc_net_wireless.txt")
for _, el := range res {
fmt.Printf("%s\n", el.Name)
}
}

View File

@ -1,35 +0,0 @@
package openwrt
import (
"log"
"strings"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func createMockExecutor(stdout string, stderr string, returnCode int) Executor {
return &mockExecutor{
stdout: stdout,
stderr: stderr,
returnCode: returnCode,
}
}
type mockExecutor struct {
stdout string
stderr string
returnCode int
}
func (e *mockExecutor) Run(command string, params ...string) *CommandResult {
log.Printf("executing '%s %s'", command, strings.Join(params, " "))
return &CommandResult{
Stderr: e.stderr,
Stdout: e.stdout,
ReturnCode: e.returnCode,
}
}

View File

@ -1,4 +0,0 @@
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
wlan1: 0000 0 0 0 0 0 0 0 0 0
wlan0: 0000 0 0 0 0 0 0 0 0 0

View File

@ -1,17 +0,0 @@
Cell 40 - Address: 68:A3:78:6E:D9:24
ESSID: "PyxisWifi"
Mode: Master Channel: 3
Signal: -90 dBm Quality: 20/70
Encryption: none
Cell 41 - Address: B0:39:56:92:59:E2
ESSID: "NET17"
Mode: Master Channel: 4
Signal: -88 dBm Quality: 22/70
Encryption: WPA2 PSK (CCMP)
Cell 42 - Address: 0C:F4:D5:16:AA:18
ESSID: "DIJON-METROPOLE-WIFI"
Mode: Master Channel: 13
Signal: -90 dBm Quality: 20/70
Encryption: none

View File

@ -1,293 +0,0 @@
Cell 01 - Address: 0C:8D:DB:C4:A0:34
ESSID: "pfPauvres"
Mode: Master Channel: 11
Signal: -50 dBm Quality: 60/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 02 - Address: 40:5A:9B:ED:BA:F0
ESSID: "Cadoles"
Mode: Master Channel: 6
Signal: -36 dBm Quality: 70/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 03 - Address: A0:04:60:B2:8A:C8
ESSID: "Cadoles Formations (N)"
Mode: Master Channel: 13
Signal: -32 dBm Quality: 70/70
Encryption: WPA2 PSK (CCMP)
Cell 04 - Address: B0:39:56:D8:38:ED
ESSID: "Frate Dijon EXT"
Mode: Master Channel: 11
Signal: -57 dBm Quality: 53/70
Encryption: WPA2 PSK (CCMP)
Cell 05 - Address: 00:A6:CA:10:DF:00
ESSID: unknown
Mode: Master Channel: 6
Signal: -80 dBm Quality: 30/70
Encryption: WPA2 802.1X (CCMP)
Cell 06 - Address: AC:84:C9:2F:59:6E
ESSID: "Livebox-596a"
Mode: Master Channel: 1
Signal: -62 dBm Quality: 48/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 07 - Address: 00:A6:CA:10:DF:01
ESSID: "EFF-Mobility"
Mode: Master Channel: 6
Signal: -74 dBm Quality: 36/70
Encryption: WPA2 PSK (CCMP)
Cell 08 - Address: A0:1B:29:BE:98:26
ESSID: "Livebox-9822"
Mode: Master Channel: 6
Signal: -81 dBm Quality: 29/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 09 - Address: 7C:26:64:66:CC:44
ESSID: "Livebox-32c8"
Mode: Master Channel: 1
Signal: -74 dBm Quality: 36/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 10 - Address: 00:A6:CA:10:DF:02
ESSID: "Keo-HotSpot"
Mode: Master Channel: 6
Signal: -79 dBm Quality: 31/70
Encryption: none
Cell 11 - Address: 7E:26:64:66:CC:44
ESSID: "orange"
Mode: Master Channel: 1
Signal: -73 dBm Quality: 37/70
Encryption: none
Cell 12 - Address: 3C:52:82:FC:5E:21
ESSID: "DIRECT-20-HP DeskJet 3630 series"
Mode: Master Channel: 6
Signal: -78 dBm Quality: 32/70
Encryption: WPA2 PSK (CCMP)
Cell 13 - Address: E4:9E:12:8B:EF:73
ESSID: "Freebox-8BEF72"
Mode: Master Channel: 9
Signal: -79 dBm Quality: 31/70
Encryption: WPA2 PSK (CCMP)
Cell 14 - Address: 40:4A:03:05:D2:68
ESSID: "ZyXEL"
Mode: Master Channel: 11
Signal: -71 dBm Quality: 39/70
Encryption: WPA2 PSK (CCMP)
Cell 15 - Address: 5C:C3:07:7E:39:D4
ESSID: "pfP Xa"
Mode: Master Channel: 1
Signal: -65 dBm Quality: 45/70
Encryption: WPA2 PSK (CCMP)
Cell 16 - Address: AC:84:C9:1D:C6:7C
ESSID: "Frate Djon"
Mode: Master Channel: 1
Signal: -79 dBm Quality: 31/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 17 - Address: 00:17:33:9F:4D:80
ESSID: "NEUF_4D7C"
Mode: Master Channel: 11
Signal: -83 dBm Quality: 27/70
Encryption: WPA PSK (TKIP, CCMP)
Cell 18 - Address: A2:17:33:9F:4D:81
ESSID: "SFR WiFi FON"
Mode: Master Channel: 11
Signal: -85 dBm Quality: 25/70
Encryption: none
Cell 19 - Address: BC:F6:85:FE:6D:46
ESSID: "Dlink"
Mode: Master Channel: 12
Signal: -70 dBm Quality: 40/70
Encryption: WPA2 PSK (CCMP)
Cell 20 - Address: 30:7C:B2:D1:0B:0D
ESSID: "Livebox-0b09"
Mode: Master Channel: 11
Signal: -81 dBm Quality: 29/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 21 - Address: A2:17:33:9F:4D:83
ESSID: "SFR WiFi Mobile"
Mode: Master Channel: 11
Signal: -85 dBm Quality: 25/70
Encryption: WPA2 802.1X (CCMP)
Cell 22 - Address: 90:4D:4A:F7:B9:70
ESSID: "Livebox-B970"
Mode: Master Channel: 11
Signal: -84 dBm Quality: 26/70
Encryption: WPA2 PSK (CCMP)
Cell 23 - Address: 90:4D:4A:F7:B9:71
ESSID: "orange"
Mode: Master Channel: 11
Signal: -89 dBm Quality: 21/70
Encryption: none
Cell 24 - Address: 00:22:6B:86:5B:71
ESSID: "linksys"
Mode: Master Channel: 11
Signal: -86 dBm Quality: 24/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 25 - Address: 68:A3:78:6E:D9:25
ESSID: "FreeWifi_secure"
Mode: Master Channel: 3
Signal: -86 dBm Quality: 24/70
Encryption: WPA2 802.1X (TKIP, CCMP)
Cell 26 - Address: 6C:38:A1:62:1B:28
ESSID: "Bbox-1B7889A9"
Mode: Master Channel: 1
Signal: -90 dBm Quality: 20/70
Encryption: mixed WPA/WPA2 PSK (CCMP)
Cell 27 - Address: 78:81:02:5E:B7:14
ESSID: "Livebox-B714"
Mode: Master Channel: 6
Signal: -86 dBm Quality: 24/70
Encryption: WPA2 PSK (CCMP)
Cell 28 - Address: F4:CA:E5:98:3B:DC
ESSID: "Freebox-5D2400"
Mode: Master Channel: 11
Signal: -84 dBm Quality: 26/70
Encryption: WPA PSK (CCMP)
Cell 29 - Address: 8C:DC:D4:93:69:17
ESSID: "HP-Print-17-Photosmart 5520"
Mode: Master Channel: 11
Signal: -87 dBm Quality: 23/70
Encryption: none
Cell 30 - Address: 44:CE:7D:20:5C:A4
ESSID: "SFR_5CA0"
Mode: Master Channel: 6
Signal: -86 dBm Quality: 24/70
Encryption: WPA PSK (TKIP, CCMP)
Cell 31 - Address: F4:CA:E5:98:3B:DE
ESSID: "FreeWifi_secure"
Mode: Master Channel: 11
Signal: -72 dBm Quality: 38/70
Encryption: WPA2 802.1X (TKIP, CCMP)
Cell 32 - Address: 70:0B:01:C0:B3:E0
ESSID: "Livebox-B3E0"
Mode: Master Channel: 11
Signal: -80 dBm Quality: 30/70
Encryption: WPA2 PSK (CCMP)
Cell 33 - Address: D2:CE:7D:20:5C:A7
ESSID: "SFR WiFi Mobile"
Mode: Master Channel: 6
Signal: -85 dBm Quality: 25/70
Encryption: WPA2 802.1X (CCMP)
Cell 34 - Address: 68:A3:78:0D:B6:51
ESSID: "Freebox-0DB650"
Mode: Master Channel: 1
Signal: -92 dBm Quality: 18/70
Encryption: WPA2 PSK (CCMP)
Cell 35 - Address: F8:AB:05:1D:6A:E0
ESSID: "Bbox-8CE43C68"
Mode: Master Channel: 6
Signal: -88 dBm Quality: 22/70
Encryption: mixed WPA/WPA2 PSK (CCMP)
Cell 36 - Address: F4:CA:E5:98:3B:DD
ESSID: "FreeWifi"
Mode: Master Channel: 11
Signal: -87 dBm Quality: 23/70
Encryption: none
Cell 37 - Address: 14:0C:76:79:C0:D9
ESSID: "freebox_ZFSFUA"
Mode: Master Channel: 4
Signal: -88 dBm Quality: 22/70
Encryption: WPA PSK (TKIP, CCMP)
Cell 38 - Address: 68:15:90:36:63:60
ESSID: "Livebox-6360"
Mode: Master Channel: 1
Signal: -81 dBm Quality: 29/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 39 - Address: 64:7C:34:29:2B:7C
ESSID: "Bbox-D646CB51"
Mode: Master Channel: 1
Signal: -90 dBm Quality: 20/70
Encryption: mixed WPA/WPA2 PSK (CCMP)
Cell 40 - Address: 68:A3:78:6E:D9:24
ESSID: "FreeWifi"
Mode: Master Channel: 3
Signal: -90 dBm Quality: 20/70
Encryption: none
Cell 41 - Address: B0:39:56:92:59:E2
ESSID: "NETGEAR17"
Mode: Master Channel: 4
Signal: -88 dBm Quality: 22/70
Encryption: WPA2 PSK (CCMP)
Cell 42 - Address: 0C:F4:D5:16:AA:18
ESSID: "DIJON-METROPOLE-WIFI"
Mode: Master Channel: 13
Signal: -90 dBm Quality: 20/70
Encryption: none
Cell 43 - Address: D2:CE:7D:20:5C:A5
ESSID: "SFR WiFi FON"
Mode: Master Channel: 6
Signal: -81 dBm Quality: 29/70
Encryption: none
Cell 44 - Address: 34:27:92:42:CD:72
ESSID: "Freebox-42CD71"
Mode: Master Channel: 8
Signal: -88 dBm Quality: 22/70
Encryption: WPA2 PSK (CCMP)
Cell 45 - Address: 72:5D:51:78:4C:87
ESSID: "SFR WiFi FON"
Mode: Master Channel: 11
Signal: -87 dBm Quality: 23/70
Encryption: none
Cell 46 - Address: 68:A3:78:6E:D9:23
ESSID: "Freebox-6ED922"
Mode: Master Channel: 3
Signal: -76 dBm Quality: 34/70
Encryption: WPA2 PSK (CCMP)
Cell 47 - Address: 00:19:70:4F:DE:F2
ESSID: "Livebox-45cc"
Mode: Master Channel: 6
Signal: -78 dBm Quality: 32/70
Encryption: mixed WPA/WPA2 PSK (TKIP, CCMP)
Cell 48 - Address: AC:84:C9:CC:AE:90
ESSID: "Livebox-AE90"
Mode: Master Channel: 11
Signal: -81 dBm Quality: 29/70
Encryption: WPA2 PSK (CCMP)
Cell 49 - Address: 00:07:7D:89:81:B0
ESSID: "orange"
Mode: Master Channel: 6
Signal: -85 dBm Quality: 25/70
Encryption: none

View File

@ -1,72 +0,0 @@
package openwrt
import (
"fmt"
"time"
)
// Action is the result of an UCI action output and return code
type Action struct {
*CommandResult
}
// UCI "Object"
type UCI struct {
exec Executor
}
// NewUCI return an UCI instance to interact with UCI
func NewUCI() *UCI {
exec := &localExecutor{}
return &UCI{exec}
}
// NewUCIWithExecutor returns a UCI Instance an gives you the ability to provide
// a different command executor than the default one.
func NewUCIWithExecutor(exec Executor) *UCI {
return &UCI{exec}
}
// uciRun, private method to run the UCI command
func (u *UCI) uciRun(uciAction string, param string) *Action {
cmd := "uci"
res := u.exec.Run(cmd, uciAction, param)
return &Action{res}
}
// Add add an entry to UCI configuration, specify the Module and the value
func (u *UCI) Add(module string, name string) *Action {
commandRes := u.exec.Run("uci add", module, name)
return &Action{commandRes}
}
// Delete delete an entry from UCI configuration specify the entry name
func (u *UCI) Delete(entry string) *Action {
return u.uciRun("delete", entry)
}
// Set set a value ton an UCI configuration entry
func (u *UCI) Set(entry string, value string) *Action {
return u.uciRun("set", fmt.Sprintf("%s=%s", entry, value))
}
// Commit the recent actions to UCI
func (u *UCI) Commit() *Action {
return u.uciRun("commit", "")
}
// Reload reload uci configuration
func (u *UCI) Reload() *Action {
cmdResult := u.exec.Run("reload_config")
time.Sleep(5 * time.Second)
return &Action{cmdResult}
}
// AddWireless Create a new Wireless entry in UCI configuration
func (u *UCI) AddWireless(name string) *Action {
res := u.Add("wireless", name)
return res
}

View File

@ -1,100 +0,0 @@
package openwrt
import (
"fmt"
"testing"
)
func TestUCIAdd(t *testing.T) {
exec := createMockExecutor("", "", 0)
uci := NewUCIWithExecutor(exec)
res := uci.Add("wireless", "test")
if res.ReturnCode != 0 {
t.Error("Bad Return Code !")
}
if res.Stdout != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stdout is not empty ...")
}
if res.Stderr != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stderr is not empty ...")
}
}
func TestUCIAddFailed(t *testing.T) {
exec := createMockExecutor("", "BigError", 3)
uci := NewUCIWithExecutor(exec)
res := uci.Add("wireless", "test")
if res.ReturnCode != 3 {
t.Error("Bad Return Code !")
}
}
func TestUCIDelete(t *testing.T) {
exec := createMockExecutor("", "", 0)
uci := NewUCIWithExecutor(exec)
res := uci.Delete("wireless.@wifi-iface[1]")
if res.ReturnCode != 0 {
t.Error("Bad Return Code !")
}
if res.Stdout != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stdout is not empty ...")
}
if res.Stderr != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stderr is not empty ...")
}
}
func TestUCISet(t *testing.T) {
exec := createMockExecutor("", "", 0)
uci := NewUCIWithExecutor(exec)
res := uci.Set("wireless.@wifi-iface[1].network", "OrionNetwork")
if res.ReturnCode != 0 {
t.Error("Bad Return Code !")
}
if res.Stdout != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stdout is not empty ...")
}
if res.Stderr != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stderr is not empty ...")
}
}
func TestUCICommit(t *testing.T) {
exec := createMockExecutor("", "", 0)
uci := NewUCIWithExecutor(exec)
res := uci.Commit()
if res.ReturnCode != 0 {
t.Error("Bad Return Code !")
}
if res.Stdout != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stdout is not empty ...")
}
if res.Stderr != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stderr is not empty ...")
}
}
func TestUCIReload(t *testing.T) {
exec := createMockExecutor("", "", 0)
uci := NewUCIWithExecutor(exec)
res := uci.Reload()
if res.ReturnCode != 0 {
t.Error("Bad Return Code !")
}
if res.Stdout != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stdout is not empty ...")
}
if res.Stderr != "" {
fmt.Printf("[%s] - ", res.Stdout)
t.Error("Stderr is not empty ...")
}
}

View File

@ -1,91 +0,0 @@
package openwrt
import (
"log"
"strings"
"time"
)
// Wifi gives access to al OpenWRT Wifi operations
type Wifi struct {
exec Executor
iface string
Cells []*WifiCell
}
// NewWifi return an UCI instance to interact with UCI
func NewWifi(wIface string) *Wifi {
exec := &localExecutor{}
iface := wIface
return &Wifi{exec, iface, nil}
}
// NewWifiWithExecutor returns a Wifi Instance an gives you the ability to provide
// a different command executor than the default one.
func NewWifiWithExecutor(exec Executor, wIface string) *Wifi {
return &Wifi{exec, wIface, nil}
}
func (w *Wifi) getEncryption(line string) string {
enc := "unkn"
if strings.Contains(line, "WPA2 PSK") {
enc = "psk"
} else if strings.Contains(line, "none") {
enc = "none"
}
return enc
}
func (w *Wifi) parseWifiCells(stdout string) int {
new := false
mac, ssid, enc := "", "", ""
for _, line := range strings.Split(strings.TrimSuffix(stdout, "\n"), "\n") {
if strings.HasPrefix(line, "Cell") && new == false {
new = true
mac = strings.Split(line, " ")[4]
}
if strings.Contains(line, "ESSID:") {
ssid = strings.Split(line, " ")[1]
ssid = strings.Trim(ssid, "\"")
}
if strings.Contains(line, "Encryption:") {
enc = w.getEncryption(line)
}
if len(mac) > 0 && len(ssid) > 0 && len(enc) > 0 {
cell := NewWifiCell(ssid, mac, enc)
w.Cells = append(w.Cells, cell)
ssid, mac, enc = "", "", ""
new = false
}
}
return 0
}
// GetWifiCells retrieves all available wifi cells for a card !
func (w *Wifi) GetWifiCells() int {
res := w.exec.Run("iwinfo", w.iface, "scan")
if res.ReturnCode != 0 {
log.Fatal(res.Stderr)
return res.ReturnCode
}
for res.Stdout == "Scanning not possible" {
time.Sleep(time.Second)
res = w.exec.Run("iwinfo", w.iface, "scan")
if res.ReturnCode != 0 {
log.Fatal(res.Stderr)
return res.ReturnCode
}
}
return w.parseWifiCells(res.Stdout)
}
// GetCell retreives an WifiCell by SSID provided in parameter
func (w *Wifi) GetCell(ssid string) *WifiCell {
for _, v := range w.Cells {
if v.Ssid == ssid {
return v
}
}
return nil
}

View File

@ -1,93 +0,0 @@
package openwrt
import "time"
// WifiCell reprensents wifi network Cell
type WifiCell struct {
Ssid string
MacAdress string
Encryption string
}
// NewWifiCell returns a new WifiCell object
func NewWifiCell(ssid string, mac string, encrypt string) *WifiCell {
return &WifiCell{
Ssid: ssid,
MacAdress: mac,
Encryption: encrypt,
}
}
func (cell *WifiCell) uciWifiConfigure(uci *UCI, secret string) *Action {
setRes := uci.Set("wireless.@wifi-iface[1].network", "PyxisNetwork")
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Set("wireless.@wifi-iface[1].ssid", cell.Ssid)
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Set("wireless.@wifi-iface[1].encryption", cell.Encryption)
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Set("wireless.@wifi-iface[1].device", "radio1")
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Set("wireless.@wifi-iface[1].mode", "sta")
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Set("wireless.@wifi-iface[1].bssid", cell.MacAdress)
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Set("wireless.@wifi-iface[1].key", secret)
if setRes.ReturnCode != 0 {
return setRes
}
return &Action{
&CommandResult{
Stdout: "",
Stderr: "",
ReturnCode: 0,
},
}
}
// Connect to wifi Cell
func (cell *WifiCell) Connect(uci *UCI, secret string) *Action {
delRes := uci.Delete("wireless.@wifi-iface[1]")
if delRes.ReturnCode != 0 {
return delRes
}
addRes := uci.AddWireless("wifi-iface")
if addRes.ReturnCode != 0 {
return addRes
}
setRes := cell.uciWifiConfigure(uci, secret)
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Commit()
if setRes.ReturnCode != 0 {
return setRes
}
setRes = uci.Reload()
if setRes.ReturnCode != 0 {
return setRes
}
time.Sleep(20 * time.Second)
return &Action{
&CommandResult{
Stdout: "",
Stderr: "",
ReturnCode: 0,
},
}
}

View File

@ -1,21 +0,0 @@
package openwrt
import "testing"
func TestWifiCellConnection(t *testing.T) {
uexec := createMockExecutor("", "", 0)
uci := NewUCIWithExecutor(uexec)
cellList := `Cell 40 - Address: 68:A3:78:6E:D9:24
ESSID: "PyxisWifi"
Mode: Master Channel: 3
Signal: -90 dBm Quality: 20/70
Encryption: WPA2 PSK (CCMP)`
exec := createMockExecutor(cellList, "", 0)
wifi := NewWifiWithExecutor(exec, "wlan1")
_ = wifi.GetWifiCells()
cell := wifi.GetCell("PyxisWifi")
cell.Connect(uci, "secret")
}

View File

@ -1,71 +0,0 @@
package openwrt
import (
"fmt"
"io/ioutil"
"testing"
)
// Test GestWifiCells method with 3 Cells
func TestGetWifiCells(t *testing.T) {
cellList, err := ioutil.ReadFile("testdata/wifi_cells_output_3.txt")
if err != nil {
t.Fatal(err)
}
exec := createMockExecutor(string(cellList), "", 0)
wifi := NewWifiWithExecutor(exec, "wlan1")
_ = wifi.GetWifiCells()
if len(wifi.Cells) != 3 {
fmt.Printf("Size of wifi.Cells is %d and not 3 !!!\n", len(wifi.Cells))
t.Error("Cell list is empty ... This can not append !! Fix your code Dummy !")
}
if g, e := wifi.Cells[0].Ssid, "PyxisWifi"; g != e {
t.Errorf("The first Cell have a bad SSID !\n %s is expected and we have %s", e, g)
}
if g, e := wifi.Cells[0].MacAdress, "68:A3:78:6E:D9:24"; g != e {
t.Errorf("The first Cell have a bad MAC !\n %s is expected and we have %s", e, g)
}
if g, e := wifi.Cells[0].Encryption, "none"; g != e {
t.Errorf("The first Cell have a bad Encryption!\n %s is expected and we have %s", e, g)
}
if g, e := wifi.Cells[1].Encryption, "psk"; g != e {
t.Errorf("The second Cell have a bad Encryption!\n %s is expected and we have %s", e, g)
}
if g, e := wifi.Cells[2].MacAdress, "0C:F4:D5:16:AA:18"; g != e {
t.Errorf("The last Cell have a bad MAC !\n %s is expected and we have %s", e, g)
}
}
// Test GestWifiCells method with empty list
func TestGetWifiCellsEmpty(t *testing.T) {
exec := createMockExecutor("", "", 0)
wifi := NewWifiWithExecutor(exec, "wlan1")
_ = wifi.GetWifiCells()
if len(wifi.Cells) != 0 {
fmt.Printf("Size of wifi.Cells is %d and not 0 !!!\n", len(wifi.Cells))
t.Error("Cell list is empty ... This can not append !! Fix your code Dummy !")
}
}
// Test GestWifiCells method with 3 Cells
func TestGetWifiCellsLarge(t *testing.T) {
cellList, err := ioutil.ReadFile("testdata/wifi_cells_output_large.txt")
if err != nil {
t.Fatal(err)
}
exec := createMockExecutor(string(cellList), "", 0)
wifi := NewWifiWithExecutor(exec, "wlan1")
_ = wifi.GetWifiCells()
if len(wifi.Cells) != 49 {
fmt.Printf("Size of wifi.Cells is %d and not 49 !!!\n", len(wifi.Cells))
t.Error("Cell list is empty ... This can not append !! Fix your code Dummy !")
}
}

Binary file not shown.

View File

@ -0,0 +1,11 @@
# Orion
Récepteur GNSS/RTK pour les topographes et chefs de chantier
## Documentation
[Voir la documentation](./doc)
## License
`GNU GPL v3` http://dachary.org/loic/gpl-french.pdf

BIN
release/server-linux-arm/server Executable file

Binary file not shown.

View File

@ -0,0 +1,6748 @@
/*! bulma.io v0.7.2 | MIT License | github.com/jgthms/bulma */
@keyframes spinAround {
from {
transform: rotate(0deg); }
to {
transform: rotate(359deg); } }
.delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous,
.pagination-next,
.pagination-link,
.pagination-ellipsis, .tabs {
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }
.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after {
border: 3px solid transparent;
border-radius: 2px;
border-right: 0;
border-top: 0;
content: " ";
display: block;
height: 0.625em;
margin-top: -0.4375em;
pointer-events: none;
position: absolute;
top: 50%;
transform: rotate(-45deg);
transform-origin: center;
width: 0.625em; }
.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child),
.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child) {
margin-bottom: 1.5rem; }
.delete, .modal-close {
-moz-appearance: none;
-webkit-appearance: none;
background-color: rgba(10, 10, 10, 0.2);
border: none;
border-radius: 290486px;
cursor: pointer;
pointer-events: auto;
display: inline-block;
flex-grow: 0;
flex-shrink: 0;
font-size: 0;
height: 20px;
max-height: 20px;
max-width: 20px;
min-height: 20px;
min-width: 20px;
outline: none;
position: relative;
vertical-align: top;
width: 20px; }
.delete::before, .modal-close::before, .delete::after, .modal-close::after {
background-color: white;
content: "";
display: block;
left: 50%;
position: absolute;
top: 50%;
transform: translateX(-50%) translateY(-50%) rotate(45deg);
transform-origin: center center; }
.delete::before, .modal-close::before {
height: 2px;
width: 50%; }
.delete::after, .modal-close::after {
height: 50%;
width: 2px; }
.delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus {
background-color: rgba(10, 10, 10, 0.3); }
.delete:active, .modal-close:active {
background-color: rgba(10, 10, 10, 0.4); }
.is-small.delete, .is-small.modal-close {
height: 16px;
max-height: 16px;
max-width: 16px;
min-height: 16px;
min-width: 16px;
width: 16px; }
.is-medium.delete, .is-medium.modal-close {
height: 24px;
max-height: 24px;
max-width: 24px;
min-height: 24px;
min-width: 24px;
width: 24px; }
.is-large.delete, .is-large.modal-close {
height: 32px;
max-height: 32px;
max-width: 32px;
min-height: 32px;
min-width: 32px;
width: 32px; }
.button.is-loading::after, .select.is-loading::after, .control.is-loading::after, .loader {
animation: spinAround 500ms infinite linear;
border: 2px solid #dbdbdb;
border-radius: 290486px;
border-right-color: transparent;
border-top-color: transparent;
content: "";
display: block;
height: 1em;
position: relative;
width: 1em; }
.is-overlay, .image.is-square img, .image.is-1by1 img, .image.is-5by4 img, .image.is-4by3 img, .image.is-3by2 img, .image.is-5by3 img, .image.is-16by9 img, .image.is-2by1 img, .image.is-3by1 img, .image.is-4by5 img, .image.is-3by4 img, .image.is-2by3 img, .image.is-3by5 img, .image.is-9by16 img, .image.is-1by2 img, .image.is-1by3 img, .modal, .modal-background, .hero-video {
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0; }
.button, .input,
.textarea, .select select, .file-cta,
.file-name, .pagination-previous,
.pagination-next,
.pagination-link,
.pagination-ellipsis {
-moz-appearance: none;
-webkit-appearance: none;
align-items: center;
border: 1px solid transparent;
border-radius: 4px;
box-shadow: none;
display: inline-flex;
font-size: 1rem;
height: 2.25em;
justify-content: flex-start;
line-height: 1.5;
padding-bottom: calc(0.375em - 1px);
padding-left: calc(0.625em - 1px);
padding-right: calc(0.625em - 1px);
padding-top: calc(0.375em - 1px);
position: relative;
vertical-align: top; }
.button:focus, .input:focus,
.textarea:focus, .select select:focus, .file-cta:focus,
.file-name:focus, .pagination-previous:focus,
.pagination-next:focus,
.pagination-link:focus,
.pagination-ellipsis:focus, .is-focused.button, .is-focused.input,
.is-focused.textarea, .select select.is-focused, .is-focused.file-cta,
.is-focused.file-name, .is-focused.pagination-previous,
.is-focused.pagination-next,
.is-focused.pagination-link,
.is-focused.pagination-ellipsis, .button:active, .input:active,
.textarea:active, .select select:active, .file-cta:active,
.file-name:active, .pagination-previous:active,
.pagination-next:active,
.pagination-link:active,
.pagination-ellipsis:active, .is-active.button, .is-active.input,
.is-active.textarea, .select select.is-active, .is-active.file-cta,
.is-active.file-name, .is-active.pagination-previous,
.is-active.pagination-next,
.is-active.pagination-link,
.is-active.pagination-ellipsis {
outline: none; }
.button[disabled], .input[disabled],
.textarea[disabled], .select select[disabled], .file-cta[disabled],
.file-name[disabled], .pagination-previous[disabled],
.pagination-next[disabled],
.pagination-link[disabled],
.pagination-ellipsis[disabled] {
cursor: not-allowed; }
/*! minireset.css v0.0.3 | MIT License | github.com/jgthms/minireset.css */
html,
body,
p,
ol,
ul,
li,
dl,
dt,
dd,
blockquote,
figure,
fieldset,
legend,
textarea,
pre,
iframe,
hr,
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
padding: 0; }
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: 100%;
font-weight: normal; }
ul {
list-style: none; }
button,
input,
select,
textarea {
margin: 0; }
html {
box-sizing: border-box; }
*, *::before, *::after {
box-sizing: inherit; }
img,
audio,
video {
height: auto;
max-width: 100%; }
iframe {
border: 0; }
table {
border-collapse: collapse;
border-spacing: 0; }
td,
th {
padding: 0;
text-align: left; }
html {
background-color: white;
font-size: 16px;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
min-width: 300px;
overflow-x: hidden;
overflow-y: scroll;
text-rendering: optimizeLegibility;
text-size-adjust: 100%; }
article,
aside,
figure,
footer,
header,
hgroup,
section {
display: block; }
body,
button,
input,
select,
textarea {
font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; }
code,
pre {
-moz-osx-font-smoothing: auto;
-webkit-font-smoothing: auto;
font-family: monospace; }
body {
color: #4a4a4a;
font-size: 1rem;
font-weight: 400;
line-height: 1.5; }
a {
color: #3273dc;
cursor: pointer;
text-decoration: none; }
a strong {
color: currentColor; }
a:hover {
color: #363636; }
code {
background-color: whitesmoke;
color: #ff3860;
font-size: 0.875em;
font-weight: normal;
padding: 0.25em 0.5em 0.25em; }
hr {
background-color: whitesmoke;
border: none;
display: block;
height: 2px;
margin: 1.5rem 0; }
img {
height: auto;
max-width: 100%; }
input[type="checkbox"],
input[type="radio"] {
vertical-align: baseline; }
small {
font-size: 0.875em; }
span {
font-style: inherit;
font-weight: inherit; }
strong {
color: #363636;
font-weight: 700; }
pre {
-webkit-overflow-scrolling: touch;
background-color: whitesmoke;
color: #4a4a4a;
font-size: 0.875em;
overflow-x: auto;
padding: 1.25rem 1.5rem;
white-space: pre;
word-wrap: normal; }
pre code {
background-color: transparent;
color: currentColor;
font-size: 1em;
padding: 0; }
table td,
table th {
text-align: left;
vertical-align: top; }
table th {
color: #363636; }
.is-clearfix::after {
clear: both;
content: " ";
display: table; }
.is-pulled-left {
float: left !important; }
.is-pulled-right {
float: right !important; }
.is-clipped {
overflow: hidden !important; }
.is-size-1 {
font-size: 3rem !important; }
.is-size-2 {
font-size: 2.5rem !important; }
.is-size-3 {
font-size: 2rem !important; }
.is-size-4 {
font-size: 1.5rem !important; }
.is-size-5 {
font-size: 1.25rem !important; }
.is-size-6 {
font-size: 1rem !important; }
.is-size-7 {
font-size: 0.75rem !important; }
@media screen and (max-width: 768px) {
.is-size-1-mobile {
font-size: 3rem !important; }
.is-size-2-mobile {
font-size: 2.5rem !important; }
.is-size-3-mobile {
font-size: 2rem !important; }
.is-size-4-mobile {
font-size: 1.5rem !important; }
.is-size-5-mobile {
font-size: 1.25rem !important; }
.is-size-6-mobile {
font-size: 1rem !important; }
.is-size-7-mobile {
font-size: 0.75rem !important; } }
@media screen and (min-width: 769px), print {
.is-size-1-tablet {
font-size: 3rem !important; }
.is-size-2-tablet {
font-size: 2.5rem !important; }
.is-size-3-tablet {
font-size: 2rem !important; }
.is-size-4-tablet {
font-size: 1.5rem !important; }
.is-size-5-tablet {
font-size: 1.25rem !important; }
.is-size-6-tablet {
font-size: 1rem !important; }
.is-size-7-tablet {
font-size: 0.75rem !important; } }
@media screen and (max-width: 1087px) {
.is-size-1-touch {
font-size: 3rem !important; }
.is-size-2-touch {
font-size: 2.5rem !important; }
.is-size-3-touch {
font-size: 2rem !important; }
.is-size-4-touch {
font-size: 1.5rem !important; }
.is-size-5-touch {
font-size: 1.25rem !important; }
.is-size-6-touch {
font-size: 1rem !important; }
.is-size-7-touch {
font-size: 0.75rem !important; } }
@media screen and (min-width: 1088px) {
.is-size-1-desktop {
font-size: 3rem !important; }
.is-size-2-desktop {
font-size: 2.5rem !important; }
.is-size-3-desktop {
font-size: 2rem !important; }
.is-size-4-desktop {
font-size: 1.5rem !important; }
.is-size-5-desktop {
font-size: 1.25rem !important; }
.is-size-6-desktop {
font-size: 1rem !important; }
.is-size-7-desktop {
font-size: 0.75rem !important; } }
@media screen and (min-width: 1280px) {
.is-size-1-widescreen {
font-size: 3rem !important; }
.is-size-2-widescreen {
font-size: 2.5rem !important; }
.is-size-3-widescreen {
font-size: 2rem !important; }
.is-size-4-widescreen {
font-size: 1.5rem !important; }
.is-size-5-widescreen {
font-size: 1.25rem !important; }
.is-size-6-widescreen {
font-size: 1rem !important; }
.is-size-7-widescreen {
font-size: 0.75rem !important; } }
@media screen and (min-width: 1472px) {
.is-size-1-fullhd {
font-size: 3rem !important; }
.is-size-2-fullhd {
font-size: 2.5rem !important; }
.is-size-3-fullhd {
font-size: 2rem !important; }
.is-size-4-fullhd {
font-size: 1.5rem !important; }
.is-size-5-fullhd {
font-size: 1.25rem !important; }
.is-size-6-fullhd {
font-size: 1rem !important; }
.is-size-7-fullhd {
font-size: 0.75rem !important; } }
.has-text-centered {
text-align: center !important; }
.has-text-justified {
text-align: justify !important; }
.has-text-left {
text-align: left !important; }
.has-text-right {
text-align: right !important; }
@media screen and (max-width: 768px) {
.has-text-centered-mobile {
text-align: center !important; } }
@media screen and (min-width: 769px), print {
.has-text-centered-tablet {
text-align: center !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.has-text-centered-tablet-only {
text-align: center !important; } }
@media screen and (max-width: 1087px) {
.has-text-centered-touch {
text-align: center !important; } }
@media screen and (min-width: 1088px) {
.has-text-centered-desktop {
text-align: center !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.has-text-centered-desktop-only {
text-align: center !important; } }
@media screen and (min-width: 1280px) {
.has-text-centered-widescreen {
text-align: center !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.has-text-centered-widescreen-only {
text-align: center !important; } }
@media screen and (min-width: 1472px) {
.has-text-centered-fullhd {
text-align: center !important; } }
@media screen and (max-width: 768px) {
.has-text-justified-mobile {
text-align: justify !important; } }
@media screen and (min-width: 769px), print {
.has-text-justified-tablet {
text-align: justify !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.has-text-justified-tablet-only {
text-align: justify !important; } }
@media screen and (max-width: 1087px) {
.has-text-justified-touch {
text-align: justify !important; } }
@media screen and (min-width: 1088px) {
.has-text-justified-desktop {
text-align: justify !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.has-text-justified-desktop-only {
text-align: justify !important; } }
@media screen and (min-width: 1280px) {
.has-text-justified-widescreen {
text-align: justify !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.has-text-justified-widescreen-only {
text-align: justify !important; } }
@media screen and (min-width: 1472px) {
.has-text-justified-fullhd {
text-align: justify !important; } }
@media screen and (max-width: 768px) {
.has-text-left-mobile {
text-align: left !important; } }
@media screen and (min-width: 769px), print {
.has-text-left-tablet {
text-align: left !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.has-text-left-tablet-only {
text-align: left !important; } }
@media screen and (max-width: 1087px) {
.has-text-left-touch {
text-align: left !important; } }
@media screen and (min-width: 1088px) {
.has-text-left-desktop {
text-align: left !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.has-text-left-desktop-only {
text-align: left !important; } }
@media screen and (min-width: 1280px) {
.has-text-left-widescreen {
text-align: left !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.has-text-left-widescreen-only {
text-align: left !important; } }
@media screen and (min-width: 1472px) {
.has-text-left-fullhd {
text-align: left !important; } }
@media screen and (max-width: 768px) {
.has-text-right-mobile {
text-align: right !important; } }
@media screen and (min-width: 769px), print {
.has-text-right-tablet {
text-align: right !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.has-text-right-tablet-only {
text-align: right !important; } }
@media screen and (max-width: 1087px) {
.has-text-right-touch {
text-align: right !important; } }
@media screen and (min-width: 1088px) {
.has-text-right-desktop {
text-align: right !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.has-text-right-desktop-only {
text-align: right !important; } }
@media screen and (min-width: 1280px) {
.has-text-right-widescreen {
text-align: right !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.has-text-right-widescreen-only {
text-align: right !important; } }
@media screen and (min-width: 1472px) {
.has-text-right-fullhd {
text-align: right !important; } }
.is-capitalized {
text-transform: capitalize !important; }
.is-lowercase {
text-transform: lowercase !important; }
.is-uppercase {
text-transform: uppercase !important; }
.is-italic {
font-style: italic !important; }
.has-text-white {
color: white !important; }
a.has-text-white:hover, a.has-text-white:focus {
color: #e6e6e6 !important; }
.has-background-white {
background-color: white !important; }
.has-text-black {
color: #0a0a0a !important; }
a.has-text-black:hover, a.has-text-black:focus {
color: black !important; }
.has-background-black {
background-color: #0a0a0a !important; }
.has-text-light {
color: whitesmoke !important; }
a.has-text-light:hover, a.has-text-light:focus {
color: #dbdbdb !important; }
.has-background-light {
background-color: whitesmoke !important; }
.has-text-dark {
color: #363636 !important; }
a.has-text-dark:hover, a.has-text-dark:focus {
color: #1c1c1c !important; }
.has-background-dark {
background-color: #363636 !important; }
.has-text-primary {
color: #00d1b2 !important; }
a.has-text-primary:hover, a.has-text-primary:focus {
color: #009e86 !important; }
.has-background-primary {
background-color: #00d1b2 !important; }
.has-text-link {
color: #3273dc !important; }
a.has-text-link:hover, a.has-text-link:focus {
color: #205bbc !important; }
.has-background-link {
background-color: #3273dc !important; }
.has-text-info {
color: #209cee !important; }
a.has-text-info:hover, a.has-text-info:focus {
color: #0f81cc !important; }
.has-background-info {
background-color: #209cee !important; }
.has-text-success {
color: #23d160 !important; }
a.has-text-success:hover, a.has-text-success:focus {
color: #1ca64c !important; }
.has-background-success {
background-color: #23d160 !important; }
.has-text-warning {
color: #ffdd57 !important; }
a.has-text-warning:hover, a.has-text-warning:focus {
color: #ffd324 !important; }
.has-background-warning {
background-color: #ffdd57 !important; }
.has-text-danger {
color: #ff3860 !important; }
a.has-text-danger:hover, a.has-text-danger:focus {
color: #ff0537 !important; }
.has-background-danger {
background-color: #ff3860 !important; }
.has-text-black-bis {
color: #121212 !important; }
.has-background-black-bis {
background-color: #121212 !important; }
.has-text-black-ter {
color: #242424 !important; }
.has-background-black-ter {
background-color: #242424 !important; }
.has-text-grey-darker {
color: #363636 !important; }
.has-background-grey-darker {
background-color: #363636 !important; }
.has-text-grey-dark {
color: #4a4a4a !important; }
.has-background-grey-dark {
background-color: #4a4a4a !important; }
.has-text-grey {
color: #7a7a7a !important; }
.has-background-grey {
background-color: #7a7a7a !important; }
.has-text-grey-light {
color: #b5b5b5 !important; }
.has-background-grey-light {
background-color: #b5b5b5 !important; }
.has-text-grey-lighter {
color: #dbdbdb !important; }
.has-background-grey-lighter {
background-color: #dbdbdb !important; }
.has-text-white-ter {
color: whitesmoke !important; }
.has-background-white-ter {
background-color: whitesmoke !important; }
.has-text-white-bis {
color: #fafafa !important; }
.has-background-white-bis {
background-color: #fafafa !important; }
.has-text-weight-light {
font-weight: 300 !important; }
.has-text-weight-normal {
font-weight: 400 !important; }
.has-text-weight-semibold {
font-weight: 600 !important; }
.has-text-weight-bold {
font-weight: 700 !important; }
.is-block {
display: block !important; }
@media screen and (max-width: 768px) {
.is-block-mobile {
display: block !important; } }
@media screen and (min-width: 769px), print {
.is-block-tablet {
display: block !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-block-tablet-only {
display: block !important; } }
@media screen and (max-width: 1087px) {
.is-block-touch {
display: block !important; } }
@media screen and (min-width: 1088px) {
.is-block-desktop {
display: block !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-block-desktop-only {
display: block !important; } }
@media screen and (min-width: 1280px) {
.is-block-widescreen {
display: block !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-block-widescreen-only {
display: block !important; } }
@media screen and (min-width: 1472px) {
.is-block-fullhd {
display: block !important; } }
.is-flex {
display: flex !important; }
@media screen and (max-width: 768px) {
.is-flex-mobile {
display: flex !important; } }
@media screen and (min-width: 769px), print {
.is-flex-tablet {
display: flex !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-flex-tablet-only {
display: flex !important; } }
@media screen and (max-width: 1087px) {
.is-flex-touch {
display: flex !important; } }
@media screen and (min-width: 1088px) {
.is-flex-desktop {
display: flex !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-flex-desktop-only {
display: flex !important; } }
@media screen and (min-width: 1280px) {
.is-flex-widescreen {
display: flex !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-flex-widescreen-only {
display: flex !important; } }
@media screen and (min-width: 1472px) {
.is-flex-fullhd {
display: flex !important; } }
.is-inline {
display: inline !important; }
@media screen and (max-width: 768px) {
.is-inline-mobile {
display: inline !important; } }
@media screen and (min-width: 769px), print {
.is-inline-tablet {
display: inline !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-inline-tablet-only {
display: inline !important; } }
@media screen and (max-width: 1087px) {
.is-inline-touch {
display: inline !important; } }
@media screen and (min-width: 1088px) {
.is-inline-desktop {
display: inline !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-inline-desktop-only {
display: inline !important; } }
@media screen and (min-width: 1280px) {
.is-inline-widescreen {
display: inline !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-inline-widescreen-only {
display: inline !important; } }
@media screen and (min-width: 1472px) {
.is-inline-fullhd {
display: inline !important; } }
.is-inline-block {
display: inline-block !important; }
@media screen and (max-width: 768px) {
.is-inline-block-mobile {
display: inline-block !important; } }
@media screen and (min-width: 769px), print {
.is-inline-block-tablet {
display: inline-block !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-inline-block-tablet-only {
display: inline-block !important; } }
@media screen and (max-width: 1087px) {
.is-inline-block-touch {
display: inline-block !important; } }
@media screen and (min-width: 1088px) {
.is-inline-block-desktop {
display: inline-block !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-inline-block-desktop-only {
display: inline-block !important; } }
@media screen and (min-width: 1280px) {
.is-inline-block-widescreen {
display: inline-block !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-inline-block-widescreen-only {
display: inline-block !important; } }
@media screen and (min-width: 1472px) {
.is-inline-block-fullhd {
display: inline-block !important; } }
.is-inline-flex {
display: inline-flex !important; }
@media screen and (max-width: 768px) {
.is-inline-flex-mobile {
display: inline-flex !important; } }
@media screen and (min-width: 769px), print {
.is-inline-flex-tablet {
display: inline-flex !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-inline-flex-tablet-only {
display: inline-flex !important; } }
@media screen and (max-width: 1087px) {
.is-inline-flex-touch {
display: inline-flex !important; } }
@media screen and (min-width: 1088px) {
.is-inline-flex-desktop {
display: inline-flex !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-inline-flex-desktop-only {
display: inline-flex !important; } }
@media screen and (min-width: 1280px) {
.is-inline-flex-widescreen {
display: inline-flex !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-inline-flex-widescreen-only {
display: inline-flex !important; } }
@media screen and (min-width: 1472px) {
.is-inline-flex-fullhd {
display: inline-flex !important; } }
.is-hidden {
display: none !important; }
.is-sr-only {
border: none !important;
clip: rect(0, 0, 0, 0) !important;
height: 0.01em !important;
overflow: hidden !important;
padding: 0 !important;
position: absolute !important;
white-space: nowrap !important;
width: 0.01em !important; }
@media screen and (max-width: 768px) {
.is-hidden-mobile {
display: none !important; } }
@media screen and (min-width: 769px), print {
.is-hidden-tablet {
display: none !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-hidden-tablet-only {
display: none !important; } }
@media screen and (max-width: 1087px) {
.is-hidden-touch {
display: none !important; } }
@media screen and (min-width: 1088px) {
.is-hidden-desktop {
display: none !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-hidden-desktop-only {
display: none !important; } }
@media screen and (min-width: 1280px) {
.is-hidden-widescreen {
display: none !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-hidden-widescreen-only {
display: none !important; } }
@media screen and (min-width: 1472px) {
.is-hidden-fullhd {
display: none !important; } }
.is-invisible {
visibility: hidden !important; }
@media screen and (max-width: 768px) {
.is-invisible-mobile {
visibility: hidden !important; } }
@media screen and (min-width: 769px), print {
.is-invisible-tablet {
visibility: hidden !important; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.is-invisible-tablet-only {
visibility: hidden !important; } }
@media screen and (max-width: 1087px) {
.is-invisible-touch {
visibility: hidden !important; } }
@media screen and (min-width: 1088px) {
.is-invisible-desktop {
visibility: hidden !important; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.is-invisible-desktop-only {
visibility: hidden !important; } }
@media screen and (min-width: 1280px) {
.is-invisible-widescreen {
visibility: hidden !important; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.is-invisible-widescreen-only {
visibility: hidden !important; } }
@media screen and (min-width: 1472px) {
.is-invisible-fullhd {
visibility: hidden !important; } }
.is-marginless {
margin: 0 !important; }
.is-paddingless {
padding: 0 !important; }
.is-radiusless {
border-radius: 0 !important; }
.is-shadowless {
box-shadow: none !important; }
.box {
background-color: white;
border-radius: 6px;
box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
color: #4a4a4a;
display: block;
padding: 1.25rem; }
a.box:hover, a.box:focus {
box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc; }
a.box:active {
box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc; }
.button {
background-color: white;
border-color: #dbdbdb;
border-width: 1px;
color: #363636;
cursor: pointer;
justify-content: center;
padding-bottom: calc(0.375em - 1px);
padding-left: 0.75em;
padding-right: 0.75em;
padding-top: calc(0.375em - 1px);
text-align: center;
white-space: nowrap; }
.button strong {
color: inherit; }
.button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large {
height: 1.5em;
width: 1.5em; }
.button .icon:first-child:not(:last-child) {
margin-left: calc(-0.375em - 1px);
margin-right: 0.1875em; }
.button .icon:last-child:not(:first-child) {
margin-left: 0.1875em;
margin-right: calc(-0.375em - 1px); }
.button .icon:first-child:last-child {
margin-left: calc(-0.375em - 1px);
margin-right: calc(-0.375em - 1px); }
.button:hover, .button.is-hovered {
border-color: #b5b5b5;
color: #363636; }
.button:focus, .button.is-focused {
border-color: #3273dc;
color: #363636; }
.button:focus:not(:active), .button.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }
.button:active, .button.is-active {
border-color: #4a4a4a;
color: #363636; }
.button.is-text {
background-color: transparent;
border-color: transparent;
color: #4a4a4a;
text-decoration: underline; }
.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused {
background-color: whitesmoke;
color: #363636; }
.button.is-text:active, .button.is-text.is-active {
background-color: #e8e8e8;
color: #363636; }
.button.is-text[disabled] {
background-color: transparent;
border-color: transparent;
box-shadow: none; }
.button.is-white {
background-color: white;
border-color: transparent;
color: #0a0a0a; }
.button.is-white:hover, .button.is-white.is-hovered {
background-color: #f9f9f9;
border-color: transparent;
color: #0a0a0a; }
.button.is-white:focus, .button.is-white.is-focused {
border-color: transparent;
color: #0a0a0a; }
.button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }
.button.is-white:active, .button.is-white.is-active {
background-color: #f2f2f2;
border-color: transparent;
color: #0a0a0a; }
.button.is-white[disabled] {
background-color: white;
border-color: transparent;
box-shadow: none; }
.button.is-white.is-inverted {
background-color: #0a0a0a;
color: white; }
.button.is-white.is-inverted:hover {
background-color: black; }
.button.is-white.is-inverted[disabled] {
background-color: #0a0a0a;
border-color: transparent;
box-shadow: none;
color: white; }
.button.is-white.is-loading::after {
border-color: transparent transparent #0a0a0a #0a0a0a !important; }
.button.is-white.is-outlined {
background-color: transparent;
border-color: white;
color: white; }
.button.is-white.is-outlined:hover, .button.is-white.is-outlined:focus {
background-color: white;
border-color: white;
color: #0a0a0a; }
.button.is-white.is-outlined.is-loading::after {
border-color: transparent transparent white white !important; }
.button.is-white.is-outlined[disabled] {
background-color: transparent;
border-color: white;
box-shadow: none;
color: white; }
.button.is-white.is-inverted.is-outlined {
background-color: transparent;
border-color: #0a0a0a;
color: #0a0a0a; }
.button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined:focus {
background-color: #0a0a0a;
color: white; }
.button.is-white.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #0a0a0a;
box-shadow: none;
color: #0a0a0a; }
.button.is-black {
background-color: #0a0a0a;
border-color: transparent;
color: white; }
.button.is-black:hover, .button.is-black.is-hovered {
background-color: #040404;
border-color: transparent;
color: white; }
.button.is-black:focus, .button.is-black.is-focused {
border-color: transparent;
color: white; }
.button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }
.button.is-black:active, .button.is-black.is-active {
background-color: black;
border-color: transparent;
color: white; }
.button.is-black[disabled] {
background-color: #0a0a0a;
border-color: transparent;
box-shadow: none; }
.button.is-black.is-inverted {
background-color: white;
color: #0a0a0a; }
.button.is-black.is-inverted:hover {
background-color: #f2f2f2; }
.button.is-black.is-inverted[disabled] {
background-color: white;
border-color: transparent;
box-shadow: none;
color: #0a0a0a; }
.button.is-black.is-loading::after {
border-color: transparent transparent white white !important; }
.button.is-black.is-outlined {
background-color: transparent;
border-color: #0a0a0a;
color: #0a0a0a; }
.button.is-black.is-outlined:hover, .button.is-black.is-outlined:focus {
background-color: #0a0a0a;
border-color: #0a0a0a;
color: white; }
.button.is-black.is-outlined.is-loading::after {
border-color: transparent transparent #0a0a0a #0a0a0a !important; }
.button.is-black.is-outlined[disabled] {
background-color: transparent;
border-color: #0a0a0a;
box-shadow: none;
color: #0a0a0a; }
.button.is-black.is-inverted.is-outlined {
background-color: transparent;
border-color: white;
color: white; }
.button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined:focus {
background-color: white;
color: #0a0a0a; }
.button.is-black.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: white;
box-shadow: none;
color: white; }
.button.is-light {
background-color: whitesmoke;
border-color: transparent;
color: #363636; }
.button.is-light:hover, .button.is-light.is-hovered {
background-color: #eeeeee;
border-color: transparent;
color: #363636; }
.button.is-light:focus, .button.is-light.is-focused {
border-color: transparent;
color: #363636; }
.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }
.button.is-light:active, .button.is-light.is-active {
background-color: #e8e8e8;
border-color: transparent;
color: #363636; }
.button.is-light[disabled] {
background-color: whitesmoke;
border-color: transparent;
box-shadow: none; }
.button.is-light.is-inverted {
background-color: #363636;
color: whitesmoke; }
.button.is-light.is-inverted:hover {
background-color: #292929; }
.button.is-light.is-inverted[disabled] {
background-color: #363636;
border-color: transparent;
box-shadow: none;
color: whitesmoke; }
.button.is-light.is-loading::after {
border-color: transparent transparent #363636 #363636 !important; }
.button.is-light.is-outlined {
background-color: transparent;
border-color: whitesmoke;
color: whitesmoke; }
.button.is-light.is-outlined:hover, .button.is-light.is-outlined:focus {
background-color: whitesmoke;
border-color: whitesmoke;
color: #363636; }
.button.is-light.is-outlined.is-loading::after {
border-color: transparent transparent whitesmoke whitesmoke !important; }
.button.is-light.is-outlined[disabled] {
background-color: transparent;
border-color: whitesmoke;
box-shadow: none;
color: whitesmoke; }
.button.is-light.is-inverted.is-outlined {
background-color: transparent;
border-color: #363636;
color: #363636; }
.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined:focus {
background-color: #363636;
color: whitesmoke; }
.button.is-light.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #363636;
box-shadow: none;
color: #363636; }
.button.is-dark {
background-color: #363636;
border-color: transparent;
color: whitesmoke; }
.button.is-dark:hover, .button.is-dark.is-hovered {
background-color: #2f2f2f;
border-color: transparent;
color: whitesmoke; }
.button.is-dark:focus, .button.is-dark.is-focused {
border-color: transparent;
color: whitesmoke; }
.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }
.button.is-dark:active, .button.is-dark.is-active {
background-color: #292929;
border-color: transparent;
color: whitesmoke; }
.button.is-dark[disabled] {
background-color: #363636;
border-color: transparent;
box-shadow: none; }
.button.is-dark.is-inverted {
background-color: whitesmoke;
color: #363636; }
.button.is-dark.is-inverted:hover {
background-color: #e8e8e8; }
.button.is-dark.is-inverted[disabled] {
background-color: whitesmoke;
border-color: transparent;
box-shadow: none;
color: #363636; }
.button.is-dark.is-loading::after {
border-color: transparent transparent whitesmoke whitesmoke !important; }
.button.is-dark.is-outlined {
background-color: transparent;
border-color: #363636;
color: #363636; }
.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined:focus {
background-color: #363636;
border-color: #363636;
color: whitesmoke; }
.button.is-dark.is-outlined.is-loading::after {
border-color: transparent transparent #363636 #363636 !important; }
.button.is-dark.is-outlined[disabled] {
background-color: transparent;
border-color: #363636;
box-shadow: none;
color: #363636; }
.button.is-dark.is-inverted.is-outlined {
background-color: transparent;
border-color: whitesmoke;
color: whitesmoke; }
.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined:focus {
background-color: whitesmoke;
color: #363636; }
.button.is-dark.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: whitesmoke;
box-shadow: none;
color: whitesmoke; }
.button.is-primary {
background-color: #00d1b2;
border-color: transparent;
color: #fff; }
.button.is-primary:hover, .button.is-primary.is-hovered {
background-color: #00c4a7;
border-color: transparent;
color: #fff; }
.button.is-primary:focus, .button.is-primary.is-focused {
border-color: transparent;
color: #fff; }
.button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); }
.button.is-primary:active, .button.is-primary.is-active {
background-color: #00b89c;
border-color: transparent;
color: #fff; }
.button.is-primary[disabled] {
background-color: #00d1b2;
border-color: transparent;
box-shadow: none; }
.button.is-primary.is-inverted {
background-color: #fff;
color: #00d1b2; }
.button.is-primary.is-inverted:hover {
background-color: #f2f2f2; }
.button.is-primary.is-inverted[disabled] {
background-color: #fff;
border-color: transparent;
box-shadow: none;
color: #00d1b2; }
.button.is-primary.is-loading::after {
border-color: transparent transparent #fff #fff !important; }
.button.is-primary.is-outlined {
background-color: transparent;
border-color: #00d1b2;
color: #00d1b2; }
.button.is-primary.is-outlined:hover, .button.is-primary.is-outlined:focus {
background-color: #00d1b2;
border-color: #00d1b2;
color: #fff; }
.button.is-primary.is-outlined.is-loading::after {
border-color: transparent transparent #00d1b2 #00d1b2 !important; }
.button.is-primary.is-outlined[disabled] {
background-color: transparent;
border-color: #00d1b2;
box-shadow: none;
color: #00d1b2; }
.button.is-primary.is-inverted.is-outlined {
background-color: transparent;
border-color: #fff;
color: #fff; }
.button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined:focus {
background-color: #fff;
color: #00d1b2; }
.button.is-primary.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #fff;
box-shadow: none;
color: #fff; }
.button.is-link {
background-color: #3273dc;
border-color: transparent;
color: #fff; }
.button.is-link:hover, .button.is-link.is-hovered {
background-color: #276cda;
border-color: transparent;
color: #fff; }
.button.is-link:focus, .button.is-link.is-focused {
border-color: transparent;
color: #fff; }
.button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }
.button.is-link:active, .button.is-link.is-active {
background-color: #2366d1;
border-color: transparent;
color: #fff; }
.button.is-link[disabled] {
background-color: #3273dc;
border-color: transparent;
box-shadow: none; }
.button.is-link.is-inverted {
background-color: #fff;
color: #3273dc; }
.button.is-link.is-inverted:hover {
background-color: #f2f2f2; }
.button.is-link.is-inverted[disabled] {
background-color: #fff;
border-color: transparent;
box-shadow: none;
color: #3273dc; }
.button.is-link.is-loading::after {
border-color: transparent transparent #fff #fff !important; }
.button.is-link.is-outlined {
background-color: transparent;
border-color: #3273dc;
color: #3273dc; }
.button.is-link.is-outlined:hover, .button.is-link.is-outlined:focus {
background-color: #3273dc;
border-color: #3273dc;
color: #fff; }
.button.is-link.is-outlined.is-loading::after {
border-color: transparent transparent #3273dc #3273dc !important; }
.button.is-link.is-outlined[disabled] {
background-color: transparent;
border-color: #3273dc;
box-shadow: none;
color: #3273dc; }
.button.is-link.is-inverted.is-outlined {
background-color: transparent;
border-color: #fff;
color: #fff; }
.button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined:focus {
background-color: #fff;
color: #3273dc; }
.button.is-link.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #fff;
box-shadow: none;
color: #fff; }
.button.is-info {
background-color: #209cee;
border-color: transparent;
color: #fff; }
.button.is-info:hover, .button.is-info.is-hovered {
background-color: #1496ed;
border-color: transparent;
color: #fff; }
.button.is-info:focus, .button.is-info.is-focused {
border-color: transparent;
color: #fff; }
.button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); }
.button.is-info:active, .button.is-info.is-active {
background-color: #118fe4;
border-color: transparent;
color: #fff; }
.button.is-info[disabled] {
background-color: #209cee;
border-color: transparent;
box-shadow: none; }
.button.is-info.is-inverted {
background-color: #fff;
color: #209cee; }
.button.is-info.is-inverted:hover {
background-color: #f2f2f2; }
.button.is-info.is-inverted[disabled] {
background-color: #fff;
border-color: transparent;
box-shadow: none;
color: #209cee; }
.button.is-info.is-loading::after {
border-color: transparent transparent #fff #fff !important; }
.button.is-info.is-outlined {
background-color: transparent;
border-color: #209cee;
color: #209cee; }
.button.is-info.is-outlined:hover, .button.is-info.is-outlined:focus {
background-color: #209cee;
border-color: #209cee;
color: #fff; }
.button.is-info.is-outlined.is-loading::after {
border-color: transparent transparent #209cee #209cee !important; }
.button.is-info.is-outlined[disabled] {
background-color: transparent;
border-color: #209cee;
box-shadow: none;
color: #209cee; }
.button.is-info.is-inverted.is-outlined {
background-color: transparent;
border-color: #fff;
color: #fff; }
.button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined:focus {
background-color: #fff;
color: #209cee; }
.button.is-info.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #fff;
box-shadow: none;
color: #fff; }
.button.is-success {
background-color: #23d160;
border-color: transparent;
color: #fff; }
.button.is-success:hover, .button.is-success.is-hovered {
background-color: #22c65b;
border-color: transparent;
color: #fff; }
.button.is-success:focus, .button.is-success.is-focused {
border-color: transparent;
color: #fff; }
.button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); }
.button.is-success:active, .button.is-success.is-active {
background-color: #20bc56;
border-color: transparent;
color: #fff; }
.button.is-success[disabled] {
background-color: #23d160;
border-color: transparent;
box-shadow: none; }
.button.is-success.is-inverted {
background-color: #fff;
color: #23d160; }
.button.is-success.is-inverted:hover {
background-color: #f2f2f2; }
.button.is-success.is-inverted[disabled] {
background-color: #fff;
border-color: transparent;
box-shadow: none;
color: #23d160; }
.button.is-success.is-loading::after {
border-color: transparent transparent #fff #fff !important; }
.button.is-success.is-outlined {
background-color: transparent;
border-color: #23d160;
color: #23d160; }
.button.is-success.is-outlined:hover, .button.is-success.is-outlined:focus {
background-color: #23d160;
border-color: #23d160;
color: #fff; }
.button.is-success.is-outlined.is-loading::after {
border-color: transparent transparent #23d160 #23d160 !important; }
.button.is-success.is-outlined[disabled] {
background-color: transparent;
border-color: #23d160;
box-shadow: none;
color: #23d160; }
.button.is-success.is-inverted.is-outlined {
background-color: transparent;
border-color: #fff;
color: #fff; }
.button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined:focus {
background-color: #fff;
color: #23d160; }
.button.is-success.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #fff;
box-shadow: none;
color: #fff; }
.button.is-warning {
background-color: #ffdd57;
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.button.is-warning:hover, .button.is-warning.is-hovered {
background-color: #ffdb4a;
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.button.is-warning:focus, .button.is-warning.is-focused {
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }
.button.is-warning:active, .button.is-warning.is-active {
background-color: #ffd83d;
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.button.is-warning[disabled] {
background-color: #ffdd57;
border-color: transparent;
box-shadow: none; }
.button.is-warning.is-inverted {
background-color: rgba(0, 0, 0, 0.7);
color: #ffdd57; }
.button.is-warning.is-inverted:hover {
background-color: rgba(0, 0, 0, 0.7); }
.button.is-warning.is-inverted[disabled] {
background-color: rgba(0, 0, 0, 0.7);
border-color: transparent;
box-shadow: none;
color: #ffdd57; }
.button.is-warning.is-loading::after {
border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; }
.button.is-warning.is-outlined {
background-color: transparent;
border-color: #ffdd57;
color: #ffdd57; }
.button.is-warning.is-outlined:hover, .button.is-warning.is-outlined:focus {
background-color: #ffdd57;
border-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.button.is-warning.is-outlined.is-loading::after {
border-color: transparent transparent #ffdd57 #ffdd57 !important; }
.button.is-warning.is-outlined[disabled] {
background-color: transparent;
border-color: #ffdd57;
box-shadow: none;
color: #ffdd57; }
.button.is-warning.is-inverted.is-outlined {
background-color: transparent;
border-color: rgba(0, 0, 0, 0.7);
color: rgba(0, 0, 0, 0.7); }
.button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined:focus {
background-color: rgba(0, 0, 0, 0.7);
color: #ffdd57; }
.button.is-warning.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: rgba(0, 0, 0, 0.7);
box-shadow: none;
color: rgba(0, 0, 0, 0.7); }
.button.is-danger {
background-color: #ff3860;
border-color: transparent;
color: #fff; }
.button.is-danger:hover, .button.is-danger.is-hovered {
background-color: #ff2b56;
border-color: transparent;
color: #fff; }
.button.is-danger:focus, .button.is-danger.is-focused {
border-color: transparent;
color: #fff; }
.button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) {
box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); }
.button.is-danger:active, .button.is-danger.is-active {
background-color: #ff1f4b;
border-color: transparent;
color: #fff; }
.button.is-danger[disabled] {
background-color: #ff3860;
border-color: transparent;
box-shadow: none; }
.button.is-danger.is-inverted {
background-color: #fff;
color: #ff3860; }
.button.is-danger.is-inverted:hover {
background-color: #f2f2f2; }
.button.is-danger.is-inverted[disabled] {
background-color: #fff;
border-color: transparent;
box-shadow: none;
color: #ff3860; }
.button.is-danger.is-loading::after {
border-color: transparent transparent #fff #fff !important; }
.button.is-danger.is-outlined {
background-color: transparent;
border-color: #ff3860;
color: #ff3860; }
.button.is-danger.is-outlined:hover, .button.is-danger.is-outlined:focus {
background-color: #ff3860;
border-color: #ff3860;
color: #fff; }
.button.is-danger.is-outlined.is-loading::after {
border-color: transparent transparent #ff3860 #ff3860 !important; }
.button.is-danger.is-outlined[disabled] {
background-color: transparent;
border-color: #ff3860;
box-shadow: none;
color: #ff3860; }
.button.is-danger.is-inverted.is-outlined {
background-color: transparent;
border-color: #fff;
color: #fff; }
.button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined:focus {
background-color: #fff;
color: #ff3860; }
.button.is-danger.is-inverted.is-outlined[disabled] {
background-color: transparent;
border-color: #fff;
box-shadow: none;
color: #fff; }
.button.is-small {
border-radius: 2px;
font-size: 0.75rem; }
.button.is-medium {
font-size: 1.25rem; }
.button.is-large {
font-size: 1.5rem; }
.button[disabled] {
background-color: white;
border-color: #dbdbdb;
box-shadow: none;
opacity: 0.5; }
.button.is-fullwidth {
display: flex;
width: 100%; }
.button.is-loading {
color: transparent !important;
pointer-events: none; }
.button.is-loading::after {
position: absolute;
left: calc(50% - (1em / 2));
top: calc(50% - (1em / 2));
position: absolute !important; }
.button.is-static {
background-color: whitesmoke;
border-color: #dbdbdb;
color: #7a7a7a;
box-shadow: none;
pointer-events: none; }
.button.is-rounded {
border-radius: 290486px;
padding-left: 1em;
padding-right: 1em; }
.buttons {
align-items: center;
display: flex;
flex-wrap: wrap;
justify-content: flex-start; }
.buttons .button {
margin-bottom: 0.5rem; }
.buttons .button:not(:last-child):not(.is-fullwidth) {
margin-right: 0.5rem; }
.buttons:last-child {
margin-bottom: -0.5rem; }
.buttons:not(:last-child) {
margin-bottom: 1rem; }
.buttons.has-addons .button:not(:first-child) {
border-bottom-left-radius: 0;
border-top-left-radius: 0; }
.buttons.has-addons .button:not(:last-child) {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
margin-right: -1px; }
.buttons.has-addons .button:last-child {
margin-right: 0; }
.buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered {
z-index: 2; }
.buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected {
z-index: 3; }
.buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover {
z-index: 4; }
.buttons.has-addons .button.is-expanded {
flex-grow: 1; }
.buttons.is-centered {
justify-content: center; }
.buttons.is-right {
justify-content: flex-end; }
.container {
margin: 0 auto;
position: relative; }
@media screen and (min-width: 1088px) {
.container {
max-width: 960px;
width: 960px; }
.container.is-fluid {
margin-left: 64px;
margin-right: 64px;
max-width: none;
width: auto; } }
@media screen and (max-width: 1279px) {
.container.is-widescreen {
max-width: 1152px;
width: auto; } }
@media screen and (max-width: 1471px) {
.container.is-fullhd {
max-width: 1344px;
width: auto; } }
@media screen and (min-width: 1280px) {
.container {
max-width: 1152px;
width: 1152px; } }
@media screen and (min-width: 1472px) {
.container {
max-width: 1344px;
width: 1344px; } }
.content li + li {
margin-top: 0.25em; }
.content p:not(:last-child),
.content dl:not(:last-child),
.content ol:not(:last-child),
.content ul:not(:last-child),
.content blockquote:not(:last-child),
.content pre:not(:last-child),
.content table:not(:last-child) {
margin-bottom: 1em; }
.content h1,
.content h2,
.content h3,
.content h4,
.content h5,
.content h6 {
color: #363636;
font-weight: 600;
line-height: 1.125; }
.content h1 {
font-size: 2em;
margin-bottom: 0.5em; }
.content h1:not(:first-child) {
margin-top: 1em; }
.content h2 {
font-size: 1.75em;
margin-bottom: 0.5714em; }
.content h2:not(:first-child) {
margin-top: 1.1428em; }
.content h3 {
font-size: 1.5em;
margin-bottom: 0.6666em; }
.content h3:not(:first-child) {
margin-top: 1.3333em; }
.content h4 {
font-size: 1.25em;
margin-bottom: 0.8em; }
.content h5 {
font-size: 1.125em;
margin-bottom: 0.8888em; }
.content h6 {
font-size: 1em;
margin-bottom: 1em; }
.content blockquote {
background-color: whitesmoke;
border-left: 5px solid #dbdbdb;
padding: 1.25em 1.5em; }
.content ol {
list-style-position: outside;
margin-left: 2em;
margin-top: 1em; }
.content ol:not([type]) {
list-style-type: decimal; }
.content ol:not([type]).is-lower-alpha {
list-style-type: lower-alpha; }
.content ol:not([type]).is-lower-roman {
list-style-type: lower-roman; }
.content ol:not([type]).is-upper-alpha {
list-style-type: upper-alpha; }
.content ol:not([type]).is-upper-roman {
list-style-type: upper-roman; }
.content ul {
list-style: disc outside;
margin-left: 2em;
margin-top: 1em; }
.content ul ul {
list-style-type: circle;
margin-top: 0.5em; }
.content ul ul ul {
list-style-type: square; }
.content dd {
margin-left: 2em; }
.content figure {
margin-left: 2em;
margin-right: 2em;
text-align: center; }
.content figure:not(:first-child) {
margin-top: 2em; }
.content figure:not(:last-child) {
margin-bottom: 2em; }
.content figure img {
display: inline-block; }
.content figure figcaption {
font-style: italic; }
.content pre {
-webkit-overflow-scrolling: touch;
overflow-x: auto;
padding: 1.25em 1.5em;
white-space: pre;
word-wrap: normal; }
.content sup,
.content sub {
font-size: 75%; }
.content table {
width: 100%; }
.content table td,
.content table th {
border: 1px solid #dbdbdb;
border-width: 0 0 1px;
padding: 0.5em 0.75em;
vertical-align: top; }
.content table th {
color: #363636;
text-align: left; }
.content table thead td,
.content table thead th {
border-width: 0 0 2px;
color: #363636; }
.content table tfoot td,
.content table tfoot th {
border-width: 2px 0 0;
color: #363636; }
.content table tbody tr:last-child td,
.content table tbody tr:last-child th {
border-bottom-width: 0; }
.content.is-small {
font-size: 0.75rem; }
.content.is-medium {
font-size: 1.25rem; }
.content.is-large {
font-size: 1.5rem; }
.input,
.textarea {
background-color: white;
border-color: #dbdbdb;
color: #363636;
box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);
max-width: 100%;
width: 100%; }
.input::-moz-placeholder,
.textarea::-moz-placeholder {
color: rgba(54, 54, 54, 0.3); }
.input::-webkit-input-placeholder,
.textarea::-webkit-input-placeholder {
color: rgba(54, 54, 54, 0.3); }
.input:-moz-placeholder,
.textarea:-moz-placeholder {
color: rgba(54, 54, 54, 0.3); }
.input:-ms-input-placeholder,
.textarea:-ms-input-placeholder {
color: rgba(54, 54, 54, 0.3); }
.input:hover, .input.is-hovered,
.textarea:hover,
.textarea.is-hovered {
border-color: #b5b5b5; }
.input:focus, .input.is-focused, .input:active, .input.is-active,
.textarea:focus,
.textarea.is-focused,
.textarea:active,
.textarea.is-active {
border-color: #3273dc;
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }
.input[disabled],
.textarea[disabled] {
background-color: whitesmoke;
border-color: whitesmoke;
box-shadow: none;
color: #7a7a7a; }
.input[disabled]::-moz-placeholder,
.textarea[disabled]::-moz-placeholder {
color: rgba(122, 122, 122, 0.3); }
.input[disabled]::-webkit-input-placeholder,
.textarea[disabled]::-webkit-input-placeholder {
color: rgba(122, 122, 122, 0.3); }
.input[disabled]:-moz-placeholder,
.textarea[disabled]:-moz-placeholder {
color: rgba(122, 122, 122, 0.3); }
.input[disabled]:-ms-input-placeholder,
.textarea[disabled]:-ms-input-placeholder {
color: rgba(122, 122, 122, 0.3); }
.input[readonly],
.textarea[readonly] {
box-shadow: none; }
.input.is-white,
.textarea.is-white {
border-color: white; }
.input.is-white:focus, .input.is-white.is-focused, .input.is-white:active, .input.is-white.is-active,
.textarea.is-white:focus,
.textarea.is-white.is-focused,
.textarea.is-white:active,
.textarea.is-white.is-active {
box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }
.input.is-black,
.textarea.is-black {
border-color: #0a0a0a; }
.input.is-black:focus, .input.is-black.is-focused, .input.is-black:active, .input.is-black.is-active,
.textarea.is-black:focus,
.textarea.is-black.is-focused,
.textarea.is-black:active,
.textarea.is-black.is-active {
box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }
.input.is-light,
.textarea.is-light {
border-color: whitesmoke; }
.input.is-light:focus, .input.is-light.is-focused, .input.is-light:active, .input.is-light.is-active,
.textarea.is-light:focus,
.textarea.is-light.is-focused,
.textarea.is-light:active,
.textarea.is-light.is-active {
box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }
.input.is-dark,
.textarea.is-dark {
border-color: #363636; }
.input.is-dark:focus, .input.is-dark.is-focused, .input.is-dark:active, .input.is-dark.is-active,
.textarea.is-dark:focus,
.textarea.is-dark.is-focused,
.textarea.is-dark:active,
.textarea.is-dark.is-active {
box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }
.input.is-primary,
.textarea.is-primary {
border-color: #00d1b2; }
.input.is-primary:focus, .input.is-primary.is-focused, .input.is-primary:active, .input.is-primary.is-active,
.textarea.is-primary:focus,
.textarea.is-primary.is-focused,
.textarea.is-primary:active,
.textarea.is-primary.is-active {
box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); }
.input.is-link,
.textarea.is-link {
border-color: #3273dc; }
.input.is-link:focus, .input.is-link.is-focused, .input.is-link:active, .input.is-link.is-active,
.textarea.is-link:focus,
.textarea.is-link.is-focused,
.textarea.is-link:active,
.textarea.is-link.is-active {
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }
.input.is-info,
.textarea.is-info {
border-color: #209cee; }
.input.is-info:focus, .input.is-info.is-focused, .input.is-info:active, .input.is-info.is-active,
.textarea.is-info:focus,
.textarea.is-info.is-focused,
.textarea.is-info:active,
.textarea.is-info.is-active {
box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); }
.input.is-success,
.textarea.is-success {
border-color: #23d160; }
.input.is-success:focus, .input.is-success.is-focused, .input.is-success:active, .input.is-success.is-active,
.textarea.is-success:focus,
.textarea.is-success.is-focused,
.textarea.is-success:active,
.textarea.is-success.is-active {
box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); }
.input.is-warning,
.textarea.is-warning {
border-color: #ffdd57; }
.input.is-warning:focus, .input.is-warning.is-focused, .input.is-warning:active, .input.is-warning.is-active,
.textarea.is-warning:focus,
.textarea.is-warning.is-focused,
.textarea.is-warning:active,
.textarea.is-warning.is-active {
box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }
.input.is-danger,
.textarea.is-danger {
border-color: #ff3860; }
.input.is-danger:focus, .input.is-danger.is-focused, .input.is-danger:active, .input.is-danger.is-active,
.textarea.is-danger:focus,
.textarea.is-danger.is-focused,
.textarea.is-danger:active,
.textarea.is-danger.is-active {
box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); }
.input.is-small,
.textarea.is-small {
border-radius: 2px;
font-size: 0.75rem; }
.input.is-medium,
.textarea.is-medium {
font-size: 1.25rem; }
.input.is-large,
.textarea.is-large {
font-size: 1.5rem; }
.input.is-fullwidth,
.textarea.is-fullwidth {
display: block;
width: 100%; }
.input.is-inline,
.textarea.is-inline {
display: inline;
width: auto; }
.input.is-rounded {
border-radius: 290486px;
padding-left: 1em;
padding-right: 1em; }
.input.is-static {
background-color: transparent;
border-color: transparent;
box-shadow: none;
padding-left: 0;
padding-right: 0; }
.textarea {
display: block;
max-width: 100%;
min-width: 100%;
padding: 0.625em;
resize: vertical; }
.textarea:not([rows]) {
max-height: 600px;
min-height: 120px; }
.textarea[rows] {
height: initial; }
.textarea.has-fixed-size {
resize: none; }
.checkbox,
.radio {
cursor: pointer;
display: inline-block;
line-height: 1.25;
position: relative; }
.checkbox input,
.radio input {
cursor: pointer; }
.checkbox:hover,
.radio:hover {
color: #363636; }
.checkbox[disabled],
.radio[disabled] {
color: #7a7a7a;
cursor: not-allowed; }
.radio + .radio {
margin-left: 0.5em; }
.select {
display: inline-block;
max-width: 100%;
position: relative;
vertical-align: top; }
.select:not(.is-multiple) {
height: 2.25em; }
.select:not(.is-multiple):not(.is-loading)::after {
border-color: #3273dc;
right: 1.125em;
z-index: 4; }
.select.is-rounded select {
border-radius: 290486px;
padding-left: 1em; }
.select select {
background-color: white;
border-color: #dbdbdb;
color: #363636;
cursor: pointer;
display: block;
font-size: 1em;
max-width: 100%;
outline: none; }
.select select::-moz-placeholder {
color: rgba(54, 54, 54, 0.3); }
.select select::-webkit-input-placeholder {
color: rgba(54, 54, 54, 0.3); }
.select select:-moz-placeholder {
color: rgba(54, 54, 54, 0.3); }
.select select:-ms-input-placeholder {
color: rgba(54, 54, 54, 0.3); }
.select select:hover, .select select.is-hovered {
border-color: #b5b5b5; }
.select select:focus, .select select.is-focused, .select select:active, .select select.is-active {
border-color: #3273dc;
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }
.select select[disabled] {
background-color: whitesmoke;
border-color: whitesmoke;
box-shadow: none;
color: #7a7a7a; }
.select select[disabled]::-moz-placeholder {
color: rgba(122, 122, 122, 0.3); }
.select select[disabled]::-webkit-input-placeholder {
color: rgba(122, 122, 122, 0.3); }
.select select[disabled]:-moz-placeholder {
color: rgba(122, 122, 122, 0.3); }
.select select[disabled]:-ms-input-placeholder {
color: rgba(122, 122, 122, 0.3); }
.select select::-ms-expand {
display: none; }
.select select[disabled]:hover {
border-color: whitesmoke; }
.select select:not([multiple]) {
padding-right: 2.5em; }
.select select[multiple] {
height: auto;
padding: 0; }
.select select[multiple] option {
padding: 0.5em 1em; }
.select:not(.is-multiple):not(.is-loading):hover::after {
border-color: #363636; }
.select.is-white:not(:hover)::after {
border-color: white; }
.select.is-white select {
border-color: white; }
.select.is-white select:hover, .select.is-white select.is-hovered {
border-color: #f2f2f2; }
.select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active {
box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }
.select.is-black:not(:hover)::after {
border-color: #0a0a0a; }
.select.is-black select {
border-color: #0a0a0a; }
.select.is-black select:hover, .select.is-black select.is-hovered {
border-color: black; }
.select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active {
box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }
.select.is-light:not(:hover)::after {
border-color: whitesmoke; }
.select.is-light select {
border-color: whitesmoke; }
.select.is-light select:hover, .select.is-light select.is-hovered {
border-color: #e8e8e8; }
.select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active {
box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }
.select.is-dark:not(:hover)::after {
border-color: #363636; }
.select.is-dark select {
border-color: #363636; }
.select.is-dark select:hover, .select.is-dark select.is-hovered {
border-color: #292929; }
.select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active {
box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }
.select.is-primary:not(:hover)::after {
border-color: #00d1b2; }
.select.is-primary select {
border-color: #00d1b2; }
.select.is-primary select:hover, .select.is-primary select.is-hovered {
border-color: #00b89c; }
.select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active {
box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); }
.select.is-link:not(:hover)::after {
border-color: #3273dc; }
.select.is-link select {
border-color: #3273dc; }
.select.is-link select:hover, .select.is-link select.is-hovered {
border-color: #2366d1; }
.select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active {
box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); }
.select.is-info:not(:hover)::after {
border-color: #209cee; }
.select.is-info select {
border-color: #209cee; }
.select.is-info select:hover, .select.is-info select.is-hovered {
border-color: #118fe4; }
.select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active {
box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); }
.select.is-success:not(:hover)::after {
border-color: #23d160; }
.select.is-success select {
border-color: #23d160; }
.select.is-success select:hover, .select.is-success select.is-hovered {
border-color: #20bc56; }
.select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active {
box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); }
.select.is-warning:not(:hover)::after {
border-color: #ffdd57; }
.select.is-warning select {
border-color: #ffdd57; }
.select.is-warning select:hover, .select.is-warning select.is-hovered {
border-color: #ffd83d; }
.select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active {
box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }
.select.is-danger:not(:hover)::after {
border-color: #ff3860; }
.select.is-danger select {
border-color: #ff3860; }
.select.is-danger select:hover, .select.is-danger select.is-hovered {
border-color: #ff1f4b; }
.select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active {
box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); }
.select.is-small {
border-radius: 2px;
font-size: 0.75rem; }
.select.is-medium {
font-size: 1.25rem; }
.select.is-large {
font-size: 1.5rem; }
.select.is-disabled::after {
border-color: #7a7a7a; }
.select.is-fullwidth {
width: 100%; }
.select.is-fullwidth select {
width: 100%; }
.select.is-loading::after {
margin-top: 0;
position: absolute;
right: 0.625em;
top: 0.625em;
transform: none; }
.select.is-loading.is-small:after {
font-size: 0.75rem; }
.select.is-loading.is-medium:after {
font-size: 1.25rem; }
.select.is-loading.is-large:after {
font-size: 1.5rem; }
.file {
align-items: stretch;
display: flex;
justify-content: flex-start;
position: relative; }
.file.is-white .file-cta {
background-color: white;
border-color: transparent;
color: #0a0a0a; }
.file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta {
background-color: #f9f9f9;
border-color: transparent;
color: #0a0a0a; }
.file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25);
color: #0a0a0a; }
.file.is-white:active .file-cta, .file.is-white.is-active .file-cta {
background-color: #f2f2f2;
border-color: transparent;
color: #0a0a0a; }
.file.is-black .file-cta {
background-color: #0a0a0a;
border-color: transparent;
color: white; }
.file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta {
background-color: #040404;
border-color: transparent;
color: white; }
.file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25);
color: white; }
.file.is-black:active .file-cta, .file.is-black.is-active .file-cta {
background-color: black;
border-color: transparent;
color: white; }
.file.is-light .file-cta {
background-color: whitesmoke;
border-color: transparent;
color: #363636; }
.file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta {
background-color: #eeeeee;
border-color: transparent;
color: #363636; }
.file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25);
color: #363636; }
.file.is-light:active .file-cta, .file.is-light.is-active .file-cta {
background-color: #e8e8e8;
border-color: transparent;
color: #363636; }
.file.is-dark .file-cta {
background-color: #363636;
border-color: transparent;
color: whitesmoke; }
.file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta {
background-color: #2f2f2f;
border-color: transparent;
color: whitesmoke; }
.file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25);
color: whitesmoke; }
.file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta {
background-color: #292929;
border-color: transparent;
color: whitesmoke; }
.file.is-primary .file-cta {
background-color: #00d1b2;
border-color: transparent;
color: #fff; }
.file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta {
background-color: #00c4a7;
border-color: transparent;
color: #fff; }
.file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25);
color: #fff; }
.file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta {
background-color: #00b89c;
border-color: transparent;
color: #fff; }
.file.is-link .file-cta {
background-color: #3273dc;
border-color: transparent;
color: #fff; }
.file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta {
background-color: #276cda;
border-color: transparent;
color: #fff; }
.file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25);
color: #fff; }
.file.is-link:active .file-cta, .file.is-link.is-active .file-cta {
background-color: #2366d1;
border-color: transparent;
color: #fff; }
.file.is-info .file-cta {
background-color: #209cee;
border-color: transparent;
color: #fff; }
.file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta {
background-color: #1496ed;
border-color: transparent;
color: #fff; }
.file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25);
color: #fff; }
.file.is-info:active .file-cta, .file.is-info.is-active .file-cta {
background-color: #118fe4;
border-color: transparent;
color: #fff; }
.file.is-success .file-cta {
background-color: #23d160;
border-color: transparent;
color: #fff; }
.file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta {
background-color: #22c65b;
border-color: transparent;
color: #fff; }
.file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(35, 209, 96, 0.25);
color: #fff; }
.file.is-success:active .file-cta, .file.is-success.is-active .file-cta {
background-color: #20bc56;
border-color: transparent;
color: #fff; }
.file.is-warning .file-cta {
background-color: #ffdd57;
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta {
background-color: #ffdb4a;
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25);
color: rgba(0, 0, 0, 0.7); }
.file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta {
background-color: #ffd83d;
border-color: transparent;
color: rgba(0, 0, 0, 0.7); }
.file.is-danger .file-cta {
background-color: #ff3860;
border-color: transparent;
color: #fff; }
.file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta {
background-color: #ff2b56;
border-color: transparent;
color: #fff; }
.file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta {
border-color: transparent;
box-shadow: 0 0 0.5em rgba(255, 56, 96, 0.25);
color: #fff; }
.file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta {
background-color: #ff1f4b;
border-color: transparent;
color: #fff; }
.file.is-small {
font-size: 0.75rem; }
.file.is-medium {
font-size: 1.25rem; }
.file.is-medium .file-icon .fa {
font-size: 21px; }
.file.is-large {
font-size: 1.5rem; }
.file.is-large .file-icon .fa {
font-size: 28px; }
.file.has-name .file-cta {
border-bottom-right-radius: 0;
border-top-right-radius: 0; }
.file.has-name .file-name {
border-bottom-left-radius: 0;
border-top-left-radius: 0; }
.file.has-name.is-empty .file-cta {
border-radius: 4px; }
.file.has-name.is-empty .file-name {
display: none; }
.file.is-boxed .file-label {
flex-direction: column; }
.file.is-boxed .file-cta {
flex-direction: column;
height: auto;
padding: 1em 3em; }
.file.is-boxed .file-name {
border-width: 0 1px 1px; }
.file.is-boxed .file-icon {
height: 1.5em;
width: 1.5em; }
.file.is-boxed .file-icon .fa {
font-size: 21px; }
.file.is-boxed.is-small .file-icon .fa {
font-size: 14px; }
.file.is-boxed.is-medium .file-icon .fa {
font-size: 28px; }
.file.is-boxed.is-large .file-icon .fa {
font-size: 35px; }
.file.is-boxed.has-name .file-cta {
border-radius: 4px 4px 0 0; }
.file.is-boxed.has-name .file-name {
border-radius: 0 0 4px 4px;
border-width: 0 1px 1px; }
.file.is-centered {
justify-content: center; }
.file.is-fullwidth .file-label {
width: 100%; }
.file.is-fullwidth .file-name {
flex-grow: 1;
max-width: none; }
.file.is-right {
justify-content: flex-end; }
.file.is-right .file-cta {
border-radius: 0 4px 4px 0; }
.file.is-right .file-name {
border-radius: 4px 0 0 4px;
border-width: 1px 0 1px 1px;
order: -1; }
.file-label {
align-items: stretch;
display: flex;
cursor: pointer;
justify-content: flex-start;
overflow: hidden;
position: relative; }
.file-label:hover .file-cta {
background-color: #eeeeee;
color: #363636; }
.file-label:hover .file-name {
border-color: #d5d5d5; }
.file-label:active .file-cta {
background-color: #e8e8e8;
color: #363636; }
.file-label:active .file-name {
border-color: #cfcfcf; }
.file-input {
height: 100%;
left: 0;
opacity: 0;
outline: none;
position: absolute;
top: 0;
width: 100%; }
.file-cta,
.file-name {
border-color: #dbdbdb;
border-radius: 4px;
font-size: 1em;
padding-left: 1em;
padding-right: 1em;
white-space: nowrap; }
.file-cta {
background-color: whitesmoke;
color: #4a4a4a; }
.file-name {
border-color: #dbdbdb;
border-style: solid;
border-width: 1px 1px 1px 0;
display: block;
max-width: 16em;
overflow: hidden;
text-align: left;
text-overflow: ellipsis; }
.file-icon {
align-items: center;
display: flex;
height: 1em;
justify-content: center;
margin-right: 0.5em;
width: 1em; }
.file-icon .fa {
font-size: 14px; }
.label {
color: #363636;
display: block;
font-size: 1rem;
font-weight: 700; }
.label:not(:last-child) {
margin-bottom: 0.5em; }
.label.is-small {
font-size: 0.75rem; }
.label.is-medium {
font-size: 1.25rem; }
.label.is-large {
font-size: 1.5rem; }
.help {
display: block;
font-size: 0.75rem;
margin-top: 0.25rem; }
.help.is-white {
color: white; }
.help.is-black {
color: #0a0a0a; }
.help.is-light {
color: whitesmoke; }
.help.is-dark {
color: #363636; }
.help.is-primary {
color: #00d1b2; }
.help.is-link {
color: #3273dc; }
.help.is-info {
color: #209cee; }
.help.is-success {
color: #23d160; }
.help.is-warning {
color: #ffdd57; }
.help.is-danger {
color: #ff3860; }
.field:not(:last-child) {
margin-bottom: 0.75rem; }
.field.has-addons {
display: flex;
justify-content: flex-start; }
.field.has-addons .control:not(:last-child) {
margin-right: -1px; }
.field.has-addons .control:not(:first-child):not(:last-child) .button,
.field.has-addons .control:not(:first-child):not(:last-child) .input,
.field.has-addons .control:not(:first-child):not(:last-child) .select select {
border-radius: 0; }
.field.has-addons .control:first-child .button,
.field.has-addons .control:first-child .input,
.field.has-addons .control:first-child .select select {
border-bottom-right-radius: 0;
border-top-right-radius: 0; }
.field.has-addons .control:last-child .button,
.field.has-addons .control:last-child .input,
.field.has-addons .control:last-child .select select {
border-bottom-left-radius: 0;
border-top-left-radius: 0; }
.field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered,
.field.has-addons .control .input:not([disabled]):hover,
.field.has-addons .control .input:not([disabled]).is-hovered,
.field.has-addons .control .select select:not([disabled]):hover,
.field.has-addons .control .select select:not([disabled]).is-hovered {
z-index: 2; }
.field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active,
.field.has-addons .control .input:not([disabled]):focus,
.field.has-addons .control .input:not([disabled]).is-focused,
.field.has-addons .control .input:not([disabled]):active,
.field.has-addons .control .input:not([disabled]).is-active,
.field.has-addons .control .select select:not([disabled]):focus,
.field.has-addons .control .select select:not([disabled]).is-focused,
.field.has-addons .control .select select:not([disabled]):active,
.field.has-addons .control .select select:not([disabled]).is-active {
z-index: 3; }
.field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover,
.field.has-addons .control .input:not([disabled]):focus:hover,
.field.has-addons .control .input:not([disabled]).is-focused:hover,
.field.has-addons .control .input:not([disabled]):active:hover,
.field.has-addons .control .input:not([disabled]).is-active:hover,
.field.has-addons .control .select select:not([disabled]):focus:hover,
.field.has-addons .control .select select:not([disabled]).is-focused:hover,
.field.has-addons .control .select select:not([disabled]):active:hover,
.field.has-addons .control .select select:not([disabled]).is-active:hover {
z-index: 4; }
.field.has-addons .control.is-expanded {
flex-grow: 1; }
.field.has-addons.has-addons-centered {
justify-content: center; }
.field.has-addons.has-addons-right {
justify-content: flex-end; }
.field.has-addons.has-addons-fullwidth .control {
flex-grow: 1;
flex-shrink: 0; }
.field.is-grouped {
display: flex;
justify-content: flex-start; }
.field.is-grouped > .control {
flex-shrink: 0; }
.field.is-grouped > .control:not(:last-child) {
margin-bottom: 0;
margin-right: 0.75rem; }
.field.is-grouped > .control.is-expanded {
flex-grow: 1;
flex-shrink: 1; }
.field.is-grouped.is-grouped-centered {
justify-content: center; }
.field.is-grouped.is-grouped-right {
justify-content: flex-end; }
.field.is-grouped.is-grouped-multiline {
flex-wrap: wrap; }
.field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) {
margin-bottom: 0.75rem; }
.field.is-grouped.is-grouped-multiline:last-child {
margin-bottom: -0.75rem; }
.field.is-grouped.is-grouped-multiline:not(:last-child) {
margin-bottom: 0; }
@media screen and (min-width: 769px), print {
.field.is-horizontal {
display: flex; } }
.field-label .label {
font-size: inherit; }
@media screen and (max-width: 768px) {
.field-label {
margin-bottom: 0.5rem; } }
@media screen and (min-width: 769px), print {
.field-label {
flex-basis: 0;
flex-grow: 1;
flex-shrink: 0;
margin-right: 1.5rem;
text-align: right; }
.field-label.is-small {
font-size: 0.75rem;
padding-top: 0.375em; }
.field-label.is-normal {
padding-top: 0.375em; }
.field-label.is-medium {
font-size: 1.25rem;
padding-top: 0.375em; }
.field-label.is-large {
font-size: 1.5rem;
padding-top: 0.375em; } }
.field-body .field .field {
margin-bottom: 0; }
@media screen and (min-width: 769px), print {
.field-body {
display: flex;
flex-basis: 0;
flex-grow: 5;
flex-shrink: 1; }
.field-body .field {
margin-bottom: 0; }
.field-body > .field {
flex-shrink: 1; }
.field-body > .field:not(.is-narrow) {
flex-grow: 1; }
.field-body > .field:not(:last-child) {
margin-right: 0.75rem; } }
.control {
clear: both;
font-size: 1rem;
position: relative;
text-align: left; }
.control.has-icon .icon {
color: #dbdbdb;
height: 2.25em;
pointer-events: none;
position: absolute;
top: 0;
width: 2.25em;
z-index: 4; }
.control.has-icon .input:focus + .icon {
color: #7a7a7a; }
.control.has-icon .input.is-small + .icon {
font-size: 0.75rem; }
.control.has-icon .input.is-medium + .icon {
font-size: 1.25rem; }
.control.has-icon .input.is-large + .icon {
font-size: 1.5rem; }
.control.has-icon:not(.has-icon-right) .icon {
left: 0; }
.control.has-icon:not(.has-icon-right) .input {
padding-left: 2.25em; }
.control.has-icon.has-icon-right .icon {
right: 0; }
.control.has-icon.has-icon-right .input {
padding-right: 2.25em; }
.control.has-icons-left .input:focus ~ .icon,
.control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon,
.control.has-icons-right .select:focus ~ .icon {
color: #7a7a7a; }
.control.has-icons-left .input.is-small ~ .icon,
.control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon,
.control.has-icons-right .select.is-small ~ .icon {
font-size: 0.75rem; }
.control.has-icons-left .input.is-medium ~ .icon,
.control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon,
.control.has-icons-right .select.is-medium ~ .icon {
font-size: 1.25rem; }
.control.has-icons-left .input.is-large ~ .icon,
.control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon,
.control.has-icons-right .select.is-large ~ .icon {
font-size: 1.5rem; }
.control.has-icons-left .icon, .control.has-icons-right .icon {
color: #dbdbdb;
height: 2.25em;
pointer-events: none;
position: absolute;
top: 0;
width: 2.25em;
z-index: 4; }
.control.has-icons-left .input,
.control.has-icons-left .select select {
padding-left: 2.25em; }
.control.has-icons-left .icon.is-left {
left: 0; }
.control.has-icons-right .input,
.control.has-icons-right .select select {
padding-right: 2.25em; }
.control.has-icons-right .icon.is-right {
right: 0; }
.control.is-loading::after {
position: absolute !important;
right: 0.625em;
top: 0.625em;
z-index: 4; }
.control.is-loading.is-small:after {
font-size: 0.75rem; }
.control.is-loading.is-medium:after {
font-size: 1.25rem; }
.control.is-loading.is-large:after {
font-size: 1.5rem; }
.icon {
align-items: center;
display: inline-flex;
justify-content: center;
height: 1.5rem;
width: 1.5rem; }
.icon.is-small {
height: 1rem;
width: 1rem; }
.icon.is-medium {
height: 2rem;
width: 2rem; }
.icon.is-large {
height: 3rem;
width: 3rem; }
.image {
display: block;
position: relative; }
.image img {
display: block;
height: auto;
width: 100%; }
.image img.is-rounded {
border-radius: 290486px; }
.image.is-square img, .image.is-1by1 img, .image.is-5by4 img, .image.is-4by3 img, .image.is-3by2 img, .image.is-5by3 img, .image.is-16by9 img, .image.is-2by1 img, .image.is-3by1 img, .image.is-4by5 img, .image.is-3by4 img, .image.is-2by3 img, .image.is-3by5 img, .image.is-9by16 img, .image.is-1by2 img, .image.is-1by3 img {
height: 100%;
width: 100%; }
.image.is-square, .image.is-1by1 {
padding-top: 100%; }
.image.is-5by4 {
padding-top: 80%; }
.image.is-4by3 {
padding-top: 75%; }
.image.is-3by2 {
padding-top: 66.6666%; }
.image.is-5by3 {
padding-top: 60%; }
.image.is-16by9 {
padding-top: 56.25%; }
.image.is-2by1 {
padding-top: 50%; }
.image.is-3by1 {
padding-top: 33.3333%; }
.image.is-4by5 {
padding-top: 125%; }
.image.is-3by4 {
padding-top: 133.3333%; }
.image.is-2by3 {
padding-top: 150%; }
.image.is-3by5 {
padding-top: 166.6666%; }
.image.is-9by16 {
padding-top: 177.7777%; }
.image.is-1by2 {
padding-top: 200%; }
.image.is-1by3 {
padding-top: 300%; }
.image.is-16x16 {
height: 16px;
width: 16px; }
.image.is-24x24 {
height: 24px;
width: 24px; }
.image.is-32x32 {
height: 32px;
width: 32px; }
.image.is-48x48 {
height: 48px;
width: 48px; }
.image.is-64x64 {
height: 64px;
width: 64px; }
.image.is-96x96 {
height: 96px;
width: 96px; }
.image.is-128x128 {
height: 128px;
width: 128px; }
.notification {
background-color: whitesmoke;
border-radius: 4px;
padding: 1.25rem 2.5rem 1.25rem 1.5rem;
position: relative; }
.notification a:not(.button):not(.dropdown-item) {
color: currentColor;
text-decoration: underline; }
.notification strong {
color: currentColor; }
.notification code,
.notification pre {
background: white; }
.notification pre code {
background: transparent; }
.notification > .delete {
position: absolute;
right: 0.5rem;
top: 0.5rem; }
.notification .title,
.notification .subtitle,
.notification .content {
color: currentColor; }
.notification.is-white {
background-color: white;
color: #0a0a0a; }
.notification.is-black {
background-color: #0a0a0a;
color: white; }
.notification.is-light {
background-color: whitesmoke;
color: #363636; }
.notification.is-dark {
background-color: #363636;
color: whitesmoke; }
.notification.is-primary {
background-color: #00d1b2;
color: #fff; }
.notification.is-link {
background-color: #3273dc;
color: #fff; }
.notification.is-info {
background-color: #209cee;
color: #fff; }
.notification.is-success {
background-color: #23d160;
color: #fff; }
.notification.is-warning {
background-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.notification.is-danger {
background-color: #ff3860;
color: #fff; }
.progress {
-moz-appearance: none;
-webkit-appearance: none;
border: none;
border-radius: 290486px;
display: block;
height: 1rem;
overflow: hidden;
padding: 0;
width: 100%; }
.progress::-webkit-progress-bar {
background-color: #dbdbdb; }
.progress::-webkit-progress-value {
background-color: #4a4a4a; }
.progress::-moz-progress-bar {
background-color: #4a4a4a; }
.progress::-ms-fill {
background-color: #4a4a4a;
border: none; }
.progress.is-white::-webkit-progress-value {
background-color: white; }
.progress.is-white::-moz-progress-bar {
background-color: white; }
.progress.is-white::-ms-fill {
background-color: white; }
.progress.is-black::-webkit-progress-value {
background-color: #0a0a0a; }
.progress.is-black::-moz-progress-bar {
background-color: #0a0a0a; }
.progress.is-black::-ms-fill {
background-color: #0a0a0a; }
.progress.is-light::-webkit-progress-value {
background-color: whitesmoke; }
.progress.is-light::-moz-progress-bar {
background-color: whitesmoke; }
.progress.is-light::-ms-fill {
background-color: whitesmoke; }
.progress.is-dark::-webkit-progress-value {
background-color: #363636; }
.progress.is-dark::-moz-progress-bar {
background-color: #363636; }
.progress.is-dark::-ms-fill {
background-color: #363636; }
.progress.is-primary::-webkit-progress-value {
background-color: #00d1b2; }
.progress.is-primary::-moz-progress-bar {
background-color: #00d1b2; }
.progress.is-primary::-ms-fill {
background-color: #00d1b2; }
.progress.is-link::-webkit-progress-value {
background-color: #3273dc; }
.progress.is-link::-moz-progress-bar {
background-color: #3273dc; }
.progress.is-link::-ms-fill {
background-color: #3273dc; }
.progress.is-info::-webkit-progress-value {
background-color: #209cee; }
.progress.is-info::-moz-progress-bar {
background-color: #209cee; }
.progress.is-info::-ms-fill {
background-color: #209cee; }
.progress.is-success::-webkit-progress-value {
background-color: #23d160; }
.progress.is-success::-moz-progress-bar {
background-color: #23d160; }
.progress.is-success::-ms-fill {
background-color: #23d160; }
.progress.is-warning::-webkit-progress-value {
background-color: #ffdd57; }
.progress.is-warning::-moz-progress-bar {
background-color: #ffdd57; }
.progress.is-warning::-ms-fill {
background-color: #ffdd57; }
.progress.is-danger::-webkit-progress-value {
background-color: #ff3860; }
.progress.is-danger::-moz-progress-bar {
background-color: #ff3860; }
.progress.is-danger::-ms-fill {
background-color: #ff3860; }
.progress.is-small {
height: 0.75rem; }
.progress.is-medium {
height: 1.25rem; }
.progress.is-large {
height: 1.5rem; }
.table {
background-color: white;
color: #363636; }
.table td,
.table th {
border: 1px solid #dbdbdb;
border-width: 0 0 1px;
padding: 0.5em 0.75em;
vertical-align: top; }
.table td.is-white,
.table th.is-white {
background-color: white;
border-color: white;
color: #0a0a0a; }
.table td.is-black,
.table th.is-black {
background-color: #0a0a0a;
border-color: #0a0a0a;
color: white; }
.table td.is-light,
.table th.is-light {
background-color: whitesmoke;
border-color: whitesmoke;
color: #363636; }
.table td.is-dark,
.table th.is-dark {
background-color: #363636;
border-color: #363636;
color: whitesmoke; }
.table td.is-primary,
.table th.is-primary {
background-color: #00d1b2;
border-color: #00d1b2;
color: #fff; }
.table td.is-link,
.table th.is-link {
background-color: #3273dc;
border-color: #3273dc;
color: #fff; }
.table td.is-info,
.table th.is-info {
background-color: #209cee;
border-color: #209cee;
color: #fff; }
.table td.is-success,
.table th.is-success {
background-color: #23d160;
border-color: #23d160;
color: #fff; }
.table td.is-warning,
.table th.is-warning {
background-color: #ffdd57;
border-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.table td.is-danger,
.table th.is-danger {
background-color: #ff3860;
border-color: #ff3860;
color: #fff; }
.table td.is-narrow,
.table th.is-narrow {
white-space: nowrap;
width: 1%; }
.table td.is-selected,
.table th.is-selected {
background-color: #00d1b2;
color: #fff; }
.table td.is-selected a,
.table td.is-selected strong,
.table th.is-selected a,
.table th.is-selected strong {
color: currentColor; }
.table th {
color: #363636;
text-align: left; }
.table tr.is-selected {
background-color: #00d1b2;
color: #fff; }
.table tr.is-selected a,
.table tr.is-selected strong {
color: currentColor; }
.table tr.is-selected td,
.table tr.is-selected th {
border-color: #fff;
color: currentColor; }
.table thead td,
.table thead th {
border-width: 0 0 2px;
color: #363636; }
.table tfoot td,
.table tfoot th {
border-width: 2px 0 0;
color: #363636; }
.table tbody tr:last-child td,
.table tbody tr:last-child th {
border-bottom-width: 0; }
.table.is-bordered td,
.table.is-bordered th {
border-width: 1px; }
.table.is-bordered tr:last-child td,
.table.is-bordered tr:last-child th {
border-bottom-width: 1px; }
.table.is-fullwidth {
width: 100%; }
.table.is-hoverable tbody tr:not(.is-selected):hover {
background-color: #fafafa; }
.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover {
background-color: #fafafa; }
.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) {
background-color: whitesmoke; }
.table.is-narrow td,
.table.is-narrow th {
padding: 0.25em 0.5em; }
.table.is-striped tbody tr:not(.is-selected):nth-child(even) {
background-color: #fafafa; }
.table-container {
-webkit-overflow-scrolling: touch;
overflow: auto;
overflow-y: hidden;
max-width: 100%; }
.tags {
align-items: center;
display: flex;
flex-wrap: wrap;
justify-content: flex-start; }
.tags .tag {
margin-bottom: 0.5rem; }
.tags .tag:not(:last-child) {
margin-right: 0.5rem; }
.tags:last-child {
margin-bottom: -0.5rem; }
.tags:not(:last-child) {
margin-bottom: 1rem; }
.tags.has-addons .tag {
margin-right: 0; }
.tags.has-addons .tag:not(:first-child) {
border-bottom-left-radius: 0;
border-top-left-radius: 0; }
.tags.has-addons .tag:not(:last-child) {
border-bottom-right-radius: 0;
border-top-right-radius: 0; }
.tags.is-centered {
justify-content: center; }
.tags.is-centered .tag {
margin-right: 0.25rem;
margin-left: 0.25rem; }
.tags.is-right {
justify-content: flex-end; }
.tags.is-right .tag:not(:first-child) {
margin-left: 0.5rem; }
.tags.is-right .tag:not(:last-child) {
margin-right: 0; }
.tag:not(body) {
align-items: center;
background-color: whitesmoke;
border-radius: 4px;
color: #4a4a4a;
display: inline-flex;
font-size: 0.75rem;
height: 2em;
justify-content: center;
line-height: 1.5;
padding-left: 0.75em;
padding-right: 0.75em;
white-space: nowrap; }
.tag:not(body) .delete {
margin-left: 0.25rem;
margin-right: -0.375rem; }
.tag:not(body).is-white {
background-color: white;
color: #0a0a0a; }
.tag:not(body).is-black {
background-color: #0a0a0a;
color: white; }
.tag:not(body).is-light {
background-color: whitesmoke;
color: #363636; }
.tag:not(body).is-dark {
background-color: #363636;
color: whitesmoke; }
.tag:not(body).is-primary {
background-color: #00d1b2;
color: #fff; }
.tag:not(body).is-link {
background-color: #3273dc;
color: #fff; }
.tag:not(body).is-info {
background-color: #209cee;
color: #fff; }
.tag:not(body).is-success {
background-color: #23d160;
color: #fff; }
.tag:not(body).is-warning {
background-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.tag:not(body).is-danger {
background-color: #ff3860;
color: #fff; }
.tag:not(body).is-medium {
font-size: 1rem; }
.tag:not(body).is-large {
font-size: 1.25rem; }
.tag:not(body) .icon:first-child:not(:last-child) {
margin-left: -0.375em;
margin-right: 0.1875em; }
.tag:not(body) .icon:last-child:not(:first-child) {
margin-left: 0.1875em;
margin-right: -0.375em; }
.tag:not(body) .icon:first-child:last-child {
margin-left: -0.375em;
margin-right: -0.375em; }
.tag:not(body).is-delete {
margin-left: 1px;
padding: 0;
position: relative;
width: 2em; }
.tag:not(body).is-delete::before, .tag:not(body).is-delete::after {
background-color: currentColor;
content: "";
display: block;
left: 50%;
position: absolute;
top: 50%;
transform: translateX(-50%) translateY(-50%) rotate(45deg);
transform-origin: center center; }
.tag:not(body).is-delete::before {
height: 1px;
width: 50%; }
.tag:not(body).is-delete::after {
height: 50%;
width: 1px; }
.tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus {
background-color: #e8e8e8; }
.tag:not(body).is-delete:active {
background-color: #dbdbdb; }
.tag:not(body).is-rounded {
border-radius: 290486px; }
a.tag:hover {
text-decoration: underline; }
.title,
.subtitle {
word-break: break-word; }
.title em,
.title span,
.subtitle em,
.subtitle span {
font-weight: inherit; }
.title sub,
.subtitle sub {
font-size: 0.75em; }
.title sup,
.subtitle sup {
font-size: 0.75em; }
.title .tag,
.subtitle .tag {
vertical-align: middle; }
.title {
color: #363636;
font-size: 2rem;
font-weight: 600;
line-height: 1.125; }
.title strong {
color: inherit;
font-weight: inherit; }
.title + .highlight {
margin-top: -0.75rem; }
.title:not(.is-spaced) + .subtitle {
margin-top: -1.25rem; }
.title.is-1 {
font-size: 3rem; }
.title.is-2 {
font-size: 2.5rem; }
.title.is-3 {
font-size: 2rem; }
.title.is-4 {
font-size: 1.5rem; }
.title.is-5 {
font-size: 1.25rem; }
.title.is-6 {
font-size: 1rem; }
.title.is-7 {
font-size: 0.75rem; }
.subtitle {
color: #4a4a4a;
font-size: 1.25rem;
font-weight: 400;
line-height: 1.25; }
.subtitle strong {
color: #363636;
font-weight: 600; }
.subtitle:not(.is-spaced) + .title {
margin-top: -1.25rem; }
.subtitle.is-1 {
font-size: 3rem; }
.subtitle.is-2 {
font-size: 2.5rem; }
.subtitle.is-3 {
font-size: 2rem; }
.subtitle.is-4 {
font-size: 1.5rem; }
.subtitle.is-5 {
font-size: 1.25rem; }
.subtitle.is-6 {
font-size: 1rem; }
.subtitle.is-7 {
font-size: 0.75rem; }
.heading {
display: block;
font-size: 11px;
letter-spacing: 1px;
margin-bottom: 5px;
text-transform: uppercase; }
.highlight {
font-weight: 400;
max-width: 100%;
overflow: hidden;
padding: 0; }
.highlight pre {
overflow: auto;
max-width: 100%; }
.number {
align-items: center;
background-color: whitesmoke;
border-radius: 290486px;
display: inline-flex;
font-size: 1.25rem;
height: 2em;
justify-content: center;
margin-right: 1.5rem;
min-width: 2.5em;
padding: 0.25rem 0.5rem;
text-align: center;
vertical-align: top; }
.breadcrumb {
font-size: 1rem;
white-space: nowrap; }
.breadcrumb a {
align-items: center;
color: #3273dc;
display: flex;
justify-content: center;
padding: 0 0.75em; }
.breadcrumb a:hover {
color: #363636; }
.breadcrumb li {
align-items: center;
display: flex; }
.breadcrumb li:first-child a {
padding-left: 0; }
.breadcrumb li.is-active a {
color: #363636;
cursor: default;
pointer-events: none; }
.breadcrumb li + li::before {
color: #b5b5b5;
content: "/"; }
.breadcrumb ul,
.breadcrumb ol {
align-items: flex-start;
display: flex;
flex-wrap: wrap;
justify-content: flex-start; }
.breadcrumb .icon:first-child {
margin-right: 0.5em; }
.breadcrumb .icon:last-child {
margin-left: 0.5em; }
.breadcrumb.is-centered ol,
.breadcrumb.is-centered ul {
justify-content: center; }
.breadcrumb.is-right ol,
.breadcrumb.is-right ul {
justify-content: flex-end; }
.breadcrumb.is-small {
font-size: 0.75rem; }
.breadcrumb.is-medium {
font-size: 1.25rem; }
.breadcrumb.is-large {
font-size: 1.5rem; }
.breadcrumb.has-arrow-separator li + li::before {
content: "\2192"; }
.breadcrumb.has-bullet-separator li + li::before {
content: "\2022"; }
.breadcrumb.has-dot-separator li + li::before {
content: "\B7"; }
.breadcrumb.has-succeeds-separator li + li::before {
content: "\227B"; }
.card {
background-color: white;
box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
color: #4a4a4a;
max-width: 100%;
position: relative; }
.card-header {
background-color: transparent;
align-items: stretch;
box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1);
display: flex; }
.card-header-title {
align-items: center;
color: #363636;
display: flex;
flex-grow: 1;
font-weight: 700;
padding: 0.75rem; }
.card-header-title.is-centered {
justify-content: center; }
.card-header-icon {
align-items: center;
cursor: pointer;
display: flex;
justify-content: center;
padding: 0.75rem; }
.card-image {
display: block;
position: relative; }
.card-content {
background-color: transparent;
padding: 1.5rem; }
.card-footer {
background-color: transparent;
border-top: 1px solid #dbdbdb;
align-items: stretch;
display: flex; }
.card-footer-item {
align-items: center;
display: flex;
flex-basis: 0;
flex-grow: 1;
flex-shrink: 0;
justify-content: center;
padding: 0.75rem; }
.card-footer-item:not(:last-child) {
border-right: 1px solid #dbdbdb; }
.card .media:not(:last-child) {
margin-bottom: 0.75rem; }
.dropdown {
display: inline-flex;
position: relative;
vertical-align: top; }
.dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu {
display: block; }
.dropdown.is-right .dropdown-menu {
left: auto;
right: 0; }
.dropdown.is-up .dropdown-menu {
bottom: 100%;
padding-bottom: 4px;
padding-top: initial;
top: auto; }
.dropdown-menu {
display: none;
left: 0;
min-width: 12rem;
padding-top: 4px;
position: absolute;
top: 100%;
z-index: 20; }
.dropdown-content {
background-color: white;
border-radius: 4px;
box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
padding-bottom: 0.5rem;
padding-top: 0.5rem; }
.dropdown-item {
color: #4a4a4a;
display: block;
font-size: 0.875rem;
line-height: 1.5;
padding: 0.375rem 1rem;
position: relative; }
a.dropdown-item,
button.dropdown-item {
padding-right: 3rem;
text-align: left;
white-space: nowrap;
width: 100%; }
a.dropdown-item:hover,
button.dropdown-item:hover {
background-color: whitesmoke;
color: #0a0a0a; }
a.dropdown-item.is-active,
button.dropdown-item.is-active {
background-color: #3273dc;
color: #fff; }
.dropdown-divider {
background-color: #dbdbdb;
border: none;
display: block;
height: 1px;
margin: 0.5rem 0; }
.level {
align-items: center;
justify-content: space-between; }
.level code {
border-radius: 4px; }
.level img {
display: inline-block;
vertical-align: top; }
.level.is-mobile {
display: flex; }
.level.is-mobile .level-left,
.level.is-mobile .level-right {
display: flex; }
.level.is-mobile .level-left + .level-right {
margin-top: 0; }
.level.is-mobile .level-item:not(:last-child) {
margin-bottom: 0;
margin-right: 0.75rem; }
.level.is-mobile .level-item:not(.is-narrow) {
flex-grow: 1; }
@media screen and (min-width: 769px), print {
.level {
display: flex; }
.level > .level-item:not(.is-narrow) {
flex-grow: 1; } }
.level-item {
align-items: center;
display: flex;
flex-basis: auto;
flex-grow: 0;
flex-shrink: 0;
justify-content: center; }
.level-item .title,
.level-item .subtitle {
margin-bottom: 0; }
@media screen and (max-width: 768px) {
.level-item:not(:last-child) {
margin-bottom: 0.75rem; } }
.level-left,
.level-right {
flex-basis: auto;
flex-grow: 0;
flex-shrink: 0; }
.level-left .level-item.is-flexible,
.level-right .level-item.is-flexible {
flex-grow: 1; }
@media screen and (min-width: 769px), print {
.level-left .level-item:not(:last-child),
.level-right .level-item:not(:last-child) {
margin-right: 0.75rem; } }
.level-left {
align-items: center;
justify-content: flex-start; }
@media screen and (max-width: 768px) {
.level-left + .level-right {
margin-top: 1.5rem; } }
@media screen and (min-width: 769px), print {
.level-left {
display: flex; } }
.level-right {
align-items: center;
justify-content: flex-end; }
@media screen and (min-width: 769px), print {
.level-right {
display: flex; } }
.list {
background-color: white;
border-radius: 4px;
box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); }
.list-item {
display: block;
padding: 0.5em 1em; }
.list-item:not(a) {
color: #4a4a4a; }
.list-item:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px; }
.list-item:last-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px; }
.list-item:not(:last-child) {
border-bottom: 1px solid #dbdbdb; }
.list-item.is-active {
background-color: #3273dc;
color: #fff; }
a.list-item {
background-color: whitesmoke;
cursor: pointer; }
.media {
align-items: flex-start;
display: flex;
text-align: left; }
.media .content:not(:last-child) {
margin-bottom: 0.75rem; }
.media .media {
border-top: 1px solid rgba(219, 219, 219, 0.5);
display: flex;
padding-top: 0.75rem; }
.media .media .content:not(:last-child),
.media .media .control:not(:last-child) {
margin-bottom: 0.5rem; }
.media .media .media {
padding-top: 0.5rem; }
.media .media .media + .media {
margin-top: 0.5rem; }
.media + .media {
border-top: 1px solid rgba(219, 219, 219, 0.5);
margin-top: 1rem;
padding-top: 1rem; }
.media.is-large + .media {
margin-top: 1.5rem;
padding-top: 1.5rem; }
.media-left,
.media-right {
flex-basis: auto;
flex-grow: 0;
flex-shrink: 0; }
.media-left {
margin-right: 1rem; }
.media-right {
margin-left: 1rem; }
.media-content {
flex-basis: auto;
flex-grow: 1;
flex-shrink: 1;
text-align: left; }
@media screen and (max-width: 768px) {
.media-content {
overflow-x: auto; } }
.menu {
font-size: 1rem; }
.menu.is-small {
font-size: 0.75rem; }
.menu.is-medium {
font-size: 1.25rem; }
.menu.is-large {
font-size: 1.5rem; }
.menu-list {
line-height: 1.25; }
.menu-list a {
border-radius: 2px;
color: #4a4a4a;
display: block;
padding: 0.5em 0.75em; }
.menu-list a:hover {
background-color: whitesmoke;
color: #363636; }
.menu-list a.is-active {
background-color: #3273dc;
color: #fff; }
.menu-list li ul {
border-left: 1px solid #dbdbdb;
margin: 0.75em;
padding-left: 0.75em; }
.menu-label {
color: #7a7a7a;
font-size: 0.75em;
letter-spacing: 0.1em;
text-transform: uppercase; }
.menu-label:not(:first-child) {
margin-top: 1em; }
.menu-label:not(:last-child) {
margin-bottom: 1em; }
.message {
background-color: whitesmoke;
border-radius: 4px;
font-size: 1rem; }
.message strong {
color: currentColor; }
.message a:not(.button):not(.tag) {
color: currentColor;
text-decoration: underline; }
.message.is-small {
font-size: 0.75rem; }
.message.is-medium {
font-size: 1.25rem; }
.message.is-large {
font-size: 1.5rem; }
.message.is-white {
background-color: white; }
.message.is-white .message-header {
background-color: white;
color: #0a0a0a; }
.message.is-white .message-body {
border-color: white;
color: #4d4d4d; }
.message.is-black {
background-color: #fafafa; }
.message.is-black .message-header {
background-color: #0a0a0a;
color: white; }
.message.is-black .message-body {
border-color: #0a0a0a;
color: #090909; }
.message.is-light {
background-color: #fafafa; }
.message.is-light .message-header {
background-color: whitesmoke;
color: #363636; }
.message.is-light .message-body {
border-color: whitesmoke;
color: #505050; }
.message.is-dark {
background-color: #fafafa; }
.message.is-dark .message-header {
background-color: #363636;
color: whitesmoke; }
.message.is-dark .message-body {
border-color: #363636;
color: #2a2a2a; }
.message.is-primary {
background-color: #f5fffd; }
.message.is-primary .message-header {
background-color: #00d1b2;
color: #fff; }
.message.is-primary .message-body {
border-color: #00d1b2;
color: #021310; }
.message.is-link {
background-color: #f6f9fe; }
.message.is-link .message-header {
background-color: #3273dc;
color: #fff; }
.message.is-link .message-body {
border-color: #3273dc;
color: #22509a; }
.message.is-info {
background-color: #f6fbfe; }
.message.is-info .message-header {
background-color: #209cee;
color: #fff; }
.message.is-info .message-body {
border-color: #209cee;
color: #12537e; }
.message.is-success {
background-color: #f6fef9; }
.message.is-success .message-header {
background-color: #23d160;
color: #fff; }
.message.is-success .message-body {
border-color: #23d160;
color: #0e301a; }
.message.is-warning {
background-color: #fffdf5; }
.message.is-warning .message-header {
background-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.message.is-warning .message-body {
border-color: #ffdd57;
color: #3b3108; }
.message.is-danger {
background-color: #fff5f7; }
.message.is-danger .message-header {
background-color: #ff3860;
color: #fff; }
.message.is-danger .message-body {
border-color: #ff3860;
color: #cd0930; }
.message-header {
align-items: center;
background-color: #4a4a4a;
border-radius: 4px 4px 0 0;
color: #fff;
display: flex;
font-weight: 700;
justify-content: space-between;
line-height: 1.25;
padding: 0.75em 1em;
position: relative; }
.message-header .delete {
flex-grow: 0;
flex-shrink: 0;
margin-left: 0.75em; }
.message-header + .message-body {
border-width: 0;
border-top-left-radius: 0;
border-top-right-radius: 0; }
.message-body {
border-color: #dbdbdb;
border-radius: 4px;
border-style: solid;
border-width: 0 0 0 4px;
color: #4a4a4a;
padding: 1.25em 1.5em; }
.message-body code,
.message-body pre {
background-color: white; }
.message-body pre code {
background-color: transparent; }
.modal {
align-items: center;
display: none;
flex-direction: column;
justify-content: center;
overflow: hidden;
position: fixed;
z-index: 40; }
.modal.is-active {
display: flex; }
.modal-background {
background-color: rgba(10, 10, 10, 0.86); }
.modal-content,
.modal-card {
margin: 0 20px;
max-height: calc(100vh - 160px);
overflow: auto;
position: relative;
width: 100%; }
@media screen and (min-width: 769px), print {
.modal-content,
.modal-card {
margin: 0 auto;
max-height: calc(100vh - 40px);
width: 640px; } }
.modal-close {
background: none;
height: 40px;
position: fixed;
right: 20px;
top: 20px;
width: 40px; }
.modal-card {
display: flex;
flex-direction: column;
max-height: calc(100vh - 40px);
overflow: hidden;
-ms-overflow-y: visible; }
.modal-card-head,
.modal-card-foot {
align-items: center;
background-color: whitesmoke;
display: flex;
flex-shrink: 0;
justify-content: flex-start;
padding: 20px;
position: relative; }
.modal-card-head {
border-bottom: 1px solid #dbdbdb;
border-top-left-radius: 6px;
border-top-right-radius: 6px; }
.modal-card-title {
color: #363636;
flex-grow: 1;
flex-shrink: 0;
font-size: 1.5rem;
line-height: 1; }
.modal-card-foot {
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top: 1px solid #dbdbdb; }
.modal-card-foot .button:not(:last-child) {
margin-right: 10px; }
.modal-card-body {
-webkit-overflow-scrolling: touch;
background-color: white;
flex-grow: 1;
flex-shrink: 1;
overflow: auto;
padding: 20px; }
.navbar {
background-color: white;
min-height: 3.25rem;
position: relative;
z-index: 30; }
.navbar.is-white {
background-color: white;
color: #0a0a0a; }
.navbar.is-white .navbar-brand > .navbar-item,
.navbar.is-white .navbar-brand .navbar-link {
color: #0a0a0a; }
.navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active,
.navbar.is-white .navbar-brand .navbar-link:hover,
.navbar.is-white .navbar-brand .navbar-link.is-active {
background-color: #f2f2f2;
color: #0a0a0a; }
.navbar.is-white .navbar-brand .navbar-link::after {
border-color: #0a0a0a; }
.navbar.is-white .navbar-burger {
color: #0a0a0a; }
@media screen and (min-width: 1088px) {
.navbar.is-white .navbar-start > .navbar-item,
.navbar.is-white .navbar-start .navbar-link,
.navbar.is-white .navbar-end > .navbar-item,
.navbar.is-white .navbar-end .navbar-link {
color: #0a0a0a; }
.navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active,
.navbar.is-white .navbar-start .navbar-link:hover,
.navbar.is-white .navbar-start .navbar-link.is-active,
.navbar.is-white .navbar-end > a.navbar-item:hover,
.navbar.is-white .navbar-end > a.navbar-item.is-active,
.navbar.is-white .navbar-end .navbar-link:hover,
.navbar.is-white .navbar-end .navbar-link.is-active {
background-color: #f2f2f2;
color: #0a0a0a; }
.navbar.is-white .navbar-start .navbar-link::after,
.navbar.is-white .navbar-end .navbar-link::after {
border-color: #0a0a0a; }
.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #f2f2f2;
color: #0a0a0a; }
.navbar.is-white .navbar-dropdown a.navbar-item.is-active {
background-color: white;
color: #0a0a0a; } }
.navbar.is-black {
background-color: #0a0a0a;
color: white; }
.navbar.is-black .navbar-brand > .navbar-item,
.navbar.is-black .navbar-brand .navbar-link {
color: white; }
.navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active,
.navbar.is-black .navbar-brand .navbar-link:hover,
.navbar.is-black .navbar-brand .navbar-link.is-active {
background-color: black;
color: white; }
.navbar.is-black .navbar-brand .navbar-link::after {
border-color: white; }
.navbar.is-black .navbar-burger {
color: white; }
@media screen and (min-width: 1088px) {
.navbar.is-black .navbar-start > .navbar-item,
.navbar.is-black .navbar-start .navbar-link,
.navbar.is-black .navbar-end > .navbar-item,
.navbar.is-black .navbar-end .navbar-link {
color: white; }
.navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active,
.navbar.is-black .navbar-start .navbar-link:hover,
.navbar.is-black .navbar-start .navbar-link.is-active,
.navbar.is-black .navbar-end > a.navbar-item:hover,
.navbar.is-black .navbar-end > a.navbar-item.is-active,
.navbar.is-black .navbar-end .navbar-link:hover,
.navbar.is-black .navbar-end .navbar-link.is-active {
background-color: black;
color: white; }
.navbar.is-black .navbar-start .navbar-link::after,
.navbar.is-black .navbar-end .navbar-link::after {
border-color: white; }
.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link {
background-color: black;
color: white; }
.navbar.is-black .navbar-dropdown a.navbar-item.is-active {
background-color: #0a0a0a;
color: white; } }
.navbar.is-light {
background-color: whitesmoke;
color: #363636; }
.navbar.is-light .navbar-brand > .navbar-item,
.navbar.is-light .navbar-brand .navbar-link {
color: #363636; }
.navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active,
.navbar.is-light .navbar-brand .navbar-link:hover,
.navbar.is-light .navbar-brand .navbar-link.is-active {
background-color: #e8e8e8;
color: #363636; }
.navbar.is-light .navbar-brand .navbar-link::after {
border-color: #363636; }
.navbar.is-light .navbar-burger {
color: #363636; }
@media screen and (min-width: 1088px) {
.navbar.is-light .navbar-start > .navbar-item,
.navbar.is-light .navbar-start .navbar-link,
.navbar.is-light .navbar-end > .navbar-item,
.navbar.is-light .navbar-end .navbar-link {
color: #363636; }
.navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active,
.navbar.is-light .navbar-start .navbar-link:hover,
.navbar.is-light .navbar-start .navbar-link.is-active,
.navbar.is-light .navbar-end > a.navbar-item:hover,
.navbar.is-light .navbar-end > a.navbar-item.is-active,
.navbar.is-light .navbar-end .navbar-link:hover,
.navbar.is-light .navbar-end .navbar-link.is-active {
background-color: #e8e8e8;
color: #363636; }
.navbar.is-light .navbar-start .navbar-link::after,
.navbar.is-light .navbar-end .navbar-link::after {
border-color: #363636; }
.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #e8e8e8;
color: #363636; }
.navbar.is-light .navbar-dropdown a.navbar-item.is-active {
background-color: whitesmoke;
color: #363636; } }
.navbar.is-dark {
background-color: #363636;
color: whitesmoke; }
.navbar.is-dark .navbar-brand > .navbar-item,
.navbar.is-dark .navbar-brand .navbar-link {
color: whitesmoke; }
.navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active,
.navbar.is-dark .navbar-brand .navbar-link:hover,
.navbar.is-dark .navbar-brand .navbar-link.is-active {
background-color: #292929;
color: whitesmoke; }
.navbar.is-dark .navbar-brand .navbar-link::after {
border-color: whitesmoke; }
.navbar.is-dark .navbar-burger {
color: whitesmoke; }
@media screen and (min-width: 1088px) {
.navbar.is-dark .navbar-start > .navbar-item,
.navbar.is-dark .navbar-start .navbar-link,
.navbar.is-dark .navbar-end > .navbar-item,
.navbar.is-dark .navbar-end .navbar-link {
color: whitesmoke; }
.navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active,
.navbar.is-dark .navbar-start .navbar-link:hover,
.navbar.is-dark .navbar-start .navbar-link.is-active,
.navbar.is-dark .navbar-end > a.navbar-item:hover,
.navbar.is-dark .navbar-end > a.navbar-item.is-active,
.navbar.is-dark .navbar-end .navbar-link:hover,
.navbar.is-dark .navbar-end .navbar-link.is-active {
background-color: #292929;
color: whitesmoke; }
.navbar.is-dark .navbar-start .navbar-link::after,
.navbar.is-dark .navbar-end .navbar-link::after {
border-color: whitesmoke; }
.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #292929;
color: whitesmoke; }
.navbar.is-dark .navbar-dropdown a.navbar-item.is-active {
background-color: #363636;
color: whitesmoke; } }
.navbar.is-primary {
background-color: #00d1b2;
color: #fff; }
.navbar.is-primary .navbar-brand > .navbar-item,
.navbar.is-primary .navbar-brand .navbar-link {
color: #fff; }
.navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active,
.navbar.is-primary .navbar-brand .navbar-link:hover,
.navbar.is-primary .navbar-brand .navbar-link.is-active {
background-color: #00b89c;
color: #fff; }
.navbar.is-primary .navbar-brand .navbar-link::after {
border-color: #fff; }
.navbar.is-primary .navbar-burger {
color: #fff; }
@media screen and (min-width: 1088px) {
.navbar.is-primary .navbar-start > .navbar-item,
.navbar.is-primary .navbar-start .navbar-link,
.navbar.is-primary .navbar-end > .navbar-item,
.navbar.is-primary .navbar-end .navbar-link {
color: #fff; }
.navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active,
.navbar.is-primary .navbar-start .navbar-link:hover,
.navbar.is-primary .navbar-start .navbar-link.is-active,
.navbar.is-primary .navbar-end > a.navbar-item:hover,
.navbar.is-primary .navbar-end > a.navbar-item.is-active,
.navbar.is-primary .navbar-end .navbar-link:hover,
.navbar.is-primary .navbar-end .navbar-link.is-active {
background-color: #00b89c;
color: #fff; }
.navbar.is-primary .navbar-start .navbar-link::after,
.navbar.is-primary .navbar-end .navbar-link::after {
border-color: #fff; }
.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #00b89c;
color: #fff; }
.navbar.is-primary .navbar-dropdown a.navbar-item.is-active {
background-color: #00d1b2;
color: #fff; } }
.navbar.is-link {
background-color: #3273dc;
color: #fff; }
.navbar.is-link .navbar-brand > .navbar-item,
.navbar.is-link .navbar-brand .navbar-link {
color: #fff; }
.navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active,
.navbar.is-link .navbar-brand .navbar-link:hover,
.navbar.is-link .navbar-brand .navbar-link.is-active {
background-color: #2366d1;
color: #fff; }
.navbar.is-link .navbar-brand .navbar-link::after {
border-color: #fff; }
.navbar.is-link .navbar-burger {
color: #fff; }
@media screen and (min-width: 1088px) {
.navbar.is-link .navbar-start > .navbar-item,
.navbar.is-link .navbar-start .navbar-link,
.navbar.is-link .navbar-end > .navbar-item,
.navbar.is-link .navbar-end .navbar-link {
color: #fff; }
.navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active,
.navbar.is-link .navbar-start .navbar-link:hover,
.navbar.is-link .navbar-start .navbar-link.is-active,
.navbar.is-link .navbar-end > a.navbar-item:hover,
.navbar.is-link .navbar-end > a.navbar-item.is-active,
.navbar.is-link .navbar-end .navbar-link:hover,
.navbar.is-link .navbar-end .navbar-link.is-active {
background-color: #2366d1;
color: #fff; }
.navbar.is-link .navbar-start .navbar-link::after,
.navbar.is-link .navbar-end .navbar-link::after {
border-color: #fff; }
.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #2366d1;
color: #fff; }
.navbar.is-link .navbar-dropdown a.navbar-item.is-active {
background-color: #3273dc;
color: #fff; } }
.navbar.is-info {
background-color: #209cee;
color: #fff; }
.navbar.is-info .navbar-brand > .navbar-item,
.navbar.is-info .navbar-brand .navbar-link {
color: #fff; }
.navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active,
.navbar.is-info .navbar-brand .navbar-link:hover,
.navbar.is-info .navbar-brand .navbar-link.is-active {
background-color: #118fe4;
color: #fff; }
.navbar.is-info .navbar-brand .navbar-link::after {
border-color: #fff; }
.navbar.is-info .navbar-burger {
color: #fff; }
@media screen and (min-width: 1088px) {
.navbar.is-info .navbar-start > .navbar-item,
.navbar.is-info .navbar-start .navbar-link,
.navbar.is-info .navbar-end > .navbar-item,
.navbar.is-info .navbar-end .navbar-link {
color: #fff; }
.navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active,
.navbar.is-info .navbar-start .navbar-link:hover,
.navbar.is-info .navbar-start .navbar-link.is-active,
.navbar.is-info .navbar-end > a.navbar-item:hover,
.navbar.is-info .navbar-end > a.navbar-item.is-active,
.navbar.is-info .navbar-end .navbar-link:hover,
.navbar.is-info .navbar-end .navbar-link.is-active {
background-color: #118fe4;
color: #fff; }
.navbar.is-info .navbar-start .navbar-link::after,
.navbar.is-info .navbar-end .navbar-link::after {
border-color: #fff; }
.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #118fe4;
color: #fff; }
.navbar.is-info .navbar-dropdown a.navbar-item.is-active {
background-color: #209cee;
color: #fff; } }
.navbar.is-success {
background-color: #23d160;
color: #fff; }
.navbar.is-success .navbar-brand > .navbar-item,
.navbar.is-success .navbar-brand .navbar-link {
color: #fff; }
.navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active,
.navbar.is-success .navbar-brand .navbar-link:hover,
.navbar.is-success .navbar-brand .navbar-link.is-active {
background-color: #20bc56;
color: #fff; }
.navbar.is-success .navbar-brand .navbar-link::after {
border-color: #fff; }
.navbar.is-success .navbar-burger {
color: #fff; }
@media screen and (min-width: 1088px) {
.navbar.is-success .navbar-start > .navbar-item,
.navbar.is-success .navbar-start .navbar-link,
.navbar.is-success .navbar-end > .navbar-item,
.navbar.is-success .navbar-end .navbar-link {
color: #fff; }
.navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active,
.navbar.is-success .navbar-start .navbar-link:hover,
.navbar.is-success .navbar-start .navbar-link.is-active,
.navbar.is-success .navbar-end > a.navbar-item:hover,
.navbar.is-success .navbar-end > a.navbar-item.is-active,
.navbar.is-success .navbar-end .navbar-link:hover,
.navbar.is-success .navbar-end .navbar-link.is-active {
background-color: #20bc56;
color: #fff; }
.navbar.is-success .navbar-start .navbar-link::after,
.navbar.is-success .navbar-end .navbar-link::after {
border-color: #fff; }
.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #20bc56;
color: #fff; }
.navbar.is-success .navbar-dropdown a.navbar-item.is-active {
background-color: #23d160;
color: #fff; } }
.navbar.is-warning {
background-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-brand > .navbar-item,
.navbar.is-warning .navbar-brand .navbar-link {
color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active,
.navbar.is-warning .navbar-brand .navbar-link:hover,
.navbar.is-warning .navbar-brand .navbar-link.is-active {
background-color: #ffd83d;
color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-brand .navbar-link::after {
border-color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-burger {
color: rgba(0, 0, 0, 0.7); }
@media screen and (min-width: 1088px) {
.navbar.is-warning .navbar-start > .navbar-item,
.navbar.is-warning .navbar-start .navbar-link,
.navbar.is-warning .navbar-end > .navbar-item,
.navbar.is-warning .navbar-end .navbar-link {
color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active,
.navbar.is-warning .navbar-start .navbar-link:hover,
.navbar.is-warning .navbar-start .navbar-link.is-active,
.navbar.is-warning .navbar-end > a.navbar-item:hover,
.navbar.is-warning .navbar-end > a.navbar-item.is-active,
.navbar.is-warning .navbar-end .navbar-link:hover,
.navbar.is-warning .navbar-end .navbar-link.is-active {
background-color: #ffd83d;
color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-start .navbar-link::after,
.navbar.is-warning .navbar-end .navbar-link::after {
border-color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #ffd83d;
color: rgba(0, 0, 0, 0.7); }
.navbar.is-warning .navbar-dropdown a.navbar-item.is-active {
background-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); } }
.navbar.is-danger {
background-color: #ff3860;
color: #fff; }
.navbar.is-danger .navbar-brand > .navbar-item,
.navbar.is-danger .navbar-brand .navbar-link {
color: #fff; }
.navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active,
.navbar.is-danger .navbar-brand .navbar-link:hover,
.navbar.is-danger .navbar-brand .navbar-link.is-active {
background-color: #ff1f4b;
color: #fff; }
.navbar.is-danger .navbar-brand .navbar-link::after {
border-color: #fff; }
.navbar.is-danger .navbar-burger {
color: #fff; }
@media screen and (min-width: 1088px) {
.navbar.is-danger .navbar-start > .navbar-item,
.navbar.is-danger .navbar-start .navbar-link,
.navbar.is-danger .navbar-end > .navbar-item,
.navbar.is-danger .navbar-end .navbar-link {
color: #fff; }
.navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active,
.navbar.is-danger .navbar-start .navbar-link:hover,
.navbar.is-danger .navbar-start .navbar-link.is-active,
.navbar.is-danger .navbar-end > a.navbar-item:hover,
.navbar.is-danger .navbar-end > a.navbar-item.is-active,
.navbar.is-danger .navbar-end .navbar-link:hover,
.navbar.is-danger .navbar-end .navbar-link.is-active {
background-color: #ff1f4b;
color: #fff; }
.navbar.is-danger .navbar-start .navbar-link::after,
.navbar.is-danger .navbar-end .navbar-link::after {
border-color: #fff; }
.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,
.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #ff1f4b;
color: #fff; }
.navbar.is-danger .navbar-dropdown a.navbar-item.is-active {
background-color: #ff3860;
color: #fff; } }
.navbar > .container {
align-items: stretch;
display: flex;
min-height: 3.25rem;
width: 100%; }
.navbar.has-shadow {
box-shadow: 0 2px 0 0 whitesmoke; }
.navbar.is-fixed-bottom, .navbar.is-fixed-top {
left: 0;
position: fixed;
right: 0;
z-index: 30; }
.navbar.is-fixed-bottom {
bottom: 0; }
.navbar.is-fixed-bottom.has-shadow {
box-shadow: 0 -2px 0 0 whitesmoke; }
.navbar.is-fixed-top {
top: 0; }
html.has-navbar-fixed-top,
body.has-navbar-fixed-top {
padding-top: 3.25rem; }
html.has-navbar-fixed-bottom,
body.has-navbar-fixed-bottom {
padding-bottom: 3.25rem; }
.navbar-brand,
.navbar-tabs {
align-items: stretch;
display: flex;
flex-shrink: 0;
min-height: 3.25rem; }
.navbar-brand a.navbar-item:hover {
background-color: transparent; }
.navbar-tabs {
-webkit-overflow-scrolling: touch;
max-width: 100vw;
overflow-x: auto;
overflow-y: hidden; }
.navbar-burger {
color: #4a4a4a;
cursor: pointer;
display: block;
height: 3.25rem;
position: relative;
width: 3.25rem;
margin-left: auto; }
.navbar-burger span {
background-color: currentColor;
display: block;
height: 1px;
left: calc(50% - 8px);
position: absolute;
transform-origin: center;
transition-duration: 86ms;
transition-property: background-color, opacity, transform;
transition-timing-function: ease-out;
width: 16px; }
.navbar-burger span:nth-child(1) {
top: calc(50% - 6px); }
.navbar-burger span:nth-child(2) {
top: calc(50% - 1px); }
.navbar-burger span:nth-child(3) {
top: calc(50% + 4px); }
.navbar-burger:hover {
background-color: rgba(0, 0, 0, 0.05); }
.navbar-burger.is-active span:nth-child(1) {
transform: translateY(5px) rotate(45deg); }
.navbar-burger.is-active span:nth-child(2) {
opacity: 0; }
.navbar-burger.is-active span:nth-child(3) {
transform: translateY(-5px) rotate(-45deg); }
.navbar-menu {
display: none; }
.navbar-item,
.navbar-link {
color: #4a4a4a;
display: block;
line-height: 1.5;
padding: 0.5rem 0.75rem;
position: relative; }
.navbar-item .icon:only-child,
.navbar-link .icon:only-child {
margin-left: -0.25rem;
margin-right: -0.25rem; }
a.navbar-item,
.navbar-link {
cursor: pointer; }
a.navbar-item:hover, a.navbar-item.is-active,
.navbar-link:hover,
.navbar-link.is-active {
background-color: #fafafa;
color: #3273dc; }
.navbar-item {
display: block;
flex-grow: 0;
flex-shrink: 0; }
.navbar-item img {
max-height: 1.75rem; }
.navbar-item.has-dropdown {
padding: 0; }
.navbar-item.is-expanded {
flex-grow: 1;
flex-shrink: 1; }
.navbar-item.is-tab {
border-bottom: 1px solid transparent;
min-height: 3.25rem;
padding-bottom: calc(0.5rem - 1px); }
.navbar-item.is-tab:hover {
background-color: transparent;
border-bottom-color: #3273dc; }
.navbar-item.is-tab.is-active {
background-color: transparent;
border-bottom-color: #3273dc;
border-bottom-style: solid;
border-bottom-width: 3px;
color: #3273dc;
padding-bottom: calc(0.5rem - 3px); }
.navbar-content {
flex-grow: 1;
flex-shrink: 1; }
.navbar-link:not(.is-arrowless) {
padding-right: 2.5em; }
.navbar-link:not(.is-arrowless)::after {
border-color: #3273dc;
margin-top: -0.375em;
right: 1.125em; }
.navbar-dropdown {
font-size: 0.875rem;
padding-bottom: 0.5rem;
padding-top: 0.5rem; }
.navbar-dropdown .navbar-item {
padding-left: 1.5rem;
padding-right: 1.5rem; }
.navbar-divider {
background-color: whitesmoke;
border: none;
display: none;
height: 2px;
margin: 0.5rem 0; }
@media screen and (max-width: 1087px) {
.navbar > .container {
display: block; }
.navbar-brand .navbar-item,
.navbar-tabs .navbar-item {
align-items: center;
display: flex; }
.navbar-link::after {
display: none; }
.navbar-menu {
background-color: white;
box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1);
padding: 0.5rem 0; }
.navbar-menu.is-active {
display: block; }
.navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch {
left: 0;
position: fixed;
right: 0;
z-index: 30; }
.navbar.is-fixed-bottom-touch {
bottom: 0; }
.navbar.is-fixed-bottom-touch.has-shadow {
box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); }
.navbar.is-fixed-top-touch {
top: 0; }
.navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu {
-webkit-overflow-scrolling: touch;
max-height: calc(100vh - 3.25rem);
overflow: auto; }
html.has-navbar-fixed-top-touch,
body.has-navbar-fixed-top-touch {
padding-top: 3.25rem; }
html.has-navbar-fixed-bottom-touch,
body.has-navbar-fixed-bottom-touch {
padding-bottom: 3.25rem; } }
@media screen and (min-width: 1088px) {
.navbar,
.navbar-menu,
.navbar-start,
.navbar-end {
align-items: stretch;
display: flex; }
.navbar {
min-height: 3.25rem; }
.navbar.is-spaced {
padding: 1rem 2rem; }
.navbar.is-spaced .navbar-start,
.navbar.is-spaced .navbar-end {
align-items: center; }
.navbar.is-spaced a.navbar-item,
.navbar.is-spaced .navbar-link {
border-radius: 4px; }
.navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active,
.navbar.is-transparent .navbar-link:hover,
.navbar.is-transparent .navbar-link.is-active {
background-color: transparent !important; }
.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link {
background-color: transparent !important; }
.navbar.is-transparent .navbar-dropdown a.navbar-item:hover {
background-color: whitesmoke;
color: #0a0a0a; }
.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active {
background-color: whitesmoke;
color: #3273dc; }
.navbar-burger {
display: none; }
.navbar-item,
.navbar-link {
align-items: center;
display: flex; }
.navbar-item {
display: flex; }
.navbar-item.has-dropdown {
align-items: stretch; }
.navbar-item.has-dropdown-up .navbar-link::after {
transform: rotate(135deg) translate(0.25em, -0.25em); }
.navbar-item.has-dropdown-up .navbar-dropdown {
border-bottom: 2px solid #dbdbdb;
border-radius: 6px 6px 0 0;
border-top: none;
bottom: 100%;
box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1);
top: auto; }
.navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown {
display: block; }
.navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed {
opacity: 1;
pointer-events: auto;
transform: translateY(0); }
.navbar-menu {
flex-grow: 1;
flex-shrink: 0; }
.navbar-start {
justify-content: flex-start;
margin-right: auto; }
.navbar-end {
justify-content: flex-end;
margin-left: auto; }
.navbar-dropdown {
background-color: white;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
border-top: 2px solid #dbdbdb;
box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1);
display: none;
font-size: 0.875rem;
left: 0;
min-width: 100%;
position: absolute;
top: 100%;
z-index: 20; }
.navbar-dropdown .navbar-item {
padding: 0.375rem 1rem;
white-space: nowrap; }
.navbar-dropdown a.navbar-item {
padding-right: 3rem; }
.navbar-dropdown a.navbar-item:hover {
background-color: whitesmoke;
color: #0a0a0a; }
.navbar-dropdown a.navbar-item.is-active {
background-color: whitesmoke;
color: #3273dc; }
.navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed {
border-radius: 6px;
border-top: none;
box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
display: block;
opacity: 0;
pointer-events: none;
top: calc(100% + (-4px));
transform: translateY(-5px);
transition-duration: 86ms;
transition-property: opacity, transform; }
.navbar-dropdown.is-right {
left: auto;
right: 0; }
.navbar-divider {
display: block; }
.navbar > .container .navbar-brand,
.container > .navbar .navbar-brand {
margin-left: -.75rem; }
.navbar > .container .navbar-menu,
.container > .navbar .navbar-menu {
margin-right: -.75rem; }
.navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop {
left: 0;
position: fixed;
right: 0;
z-index: 30; }
.navbar.is-fixed-bottom-desktop {
bottom: 0; }
.navbar.is-fixed-bottom-desktop.has-shadow {
box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); }
.navbar.is-fixed-top-desktop {
top: 0; }
html.has-navbar-fixed-top-desktop,
body.has-navbar-fixed-top-desktop {
padding-top: 3.25rem; }
html.has-navbar-fixed-bottom-desktop,
body.has-navbar-fixed-bottom-desktop {
padding-bottom: 3.25rem; }
html.has-spaced-navbar-fixed-top,
body.has-spaced-navbar-fixed-top {
padding-top: 5.25rem; }
html.has-spaced-navbar-fixed-bottom,
body.has-spaced-navbar-fixed-bottom {
padding-bottom: 5.25rem; }
a.navbar-item.is-active,
.navbar-link.is-active {
color: #0a0a0a; }
a.navbar-item.is-active:not(:hover),
.navbar-link.is-active:not(:hover) {
background-color: transparent; }
.navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link {
background-color: #fafafa; } }
.pagination {
font-size: 1rem;
margin: -0.25rem; }
.pagination.is-small {
font-size: 0.75rem; }
.pagination.is-medium {
font-size: 1.25rem; }
.pagination.is-large {
font-size: 1.5rem; }
.pagination.is-rounded .pagination-previous,
.pagination.is-rounded .pagination-next {
padding-left: 1em;
padding-right: 1em;
border-radius: 290486px; }
.pagination.is-rounded .pagination-link {
border-radius: 290486px; }
.pagination,
.pagination-list {
align-items: center;
display: flex;
justify-content: center;
text-align: center; }
.pagination-previous,
.pagination-next,
.pagination-link,
.pagination-ellipsis {
font-size: 1em;
padding-left: 0.5em;
padding-right: 0.5em;
justify-content: center;
margin: 0.25rem;
text-align: center; }
.pagination-previous,
.pagination-next,
.pagination-link {
border-color: #dbdbdb;
color: #363636;
min-width: 2.25em; }
.pagination-previous:hover,
.pagination-next:hover,
.pagination-link:hover {
border-color: #b5b5b5;
color: #363636; }
.pagination-previous:focus,
.pagination-next:focus,
.pagination-link:focus {
border-color: #3273dc; }
.pagination-previous:active,
.pagination-next:active,
.pagination-link:active {
box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); }
.pagination-previous[disabled],
.pagination-next[disabled],
.pagination-link[disabled] {
background-color: #dbdbdb;
border-color: #dbdbdb;
box-shadow: none;
color: #7a7a7a;
opacity: 0.5; }
.pagination-previous,
.pagination-next {
padding-left: 0.75em;
padding-right: 0.75em;
white-space: nowrap; }
.pagination-link.is-current {
background-color: #3273dc;
border-color: #3273dc;
color: #fff; }
.pagination-ellipsis {
color: #b5b5b5;
pointer-events: none; }
.pagination-list {
flex-wrap: wrap; }
@media screen and (max-width: 768px) {
.pagination {
flex-wrap: wrap; }
.pagination-previous,
.pagination-next {
flex-grow: 1;
flex-shrink: 1; }
.pagination-list li {
flex-grow: 1;
flex-shrink: 1; } }
@media screen and (min-width: 769px), print {
.pagination-list {
flex-grow: 1;
flex-shrink: 1;
justify-content: flex-start;
order: 1; }
.pagination-previous {
order: 2; }
.pagination-next {
order: 3; }
.pagination {
justify-content: space-between; }
.pagination.is-centered .pagination-previous {
order: 1; }
.pagination.is-centered .pagination-list {
justify-content: center;
order: 2; }
.pagination.is-centered .pagination-next {
order: 3; }
.pagination.is-right .pagination-previous {
order: 1; }
.pagination.is-right .pagination-next {
order: 2; }
.pagination.is-right .pagination-list {
justify-content: flex-end;
order: 3; } }
.panel {
font-size: 1rem; }
.panel:not(:last-child) {
margin-bottom: 1.5rem; }
.panel-heading,
.panel-tabs,
.panel-block {
border-bottom: 1px solid #dbdbdb;
border-left: 1px solid #dbdbdb;
border-right: 1px solid #dbdbdb; }
.panel-heading:first-child,
.panel-tabs:first-child,
.panel-block:first-child {
border-top: 1px solid #dbdbdb; }
.panel-heading {
background-color: whitesmoke;
border-radius: 4px 4px 0 0;
color: #363636;
font-size: 1.25em;
font-weight: 300;
line-height: 1.25;
padding: 0.5em 0.75em; }
.panel-tabs {
align-items: flex-end;
display: flex;
font-size: 0.875em;
justify-content: center; }
.panel-tabs a {
border-bottom: 1px solid #dbdbdb;
margin-bottom: -1px;
padding: 0.5em; }
.panel-tabs a.is-active {
border-bottom-color: #4a4a4a;
color: #363636; }
.panel-list a {
color: #4a4a4a; }
.panel-list a:hover {
color: #3273dc; }
.panel-block {
align-items: center;
color: #363636;
display: flex;
justify-content: flex-start;
padding: 0.5em 0.75em; }
.panel-block input[type="checkbox"] {
margin-right: 0.75em; }
.panel-block > .control {
flex-grow: 1;
flex-shrink: 1;
width: 100%; }
.panel-block.is-wrapped {
flex-wrap: wrap; }
.panel-block.is-active {
border-left-color: #3273dc;
color: #363636; }
.panel-block.is-active .panel-icon {
color: #3273dc; }
a.panel-block,
label.panel-block {
cursor: pointer; }
a.panel-block:hover,
label.panel-block:hover {
background-color: whitesmoke; }
.panel-icon {
display: inline-block;
font-size: 14px;
height: 1em;
line-height: 1em;
text-align: center;
vertical-align: top;
width: 1em;
color: #7a7a7a;
margin-right: 0.75em; }
.panel-icon .fa {
font-size: inherit;
line-height: inherit; }
.tabs {
-webkit-overflow-scrolling: touch;
align-items: stretch;
display: flex;
font-size: 1rem;
justify-content: space-between;
overflow: hidden;
overflow-x: auto;
white-space: nowrap; }
.tabs a {
align-items: center;
border-bottom-color: #dbdbdb;
border-bottom-style: solid;
border-bottom-width: 1px;
color: #4a4a4a;
display: flex;
justify-content: center;
margin-bottom: -1px;
padding: 0.5em 1em;
vertical-align: top; }
.tabs a:hover {
border-bottom-color: #363636;
color: #363636; }
.tabs li {
display: block; }
.tabs li.is-active a {
border-bottom-color: #3273dc;
color: #3273dc; }
.tabs ul {
align-items: center;
border-bottom-color: #dbdbdb;
border-bottom-style: solid;
border-bottom-width: 1px;
display: flex;
flex-grow: 1;
flex-shrink: 0;
justify-content: flex-start; }
.tabs ul.is-left {
padding-right: 0.75em; }
.tabs ul.is-center {
flex: none;
justify-content: center;
padding-left: 0.75em;
padding-right: 0.75em; }
.tabs ul.is-right {
justify-content: flex-end;
padding-left: 0.75em; }
.tabs .icon:first-child {
margin-right: 0.5em; }
.tabs .icon:last-child {
margin-left: 0.5em; }
.tabs.is-centered ul {
justify-content: center; }
.tabs.is-right ul {
justify-content: flex-end; }
.tabs.is-boxed a {
border: 1px solid transparent;
border-radius: 4px 4px 0 0; }
.tabs.is-boxed a:hover {
background-color: whitesmoke;
border-bottom-color: #dbdbdb; }
.tabs.is-boxed li.is-active a {
background-color: white;
border-color: #dbdbdb;
border-bottom-color: transparent !important; }
.tabs.is-fullwidth li {
flex-grow: 1;
flex-shrink: 0; }
.tabs.is-toggle a {
border-color: #dbdbdb;
border-style: solid;
border-width: 1px;
margin-bottom: 0;
position: relative; }
.tabs.is-toggle a:hover {
background-color: whitesmoke;
border-color: #b5b5b5;
z-index: 2; }
.tabs.is-toggle li + li {
margin-left: -1px; }
.tabs.is-toggle li:first-child a {
border-radius: 4px 0 0 4px; }
.tabs.is-toggle li:last-child a {
border-radius: 0 4px 4px 0; }
.tabs.is-toggle li.is-active a {
background-color: #3273dc;
border-color: #3273dc;
color: #fff;
z-index: 1; }
.tabs.is-toggle ul {
border-bottom: none; }
.tabs.is-toggle.is-toggle-rounded li:first-child a {
border-bottom-left-radius: 290486px;
border-top-left-radius: 290486px;
padding-left: 1.25em; }
.tabs.is-toggle.is-toggle-rounded li:last-child a {
border-bottom-right-radius: 290486px;
border-top-right-radius: 290486px;
padding-right: 1.25em; }
.tabs.is-small {
font-size: 0.75rem; }
.tabs.is-medium {
font-size: 1.25rem; }
.tabs.is-large {
font-size: 1.5rem; }
.column {
display: block;
flex-basis: 0;
flex-grow: 1;
flex-shrink: 1;
padding: 0.75rem; }
.columns.is-mobile > .column.is-narrow {
flex: none; }
.columns.is-mobile > .column.is-full {
flex: none;
width: 100%; }
.columns.is-mobile > .column.is-three-quarters {
flex: none;
width: 75%; }
.columns.is-mobile > .column.is-two-thirds {
flex: none;
width: 66.6666%; }
.columns.is-mobile > .column.is-half {
flex: none;
width: 50%; }
.columns.is-mobile > .column.is-one-third {
flex: none;
width: 33.3333%; }
.columns.is-mobile > .column.is-one-quarter {
flex: none;
width: 25%; }
.columns.is-mobile > .column.is-one-fifth {
flex: none;
width: 20%; }
.columns.is-mobile > .column.is-two-fifths {
flex: none;
width: 40%; }
.columns.is-mobile > .column.is-three-fifths {
flex: none;
width: 60%; }
.columns.is-mobile > .column.is-four-fifths {
flex: none;
width: 80%; }
.columns.is-mobile > .column.is-offset-three-quarters {
margin-left: 75%; }
.columns.is-mobile > .column.is-offset-two-thirds {
margin-left: 66.6666%; }
.columns.is-mobile > .column.is-offset-half {
margin-left: 50%; }
.columns.is-mobile > .column.is-offset-one-third {
margin-left: 33.3333%; }
.columns.is-mobile > .column.is-offset-one-quarter {
margin-left: 25%; }
.columns.is-mobile > .column.is-offset-one-fifth {
margin-left: 20%; }
.columns.is-mobile > .column.is-offset-two-fifths {
margin-left: 40%; }
.columns.is-mobile > .column.is-offset-three-fifths {
margin-left: 60%; }
.columns.is-mobile > .column.is-offset-four-fifths {
margin-left: 80%; }
.columns.is-mobile > .column.is-1 {
flex: none;
width: 8.33333%; }
.columns.is-mobile > .column.is-offset-1 {
margin-left: 8.33333%; }
.columns.is-mobile > .column.is-2 {
flex: none;
width: 16.66667%; }
.columns.is-mobile > .column.is-offset-2 {
margin-left: 16.66667%; }
.columns.is-mobile > .column.is-3 {
flex: none;
width: 25%; }
.columns.is-mobile > .column.is-offset-3 {
margin-left: 25%; }
.columns.is-mobile > .column.is-4 {
flex: none;
width: 33.33333%; }
.columns.is-mobile > .column.is-offset-4 {
margin-left: 33.33333%; }
.columns.is-mobile > .column.is-5 {
flex: none;
width: 41.66667%; }
.columns.is-mobile > .column.is-offset-5 {
margin-left: 41.66667%; }
.columns.is-mobile > .column.is-6 {
flex: none;
width: 50%; }
.columns.is-mobile > .column.is-offset-6 {
margin-left: 50%; }
.columns.is-mobile > .column.is-7 {
flex: none;
width: 58.33333%; }
.columns.is-mobile > .column.is-offset-7 {
margin-left: 58.33333%; }
.columns.is-mobile > .column.is-8 {
flex: none;
width: 66.66667%; }
.columns.is-mobile > .column.is-offset-8 {
margin-left: 66.66667%; }
.columns.is-mobile > .column.is-9 {
flex: none;
width: 75%; }
.columns.is-mobile > .column.is-offset-9 {
margin-left: 75%; }
.columns.is-mobile > .column.is-10 {
flex: none;
width: 83.33333%; }
.columns.is-mobile > .column.is-offset-10 {
margin-left: 83.33333%; }
.columns.is-mobile > .column.is-11 {
flex: none;
width: 91.66667%; }
.columns.is-mobile > .column.is-offset-11 {
margin-left: 91.66667%; }
.columns.is-mobile > .column.is-12 {
flex: none;
width: 100%; }
.columns.is-mobile > .column.is-offset-12 {
margin-left: 100%; }
@media screen and (max-width: 768px) {
.column.is-narrow-mobile {
flex: none; }
.column.is-full-mobile {
flex: none;
width: 100%; }
.column.is-three-quarters-mobile {
flex: none;
width: 75%; }
.column.is-two-thirds-mobile {
flex: none;
width: 66.6666%; }
.column.is-half-mobile {
flex: none;
width: 50%; }
.column.is-one-third-mobile {
flex: none;
width: 33.3333%; }
.column.is-one-quarter-mobile {
flex: none;
width: 25%; }
.column.is-one-fifth-mobile {
flex: none;
width: 20%; }
.column.is-two-fifths-mobile {
flex: none;
width: 40%; }
.column.is-three-fifths-mobile {
flex: none;
width: 60%; }
.column.is-four-fifths-mobile {
flex: none;
width: 80%; }
.column.is-offset-three-quarters-mobile {
margin-left: 75%; }
.column.is-offset-two-thirds-mobile {
margin-left: 66.6666%; }
.column.is-offset-half-mobile {
margin-left: 50%; }
.column.is-offset-one-third-mobile {
margin-left: 33.3333%; }
.column.is-offset-one-quarter-mobile {
margin-left: 25%; }
.column.is-offset-one-fifth-mobile {
margin-left: 20%; }
.column.is-offset-two-fifths-mobile {
margin-left: 40%; }
.column.is-offset-three-fifths-mobile {
margin-left: 60%; }
.column.is-offset-four-fifths-mobile {
margin-left: 80%; }
.column.is-1-mobile {
flex: none;
width: 8.33333%; }
.column.is-offset-1-mobile {
margin-left: 8.33333%; }
.column.is-2-mobile {
flex: none;
width: 16.66667%; }
.column.is-offset-2-mobile {
margin-left: 16.66667%; }
.column.is-3-mobile {
flex: none;
width: 25%; }
.column.is-offset-3-mobile {
margin-left: 25%; }
.column.is-4-mobile {
flex: none;
width: 33.33333%; }
.column.is-offset-4-mobile {
margin-left: 33.33333%; }
.column.is-5-mobile {
flex: none;
width: 41.66667%; }
.column.is-offset-5-mobile {
margin-left: 41.66667%; }
.column.is-6-mobile {
flex: none;
width: 50%; }
.column.is-offset-6-mobile {
margin-left: 50%; }
.column.is-7-mobile {
flex: none;
width: 58.33333%; }
.column.is-offset-7-mobile {
margin-left: 58.33333%; }
.column.is-8-mobile {
flex: none;
width: 66.66667%; }
.column.is-offset-8-mobile {
margin-left: 66.66667%; }
.column.is-9-mobile {
flex: none;
width: 75%; }
.column.is-offset-9-mobile {
margin-left: 75%; }
.column.is-10-mobile {
flex: none;
width: 83.33333%; }
.column.is-offset-10-mobile {
margin-left: 83.33333%; }
.column.is-11-mobile {
flex: none;
width: 91.66667%; }
.column.is-offset-11-mobile {
margin-left: 91.66667%; }
.column.is-12-mobile {
flex: none;
width: 100%; }
.column.is-offset-12-mobile {
margin-left: 100%; } }
@media screen and (min-width: 769px), print {
.column.is-narrow, .column.is-narrow-tablet {
flex: none; }
.column.is-full, .column.is-full-tablet {
flex: none;
width: 100%; }
.column.is-three-quarters, .column.is-three-quarters-tablet {
flex: none;
width: 75%; }
.column.is-two-thirds, .column.is-two-thirds-tablet {
flex: none;
width: 66.6666%; }
.column.is-half, .column.is-half-tablet {
flex: none;
width: 50%; }
.column.is-one-third, .column.is-one-third-tablet {
flex: none;
width: 33.3333%; }
.column.is-one-quarter, .column.is-one-quarter-tablet {
flex: none;
width: 25%; }
.column.is-one-fifth, .column.is-one-fifth-tablet {
flex: none;
width: 20%; }
.column.is-two-fifths, .column.is-two-fifths-tablet {
flex: none;
width: 40%; }
.column.is-three-fifths, .column.is-three-fifths-tablet {
flex: none;
width: 60%; }
.column.is-four-fifths, .column.is-four-fifths-tablet {
flex: none;
width: 80%; }
.column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet {
margin-left: 75%; }
.column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet {
margin-left: 66.6666%; }
.column.is-offset-half, .column.is-offset-half-tablet {
margin-left: 50%; }
.column.is-offset-one-third, .column.is-offset-one-third-tablet {
margin-left: 33.3333%; }
.column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet {
margin-left: 25%; }
.column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet {
margin-left: 20%; }
.column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet {
margin-left: 40%; }
.column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet {
margin-left: 60%; }
.column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet {
margin-left: 80%; }
.column.is-1, .column.is-1-tablet {
flex: none;
width: 8.33333%; }
.column.is-offset-1, .column.is-offset-1-tablet {
margin-left: 8.33333%; }
.column.is-2, .column.is-2-tablet {
flex: none;
width: 16.66667%; }
.column.is-offset-2, .column.is-offset-2-tablet {
margin-left: 16.66667%; }
.column.is-3, .column.is-3-tablet {
flex: none;
width: 25%; }
.column.is-offset-3, .column.is-offset-3-tablet {
margin-left: 25%; }
.column.is-4, .column.is-4-tablet {
flex: none;
width: 33.33333%; }
.column.is-offset-4, .column.is-offset-4-tablet {
margin-left: 33.33333%; }
.column.is-5, .column.is-5-tablet {
flex: none;
width: 41.66667%; }
.column.is-offset-5, .column.is-offset-5-tablet {
margin-left: 41.66667%; }
.column.is-6, .column.is-6-tablet {
flex: none;
width: 50%; }
.column.is-offset-6, .column.is-offset-6-tablet {
margin-left: 50%; }
.column.is-7, .column.is-7-tablet {
flex: none;
width: 58.33333%; }
.column.is-offset-7, .column.is-offset-7-tablet {
margin-left: 58.33333%; }
.column.is-8, .column.is-8-tablet {
flex: none;
width: 66.66667%; }
.column.is-offset-8, .column.is-offset-8-tablet {
margin-left: 66.66667%; }
.column.is-9, .column.is-9-tablet {
flex: none;
width: 75%; }
.column.is-offset-9, .column.is-offset-9-tablet {
margin-left: 75%; }
.column.is-10, .column.is-10-tablet {
flex: none;
width: 83.33333%; }
.column.is-offset-10, .column.is-offset-10-tablet {
margin-left: 83.33333%; }
.column.is-11, .column.is-11-tablet {
flex: none;
width: 91.66667%; }
.column.is-offset-11, .column.is-offset-11-tablet {
margin-left: 91.66667%; }
.column.is-12, .column.is-12-tablet {
flex: none;
width: 100%; }
.column.is-offset-12, .column.is-offset-12-tablet {
margin-left: 100%; } }
@media screen and (max-width: 1087px) {
.column.is-narrow-touch {
flex: none; }
.column.is-full-touch {
flex: none;
width: 100%; }
.column.is-three-quarters-touch {
flex: none;
width: 75%; }
.column.is-two-thirds-touch {
flex: none;
width: 66.6666%; }
.column.is-half-touch {
flex: none;
width: 50%; }
.column.is-one-third-touch {
flex: none;
width: 33.3333%; }
.column.is-one-quarter-touch {
flex: none;
width: 25%; }
.column.is-one-fifth-touch {
flex: none;
width: 20%; }
.column.is-two-fifths-touch {
flex: none;
width: 40%; }
.column.is-three-fifths-touch {
flex: none;
width: 60%; }
.column.is-four-fifths-touch {
flex: none;
width: 80%; }
.column.is-offset-three-quarters-touch {
margin-left: 75%; }
.column.is-offset-two-thirds-touch {
margin-left: 66.6666%; }
.column.is-offset-half-touch {
margin-left: 50%; }
.column.is-offset-one-third-touch {
margin-left: 33.3333%; }
.column.is-offset-one-quarter-touch {
margin-left: 25%; }
.column.is-offset-one-fifth-touch {
margin-left: 20%; }
.column.is-offset-two-fifths-touch {
margin-left: 40%; }
.column.is-offset-three-fifths-touch {
margin-left: 60%; }
.column.is-offset-four-fifths-touch {
margin-left: 80%; }
.column.is-1-touch {
flex: none;
width: 8.33333%; }
.column.is-offset-1-touch {
margin-left: 8.33333%; }
.column.is-2-touch {
flex: none;
width: 16.66667%; }
.column.is-offset-2-touch {
margin-left: 16.66667%; }
.column.is-3-touch {
flex: none;
width: 25%; }
.column.is-offset-3-touch {
margin-left: 25%; }
.column.is-4-touch {
flex: none;
width: 33.33333%; }
.column.is-offset-4-touch {
margin-left: 33.33333%; }
.column.is-5-touch {
flex: none;
width: 41.66667%; }
.column.is-offset-5-touch {
margin-left: 41.66667%; }
.column.is-6-touch {
flex: none;
width: 50%; }
.column.is-offset-6-touch {
margin-left: 50%; }
.column.is-7-touch {
flex: none;
width: 58.33333%; }
.column.is-offset-7-touch {
margin-left: 58.33333%; }
.column.is-8-touch {
flex: none;
width: 66.66667%; }
.column.is-offset-8-touch {
margin-left: 66.66667%; }
.column.is-9-touch {
flex: none;
width: 75%; }
.column.is-offset-9-touch {
margin-left: 75%; }
.column.is-10-touch {
flex: none;
width: 83.33333%; }
.column.is-offset-10-touch {
margin-left: 83.33333%; }
.column.is-11-touch {
flex: none;
width: 91.66667%; }
.column.is-offset-11-touch {
margin-left: 91.66667%; }
.column.is-12-touch {
flex: none;
width: 100%; }
.column.is-offset-12-touch {
margin-left: 100%; } }
@media screen and (min-width: 1088px) {
.column.is-narrow-desktop {
flex: none; }
.column.is-full-desktop {
flex: none;
width: 100%; }
.column.is-three-quarters-desktop {
flex: none;
width: 75%; }
.column.is-two-thirds-desktop {
flex: none;
width: 66.6666%; }
.column.is-half-desktop {
flex: none;
width: 50%; }
.column.is-one-third-desktop {
flex: none;
width: 33.3333%; }
.column.is-one-quarter-desktop {
flex: none;
width: 25%; }
.column.is-one-fifth-desktop {
flex: none;
width: 20%; }
.column.is-two-fifths-desktop {
flex: none;
width: 40%; }
.column.is-three-fifths-desktop {
flex: none;
width: 60%; }
.column.is-four-fifths-desktop {
flex: none;
width: 80%; }
.column.is-offset-three-quarters-desktop {
margin-left: 75%; }
.column.is-offset-two-thirds-desktop {
margin-left: 66.6666%; }
.column.is-offset-half-desktop {
margin-left: 50%; }
.column.is-offset-one-third-desktop {
margin-left: 33.3333%; }
.column.is-offset-one-quarter-desktop {
margin-left: 25%; }
.column.is-offset-one-fifth-desktop {
margin-left: 20%; }
.column.is-offset-two-fifths-desktop {
margin-left: 40%; }
.column.is-offset-three-fifths-desktop {
margin-left: 60%; }
.column.is-offset-four-fifths-desktop {
margin-left: 80%; }
.column.is-1-desktop {
flex: none;
width: 8.33333%; }
.column.is-offset-1-desktop {
margin-left: 8.33333%; }
.column.is-2-desktop {
flex: none;
width: 16.66667%; }
.column.is-offset-2-desktop {
margin-left: 16.66667%; }
.column.is-3-desktop {
flex: none;
width: 25%; }
.column.is-offset-3-desktop {
margin-left: 25%; }
.column.is-4-desktop {
flex: none;
width: 33.33333%; }
.column.is-offset-4-desktop {
margin-left: 33.33333%; }
.column.is-5-desktop {
flex: none;
width: 41.66667%; }
.column.is-offset-5-desktop {
margin-left: 41.66667%; }
.column.is-6-desktop {
flex: none;
width: 50%; }
.column.is-offset-6-desktop {
margin-left: 50%; }
.column.is-7-desktop {
flex: none;
width: 58.33333%; }
.column.is-offset-7-desktop {
margin-left: 58.33333%; }
.column.is-8-desktop {
flex: none;
width: 66.66667%; }
.column.is-offset-8-desktop {
margin-left: 66.66667%; }
.column.is-9-desktop {
flex: none;
width: 75%; }
.column.is-offset-9-desktop {
margin-left: 75%; }
.column.is-10-desktop {
flex: none;
width: 83.33333%; }
.column.is-offset-10-desktop {
margin-left: 83.33333%; }
.column.is-11-desktop {
flex: none;
width: 91.66667%; }
.column.is-offset-11-desktop {
margin-left: 91.66667%; }
.column.is-12-desktop {
flex: none;
width: 100%; }
.column.is-offset-12-desktop {
margin-left: 100%; } }
@media screen and (min-width: 1280px) {
.column.is-narrow-widescreen {
flex: none; }
.column.is-full-widescreen {
flex: none;
width: 100%; }
.column.is-three-quarters-widescreen {
flex: none;
width: 75%; }
.column.is-two-thirds-widescreen {
flex: none;
width: 66.6666%; }
.column.is-half-widescreen {
flex: none;
width: 50%; }
.column.is-one-third-widescreen {
flex: none;
width: 33.3333%; }
.column.is-one-quarter-widescreen {
flex: none;
width: 25%; }
.column.is-one-fifth-widescreen {
flex: none;
width: 20%; }
.column.is-two-fifths-widescreen {
flex: none;
width: 40%; }
.column.is-three-fifths-widescreen {
flex: none;
width: 60%; }
.column.is-four-fifths-widescreen {
flex: none;
width: 80%; }
.column.is-offset-three-quarters-widescreen {
margin-left: 75%; }
.column.is-offset-two-thirds-widescreen {
margin-left: 66.6666%; }
.column.is-offset-half-widescreen {
margin-left: 50%; }
.column.is-offset-one-third-widescreen {
margin-left: 33.3333%; }
.column.is-offset-one-quarter-widescreen {
margin-left: 25%; }
.column.is-offset-one-fifth-widescreen {
margin-left: 20%; }
.column.is-offset-two-fifths-widescreen {
margin-left: 40%; }
.column.is-offset-three-fifths-widescreen {
margin-left: 60%; }
.column.is-offset-four-fifths-widescreen {
margin-left: 80%; }
.column.is-1-widescreen {
flex: none;
width: 8.33333%; }
.column.is-offset-1-widescreen {
margin-left: 8.33333%; }
.column.is-2-widescreen {
flex: none;
width: 16.66667%; }
.column.is-offset-2-widescreen {
margin-left: 16.66667%; }
.column.is-3-widescreen {
flex: none;
width: 25%; }
.column.is-offset-3-widescreen {
margin-left: 25%; }
.column.is-4-widescreen {
flex: none;
width: 33.33333%; }
.column.is-offset-4-widescreen {
margin-left: 33.33333%; }
.column.is-5-widescreen {
flex: none;
width: 41.66667%; }
.column.is-offset-5-widescreen {
margin-left: 41.66667%; }
.column.is-6-widescreen {
flex: none;
width: 50%; }
.column.is-offset-6-widescreen {
margin-left: 50%; }
.column.is-7-widescreen {
flex: none;
width: 58.33333%; }
.column.is-offset-7-widescreen {
margin-left: 58.33333%; }
.column.is-8-widescreen {
flex: none;
width: 66.66667%; }
.column.is-offset-8-widescreen {
margin-left: 66.66667%; }
.column.is-9-widescreen {
flex: none;
width: 75%; }
.column.is-offset-9-widescreen {
margin-left: 75%; }
.column.is-10-widescreen {
flex: none;
width: 83.33333%; }
.column.is-offset-10-widescreen {
margin-left: 83.33333%; }
.column.is-11-widescreen {
flex: none;
width: 91.66667%; }
.column.is-offset-11-widescreen {
margin-left: 91.66667%; }
.column.is-12-widescreen {
flex: none;
width: 100%; }
.column.is-offset-12-widescreen {
margin-left: 100%; } }
@media screen and (min-width: 1472px) {
.column.is-narrow-fullhd {
flex: none; }
.column.is-full-fullhd {
flex: none;
width: 100%; }
.column.is-three-quarters-fullhd {
flex: none;
width: 75%; }
.column.is-two-thirds-fullhd {
flex: none;
width: 66.6666%; }
.column.is-half-fullhd {
flex: none;
width: 50%; }
.column.is-one-third-fullhd {
flex: none;
width: 33.3333%; }
.column.is-one-quarter-fullhd {
flex: none;
width: 25%; }
.column.is-one-fifth-fullhd {
flex: none;
width: 20%; }
.column.is-two-fifths-fullhd {
flex: none;
width: 40%; }
.column.is-three-fifths-fullhd {
flex: none;
width: 60%; }
.column.is-four-fifths-fullhd {
flex: none;
width: 80%; }
.column.is-offset-three-quarters-fullhd {
margin-left: 75%; }
.column.is-offset-two-thirds-fullhd {
margin-left: 66.6666%; }
.column.is-offset-half-fullhd {
margin-left: 50%; }
.column.is-offset-one-third-fullhd {
margin-left: 33.3333%; }
.column.is-offset-one-quarter-fullhd {
margin-left: 25%; }
.column.is-offset-one-fifth-fullhd {
margin-left: 20%; }
.column.is-offset-two-fifths-fullhd {
margin-left: 40%; }
.column.is-offset-three-fifths-fullhd {
margin-left: 60%; }
.column.is-offset-four-fifths-fullhd {
margin-left: 80%; }
.column.is-1-fullhd {
flex: none;
width: 8.33333%; }
.column.is-offset-1-fullhd {
margin-left: 8.33333%; }
.column.is-2-fullhd {
flex: none;
width: 16.66667%; }
.column.is-offset-2-fullhd {
margin-left: 16.66667%; }
.column.is-3-fullhd {
flex: none;
width: 25%; }
.column.is-offset-3-fullhd {
margin-left: 25%; }
.column.is-4-fullhd {
flex: none;
width: 33.33333%; }
.column.is-offset-4-fullhd {
margin-left: 33.33333%; }
.column.is-5-fullhd {
flex: none;
width: 41.66667%; }
.column.is-offset-5-fullhd {
margin-left: 41.66667%; }
.column.is-6-fullhd {
flex: none;
width: 50%; }
.column.is-offset-6-fullhd {
margin-left: 50%; }
.column.is-7-fullhd {
flex: none;
width: 58.33333%; }
.column.is-offset-7-fullhd {
margin-left: 58.33333%; }
.column.is-8-fullhd {
flex: none;
width: 66.66667%; }
.column.is-offset-8-fullhd {
margin-left: 66.66667%; }
.column.is-9-fullhd {
flex: none;
width: 75%; }
.column.is-offset-9-fullhd {
margin-left: 75%; }
.column.is-10-fullhd {
flex: none;
width: 83.33333%; }
.column.is-offset-10-fullhd {
margin-left: 83.33333%; }
.column.is-11-fullhd {
flex: none;
width: 91.66667%; }
.column.is-offset-11-fullhd {
margin-left: 91.66667%; }
.column.is-12-fullhd {
flex: none;
width: 100%; }
.column.is-offset-12-fullhd {
margin-left: 100%; } }
.columns {
margin-left: -0.75rem;
margin-right: -0.75rem;
margin-top: -0.75rem; }
.columns:last-child {
margin-bottom: -0.75rem; }
.columns:not(:last-child) {
margin-bottom: calc(1.5rem - 0.75rem); }
.columns.is-centered {
justify-content: center; }
.columns.is-gapless {
margin-left: 0;
margin-right: 0;
margin-top: 0; }
.columns.is-gapless > .column {
margin: 0;
padding: 0 !important; }
.columns.is-gapless:not(:last-child) {
margin-bottom: 1.5rem; }
.columns.is-gapless:last-child {
margin-bottom: 0; }
.columns.is-mobile {
display: flex; }
.columns.is-multiline {
flex-wrap: wrap; }
.columns.is-vcentered {
align-items: center; }
@media screen and (min-width: 769px), print {
.columns:not(.is-desktop) {
display: flex; } }
@media screen and (min-width: 1088px) {
.columns.is-desktop {
display: flex; } }
.columns.is-variable {
--columnGap: 0.75rem;
margin-left: calc(-1 * var(--columnGap));
margin-right: calc(-1 * var(--columnGap)); }
.columns.is-variable .column {
padding-left: var(--columnGap);
padding-right: var(--columnGap); }
.columns.is-variable.is-0 {
--columnGap: 0rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-0-mobile {
--columnGap: 0rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-0-tablet {
--columnGap: 0rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-0-tablet-only {
--columnGap: 0rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-0-touch {
--columnGap: 0rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-0-desktop {
--columnGap: 0rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-0-desktop-only {
--columnGap: 0rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-0-widescreen {
--columnGap: 0rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-0-widescreen-only {
--columnGap: 0rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-0-fullhd {
--columnGap: 0rem; } }
.columns.is-variable.is-1 {
--columnGap: 0.25rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-1-mobile {
--columnGap: 0.25rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-1-tablet {
--columnGap: 0.25rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-1-tablet-only {
--columnGap: 0.25rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-1-touch {
--columnGap: 0.25rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-1-desktop {
--columnGap: 0.25rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-1-desktop-only {
--columnGap: 0.25rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-1-widescreen {
--columnGap: 0.25rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-1-widescreen-only {
--columnGap: 0.25rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-1-fullhd {
--columnGap: 0.25rem; } }
.columns.is-variable.is-2 {
--columnGap: 0.5rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-2-mobile {
--columnGap: 0.5rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-2-tablet {
--columnGap: 0.5rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-2-tablet-only {
--columnGap: 0.5rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-2-touch {
--columnGap: 0.5rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-2-desktop {
--columnGap: 0.5rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-2-desktop-only {
--columnGap: 0.5rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-2-widescreen {
--columnGap: 0.5rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-2-widescreen-only {
--columnGap: 0.5rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-2-fullhd {
--columnGap: 0.5rem; } }
.columns.is-variable.is-3 {
--columnGap: 0.75rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-3-mobile {
--columnGap: 0.75rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-3-tablet {
--columnGap: 0.75rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-3-tablet-only {
--columnGap: 0.75rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-3-touch {
--columnGap: 0.75rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-3-desktop {
--columnGap: 0.75rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-3-desktop-only {
--columnGap: 0.75rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-3-widescreen {
--columnGap: 0.75rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-3-widescreen-only {
--columnGap: 0.75rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-3-fullhd {
--columnGap: 0.75rem; } }
.columns.is-variable.is-4 {
--columnGap: 1rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-4-mobile {
--columnGap: 1rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-4-tablet {
--columnGap: 1rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-4-tablet-only {
--columnGap: 1rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-4-touch {
--columnGap: 1rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-4-desktop {
--columnGap: 1rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-4-desktop-only {
--columnGap: 1rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-4-widescreen {
--columnGap: 1rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-4-widescreen-only {
--columnGap: 1rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-4-fullhd {
--columnGap: 1rem; } }
.columns.is-variable.is-5 {
--columnGap: 1.25rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-5-mobile {
--columnGap: 1.25rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-5-tablet {
--columnGap: 1.25rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-5-tablet-only {
--columnGap: 1.25rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-5-touch {
--columnGap: 1.25rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-5-desktop {
--columnGap: 1.25rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-5-desktop-only {
--columnGap: 1.25rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-5-widescreen {
--columnGap: 1.25rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-5-widescreen-only {
--columnGap: 1.25rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-5-fullhd {
--columnGap: 1.25rem; } }
.columns.is-variable.is-6 {
--columnGap: 1.5rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-6-mobile {
--columnGap: 1.5rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-6-tablet {
--columnGap: 1.5rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-6-tablet-only {
--columnGap: 1.5rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-6-touch {
--columnGap: 1.5rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-6-desktop {
--columnGap: 1.5rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-6-desktop-only {
--columnGap: 1.5rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-6-widescreen {
--columnGap: 1.5rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-6-widescreen-only {
--columnGap: 1.5rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-6-fullhd {
--columnGap: 1.5rem; } }
.columns.is-variable.is-7 {
--columnGap: 1.75rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-7-mobile {
--columnGap: 1.75rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-7-tablet {
--columnGap: 1.75rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-7-tablet-only {
--columnGap: 1.75rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-7-touch {
--columnGap: 1.75rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-7-desktop {
--columnGap: 1.75rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-7-desktop-only {
--columnGap: 1.75rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-7-widescreen {
--columnGap: 1.75rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-7-widescreen-only {
--columnGap: 1.75rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-7-fullhd {
--columnGap: 1.75rem; } }
.columns.is-variable.is-8 {
--columnGap: 2rem; }
@media screen and (max-width: 768px) {
.columns.is-variable.is-8-mobile {
--columnGap: 2rem; } }
@media screen and (min-width: 769px), print {
.columns.is-variable.is-8-tablet {
--columnGap: 2rem; } }
@media screen and (min-width: 769px) and (max-width: 1087px) {
.columns.is-variable.is-8-tablet-only {
--columnGap: 2rem; } }
@media screen and (max-width: 1087px) {
.columns.is-variable.is-8-touch {
--columnGap: 2rem; } }
@media screen and (min-width: 1088px) {
.columns.is-variable.is-8-desktop {
--columnGap: 2rem; } }
@media screen and (min-width: 1088px) and (max-width: 1279px) {
.columns.is-variable.is-8-desktop-only {
--columnGap: 2rem; } }
@media screen and (min-width: 1280px) {
.columns.is-variable.is-8-widescreen {
--columnGap: 2rem; } }
@media screen and (min-width: 1280px) and (max-width: 1471px) {
.columns.is-variable.is-8-widescreen-only {
--columnGap: 2rem; } }
@media screen and (min-width: 1472px) {
.columns.is-variable.is-8-fullhd {
--columnGap: 2rem; } }
.tile {
align-items: stretch;
display: block;
flex-basis: 0;
flex-grow: 1;
flex-shrink: 1;
min-height: min-content; }
.tile.is-ancestor {
margin-left: -0.75rem;
margin-right: -0.75rem;
margin-top: -0.75rem; }
.tile.is-ancestor:last-child {
margin-bottom: -0.75rem; }
.tile.is-ancestor:not(:last-child) {
margin-bottom: 0.75rem; }
.tile.is-child {
margin: 0 !important; }
.tile.is-parent {
padding: 0.75rem; }
.tile.is-vertical {
flex-direction: column; }
.tile.is-vertical > .tile.is-child:not(:last-child) {
margin-bottom: 1.5rem !important; }
@media screen and (min-width: 769px), print {
.tile:not(.is-child) {
display: flex; }
.tile.is-1 {
flex: none;
width: 8.33333%; }
.tile.is-2 {
flex: none;
width: 16.66667%; }
.tile.is-3 {
flex: none;
width: 25%; }
.tile.is-4 {
flex: none;
width: 33.33333%; }
.tile.is-5 {
flex: none;
width: 41.66667%; }
.tile.is-6 {
flex: none;
width: 50%; }
.tile.is-7 {
flex: none;
width: 58.33333%; }
.tile.is-8 {
flex: none;
width: 66.66667%; }
.tile.is-9 {
flex: none;
width: 75%; }
.tile.is-10 {
flex: none;
width: 83.33333%; }
.tile.is-11 {
flex: none;
width: 91.66667%; }
.tile.is-12 {
flex: none;
width: 100%; } }
.hero {
align-items: stretch;
display: flex;
flex-direction: column;
justify-content: space-between; }
.hero .navbar {
background: none; }
.hero .tabs ul {
border-bottom: none; }
.hero.is-white {
background-color: white;
color: #0a0a0a; }
.hero.is-white a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-white strong {
color: inherit; }
.hero.is-white .title {
color: #0a0a0a; }
.hero.is-white .subtitle {
color: rgba(10, 10, 10, 0.9); }
.hero.is-white .subtitle a:not(.button),
.hero.is-white .subtitle strong {
color: #0a0a0a; }
@media screen and (max-width: 1087px) {
.hero.is-white .navbar-menu {
background-color: white; } }
.hero.is-white .navbar-item,
.hero.is-white .navbar-link {
color: rgba(10, 10, 10, 0.7); }
.hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active,
.hero.is-white .navbar-link:hover,
.hero.is-white .navbar-link.is-active {
background-color: #f2f2f2;
color: #0a0a0a; }
.hero.is-white .tabs a {
color: #0a0a0a;
opacity: 0.9; }
.hero.is-white .tabs a:hover {
opacity: 1; }
.hero.is-white .tabs li.is-active a {
opacity: 1; }
.hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a {
color: #0a0a0a; }
.hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover {
background-color: #0a0a0a;
border-color: #0a0a0a;
color: white; }
.hero.is-white.is-bold {
background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); }
@media screen and (max-width: 768px) {
.hero.is-white.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } }
.hero.is-black {
background-color: #0a0a0a;
color: white; }
.hero.is-black a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-black strong {
color: inherit; }
.hero.is-black .title {
color: white; }
.hero.is-black .subtitle {
color: rgba(255, 255, 255, 0.9); }
.hero.is-black .subtitle a:not(.button),
.hero.is-black .subtitle strong {
color: white; }
@media screen and (max-width: 1087px) {
.hero.is-black .navbar-menu {
background-color: #0a0a0a; } }
.hero.is-black .navbar-item,
.hero.is-black .navbar-link {
color: rgba(255, 255, 255, 0.7); }
.hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active,
.hero.is-black .navbar-link:hover,
.hero.is-black .navbar-link.is-active {
background-color: black;
color: white; }
.hero.is-black .tabs a {
color: white;
opacity: 0.9; }
.hero.is-black .tabs a:hover {
opacity: 1; }
.hero.is-black .tabs li.is-active a {
opacity: 1; }
.hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a {
color: white; }
.hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover {
background-color: white;
border-color: white;
color: #0a0a0a; }
.hero.is-black.is-bold {
background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); }
@media screen and (max-width: 768px) {
.hero.is-black.is-bold .navbar-menu {
background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } }
.hero.is-light {
background-color: whitesmoke;
color: #363636; }
.hero.is-light a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-light strong {
color: inherit; }
.hero.is-light .title {
color: #363636; }
.hero.is-light .subtitle {
color: rgba(54, 54, 54, 0.9); }
.hero.is-light .subtitle a:not(.button),
.hero.is-light .subtitle strong {
color: #363636; }
@media screen and (max-width: 1087px) {
.hero.is-light .navbar-menu {
background-color: whitesmoke; } }
.hero.is-light .navbar-item,
.hero.is-light .navbar-link {
color: rgba(54, 54, 54, 0.7); }
.hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active,
.hero.is-light .navbar-link:hover,
.hero.is-light .navbar-link.is-active {
background-color: #e8e8e8;
color: #363636; }
.hero.is-light .tabs a {
color: #363636;
opacity: 0.9; }
.hero.is-light .tabs a:hover {
opacity: 1; }
.hero.is-light .tabs li.is-active a {
opacity: 1; }
.hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a {
color: #363636; }
.hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover {
background-color: #363636;
border-color: #363636;
color: whitesmoke; }
.hero.is-light.is-bold {
background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); }
@media screen and (max-width: 768px) {
.hero.is-light.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } }
.hero.is-dark {
background-color: #363636;
color: whitesmoke; }
.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-dark strong {
color: inherit; }
.hero.is-dark .title {
color: whitesmoke; }
.hero.is-dark .subtitle {
color: rgba(245, 245, 245, 0.9); }
.hero.is-dark .subtitle a:not(.button),
.hero.is-dark .subtitle strong {
color: whitesmoke; }
@media screen and (max-width: 1087px) {
.hero.is-dark .navbar-menu {
background-color: #363636; } }
.hero.is-dark .navbar-item,
.hero.is-dark .navbar-link {
color: rgba(245, 245, 245, 0.7); }
.hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active,
.hero.is-dark .navbar-link:hover,
.hero.is-dark .navbar-link.is-active {
background-color: #292929;
color: whitesmoke; }
.hero.is-dark .tabs a {
color: whitesmoke;
opacity: 0.9; }
.hero.is-dark .tabs a:hover {
opacity: 1; }
.hero.is-dark .tabs li.is-active a {
opacity: 1; }
.hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a {
color: whitesmoke; }
.hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover {
background-color: whitesmoke;
border-color: whitesmoke;
color: #363636; }
.hero.is-dark.is-bold {
background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); }
@media screen and (max-width: 768px) {
.hero.is-dark.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } }
.hero.is-primary {
background-color: #00d1b2;
color: #fff; }
.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-primary strong {
color: inherit; }
.hero.is-primary .title {
color: #fff; }
.hero.is-primary .subtitle {
color: rgba(255, 255, 255, 0.9); }
.hero.is-primary .subtitle a:not(.button),
.hero.is-primary .subtitle strong {
color: #fff; }
@media screen and (max-width: 1087px) {
.hero.is-primary .navbar-menu {
background-color: #00d1b2; } }
.hero.is-primary .navbar-item,
.hero.is-primary .navbar-link {
color: rgba(255, 255, 255, 0.7); }
.hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active,
.hero.is-primary .navbar-link:hover,
.hero.is-primary .navbar-link.is-active {
background-color: #00b89c;
color: #fff; }
.hero.is-primary .tabs a {
color: #fff;
opacity: 0.9; }
.hero.is-primary .tabs a:hover {
opacity: 1; }
.hero.is-primary .tabs li.is-active a {
opacity: 1; }
.hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a {
color: #fff; }
.hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover {
background-color: #fff;
border-color: #fff;
color: #00d1b2; }
.hero.is-primary.is-bold {
background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); }
@media screen and (max-width: 768px) {
.hero.is-primary.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); } }
.hero.is-link {
background-color: #3273dc;
color: #fff; }
.hero.is-link a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-link strong {
color: inherit; }
.hero.is-link .title {
color: #fff; }
.hero.is-link .subtitle {
color: rgba(255, 255, 255, 0.9); }
.hero.is-link .subtitle a:not(.button),
.hero.is-link .subtitle strong {
color: #fff; }
@media screen and (max-width: 1087px) {
.hero.is-link .navbar-menu {
background-color: #3273dc; } }
.hero.is-link .navbar-item,
.hero.is-link .navbar-link {
color: rgba(255, 255, 255, 0.7); }
.hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active,
.hero.is-link .navbar-link:hover,
.hero.is-link .navbar-link.is-active {
background-color: #2366d1;
color: #fff; }
.hero.is-link .tabs a {
color: #fff;
opacity: 0.9; }
.hero.is-link .tabs a:hover {
opacity: 1; }
.hero.is-link .tabs li.is-active a {
opacity: 1; }
.hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a {
color: #fff; }
.hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover {
background-color: #fff;
border-color: #fff;
color: #3273dc; }
.hero.is-link.is-bold {
background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); }
@media screen and (max-width: 768px) {
.hero.is-link.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); } }
.hero.is-info {
background-color: #209cee;
color: #fff; }
.hero.is-info a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-info strong {
color: inherit; }
.hero.is-info .title {
color: #fff; }
.hero.is-info .subtitle {
color: rgba(255, 255, 255, 0.9); }
.hero.is-info .subtitle a:not(.button),
.hero.is-info .subtitle strong {
color: #fff; }
@media screen and (max-width: 1087px) {
.hero.is-info .navbar-menu {
background-color: #209cee; } }
.hero.is-info .navbar-item,
.hero.is-info .navbar-link {
color: rgba(255, 255, 255, 0.7); }
.hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active,
.hero.is-info .navbar-link:hover,
.hero.is-info .navbar-link.is-active {
background-color: #118fe4;
color: #fff; }
.hero.is-info .tabs a {
color: #fff;
opacity: 0.9; }
.hero.is-info .tabs a:hover {
opacity: 1; }
.hero.is-info .tabs li.is-active a {
opacity: 1; }
.hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a {
color: #fff; }
.hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover {
background-color: #fff;
border-color: #fff;
color: #209cee; }
.hero.is-info.is-bold {
background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); }
@media screen and (max-width: 768px) {
.hero.is-info.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } }
.hero.is-success {
background-color: #23d160;
color: #fff; }
.hero.is-success a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-success strong {
color: inherit; }
.hero.is-success .title {
color: #fff; }
.hero.is-success .subtitle {
color: rgba(255, 255, 255, 0.9); }
.hero.is-success .subtitle a:not(.button),
.hero.is-success .subtitle strong {
color: #fff; }
@media screen and (max-width: 1087px) {
.hero.is-success .navbar-menu {
background-color: #23d160; } }
.hero.is-success .navbar-item,
.hero.is-success .navbar-link {
color: rgba(255, 255, 255, 0.7); }
.hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active,
.hero.is-success .navbar-link:hover,
.hero.is-success .navbar-link.is-active {
background-color: #20bc56;
color: #fff; }
.hero.is-success .tabs a {
color: #fff;
opacity: 0.9; }
.hero.is-success .tabs a:hover {
opacity: 1; }
.hero.is-success .tabs li.is-active a {
opacity: 1; }
.hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a {
color: #fff; }
.hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover {
background-color: #fff;
border-color: #fff;
color: #23d160; }
.hero.is-success.is-bold {
background-image: linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%); }
@media screen and (max-width: 768px) {
.hero.is-success.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%); } }
.hero.is-warning {
background-color: #ffdd57;
color: rgba(0, 0, 0, 0.7); }
.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-warning strong {
color: inherit; }
.hero.is-warning .title {
color: rgba(0, 0, 0, 0.7); }
.hero.is-warning .subtitle {
color: rgba(0, 0, 0, 0.9); }
.hero.is-warning .subtitle a:not(.button),
.hero.is-warning .subtitle strong {
color: rgba(0, 0, 0, 0.7); }
@media screen and (max-width: 1087px) {
.hero.is-warning .navbar-menu {
background-color: #ffdd57; } }
.hero.is-warning .navbar-item,
.hero.is-warning .navbar-link {
color: rgba(0, 0, 0, 0.7); }
.hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active,
.hero.is-warning .navbar-link:hover,
.hero.is-warning .navbar-link.is-active {
background-color: #ffd83d;
color: rgba(0, 0, 0, 0.7); }
.hero.is-warning .tabs a {
color: rgba(0, 0, 0, 0.7);
opacity: 0.9; }
.hero.is-warning .tabs a:hover {
opacity: 1; }
.hero.is-warning .tabs li.is-active a {
opacity: 1; }
.hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a {
color: rgba(0, 0, 0, 0.7); }
.hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover {
background-color: rgba(0, 0, 0, 0.7);
border-color: rgba(0, 0, 0, 0.7);
color: #ffdd57; }
.hero.is-warning.is-bold {
background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); }
@media screen and (max-width: 768px) {
.hero.is-warning.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } }
.hero.is-danger {
background-color: #ff3860;
color: #fff; }
.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag),
.hero.is-danger strong {
color: inherit; }
.hero.is-danger .title {
color: #fff; }
.hero.is-danger .subtitle {
color: rgba(255, 255, 255, 0.9); }
.hero.is-danger .subtitle a:not(.button),
.hero.is-danger .subtitle strong {
color: #fff; }
@media screen and (max-width: 1087px) {
.hero.is-danger .navbar-menu {
background-color: #ff3860; } }
.hero.is-danger .navbar-item,
.hero.is-danger .navbar-link {
color: rgba(255, 255, 255, 0.7); }
.hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active,
.hero.is-danger .navbar-link:hover,
.hero.is-danger .navbar-link.is-active {
background-color: #ff1f4b;
color: #fff; }
.hero.is-danger .tabs a {
color: #fff;
opacity: 0.9; }
.hero.is-danger .tabs a:hover {
opacity: 1; }
.hero.is-danger .tabs li.is-active a {
opacity: 1; }
.hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a {
color: #fff; }
.hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover {
background-color: rgba(10, 10, 10, 0.1); }
.hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover {
background-color: #fff;
border-color: #fff;
color: #ff3860; }
.hero.is-danger.is-bold {
background-image: linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%); }
@media screen and (max-width: 768px) {
.hero.is-danger.is-bold .navbar-menu {
background-image: linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%); } }
.hero.is-small .hero-body {
padding-bottom: 1.5rem;
padding-top: 1.5rem; }
@media screen and (min-width: 769px), print {
.hero.is-medium .hero-body {
padding-bottom: 9rem;
padding-top: 9rem; } }
@media screen and (min-width: 769px), print {
.hero.is-large .hero-body {
padding-bottom: 18rem;
padding-top: 18rem; } }
.hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body {
align-items: center;
display: flex; }
.hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container {
flex-grow: 1;
flex-shrink: 1; }
.hero.is-halfheight {
min-height: 50vh; }
.hero.is-fullheight {
min-height: 100vh; }
.hero.is-fullheight-with-navbar {
min-height: calc(100vh - 3.25rem); }
.hero-video {
overflow: hidden; }
.hero-video video {
left: 50%;
min-height: 100%;
min-width: 100%;
position: absolute;
top: 50%;
transform: translate3d(-50%, -50%, 0); }
.hero-video.is-transparent {
opacity: 0.3; }
@media screen and (max-width: 768px) {
.hero-video {
display: none; } }
.hero-buttons {
margin-top: 1.5rem; }
@media screen and (max-width: 768px) {
.hero-buttons .button {
display: flex; }
.hero-buttons .button:not(:last-child) {
margin-bottom: 0.75rem; } }
@media screen and (min-width: 769px), print {
.hero-buttons {
display: flex;
justify-content: center; }
.hero-buttons .button:not(:last-child) {
margin-right: 1.5rem; } }
.hero-head,
.hero-foot {
flex-grow: 0;
flex-shrink: 0; }
.hero-body {
flex-grow: 1;
flex-shrink: 0;
padding: 3rem 1.5rem; }
.section {
padding: 3rem 1.5rem; }
@media screen and (min-width: 1088px) {
.section.is-medium {
padding: 9rem 1.5rem; }
.section.is-large {
padding: 18rem 1.5rem; } }
.footer {
background-color: #fafafa;
padding: 3rem 1.5rem 6rem; }

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,27 @@
{{define "base"}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Orion</title>
<link rel="stylesheet" href="/css/server.css">
</head>
<body>
{{template "navbar" .}}
<section class="section">
<div class="container">
<div class="columns">
<div class="column is-3">
{{template "menu" .}}
</div>
<div class="column is-9">
{{block "page_content" .}}{{end}}
</div>
</div>
</div>
</section>
<script type="text/javascript" src="/server.js"></script>
</body>
</html>
{{end}}

View File

@ -0,0 +1,10 @@
{{define "menu"}}
<aside class="menu" data-controller="menu">
<p class="menu-label">
Gestion de la flotte
</p>
<ul class="menu-list">
<li><a href="/modules">Modules</a></li>
</ul>
</aside>
{{end}}

View File

@ -0,0 +1,10 @@
{{define "navbar"}}
<nav class="navbar is-info" role="navigation" aria-label="main navigation">
<div class="container">
<div class="navbar-brand">
<a class="navbar-item" href="/">
<b>Orion</b>
</a>
</div>
</nav>
{{end}}

View File

@ -0,0 +1,24 @@
{{define "page_content"}}
<div data-controller="modules">
<div class="level is-mobile">
<div class="level-left">
<h4 class="is-size-4 level-item">Modules à portée</h4>
</div>
<div class="level-right">
<button data-action="click->modules#onScanClick" class="button is-primary">Scanner</button>
</div>
</div>
<table class="table">
<thead>
<tr>
<th>SSID</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr></tr>
</tbody>
</table>
</div>
{{end}}
{{template "base" .}}

View File

@ -2,10 +2,8 @@
set -eo pipefail set -eo pipefail
export GO111MODULE=on OS_TARGETS=(linux)
ARCH_TARGETS=(arm)
OS_TARGETS=(windows linux)
ARCH_TARGETS=(amd64)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
@ -19,26 +17,12 @@ function build {
local dirname="$name-$os-$arch" local dirname="$name-$os-$arch"
local destdir="$DIR/../release/$dirname" local destdir="$DIR/../release/$dirname"
local ext=
[ "$os" == "windows" ] && ext=.exe
rm -rf "$destdir" rm -rf "$destdir"
mkdir -p "$destdir" mkdir -p "$destdir"
echo "building $dirname..." echo "building $dirname..."
CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build \ CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build -ldflags="-s -w" -o "$destdir/$name" "$srcdir"
-v \
-mod=vendor \
-ldflags="-s -w" \
-gcflags=-trimpath="${PWD}" \
-asmflags=-trimpath="${PWD}" \
-o "$destdir/$name$ext" \
"$srcdir"
if [ ! -z "$(which upx)" ]; then
upx --best "$destdir/$name$ext"
fi
} }
@ -74,43 +58,24 @@ function compress {
tar -czf "$destdir.tar.gz" -C "$destdir/../" "$dirname" tar -czf "$destdir.tar.gz" -C "$destdir/../" "$dirname"
} }
function release_updater { function release_server {
local os=$1 local os=$1
local arch=$2 local arch=$2
build 'updater' "$DIR/../cmd/updater" $os $arch build 'server' "$DIR/../cmd/server" $os $arch
compress 'updater' $os $arch copy 'server' $os $arch "$DIR/../README.md" "README.md"
copy 'server' $os $arch "$DIR/../cmd/server/static/dist" "static"
copy 'server' $os $arch "$DIR/../cmd/server/templates" "templates"
compress 'server' $os $arch
} }
function release_discovery {
local os=$1
local arch=$2
build 'discovery' "$DIR/../cmd/discovery" $os $arch
compress 'discovery' $os $arch
}
function release_configurator {
local os=$1
local arch=$2
build 'configurator' "$DIR/../cmd/configurator" $os $arch
compress 'configurator' $os $arch
}
function main { function main {
for os in ${OS_TARGETS[@]}; do for os in ${OS_TARGETS[@]}; do
for arch in ${ARCH_TARGETS[@]}; do for arch in ${ARCH_TARGETS[@]}; do
release_configurator $os $arch release_server $os $arch
release_updater $os $arch
release_discovery $os $arch
done done
done done
} }

56
use.go Normal file
View File

@ -0,0 +1,56 @@
package main
import (
"forge.cadoles.com/Cadoles/owrt"
)
func main() {
uci := owrt.NewUCI()
uci.LoadWirelessConf()
wifaces := uci.GetWifiIfaces()
wDevices := uci.GetWifiDevices()
PyxisDevice := wDevices[0]
ClientDevice := wDevices[1]
for _, iface := range wifaces {
iface.Delete(uci)
}
// Main Pyxis Interface
pyxis := owrt.NewUCIWirelessInterface()
pyxis.Name = "Pyxis-Network"
pyxis.Network = "pyxis"
pyxis.Index = 0
pyxis.Ssid = "Pyxis"
pyxis.SysDevName = "wlan0"
pyxis.Encryption = "psk2"
pyxis.Key = "xxxxxxxxx"
pyxis.Device = PyxisDevice["Device"]
pyxis.DevicePath = PyxisDevice["Path"]
pyxis.Mode = "ap"
_ = pyxis.Create(uci)
_ = pyxis.Save(uci)
// Client Interface
client := owrt.NewUCIWirelessInterface()
client.Name = "Client-Network"
client.Index = 1
client.SysDevName = "wlan1"
client.Device = ClientDevice["Device"]
client.DevicePath = ClientDevice["Path"]
client.Mode = "sta"
_ = client.Create(uci)
_ = client.SysAdd(uci)
_ = client.Up(uci)
scan := client.Scan()
for _, elm := range scan {
if elm.Ssid == "Cadoles" {
client.Connect(uci, elm, "xxxxxx")
}
}
dhcp := owrt.NewDhcpClient(client.SysDevName)
dhcp.AskForIP()
}