diff --git a/.gitattributes b/.gitattributes index 4f93df6b369..29f26b1f7a0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,3 @@ -web/dist/app/vendor.js linguist-vendored -web/dist/app/assets/* linguist-vendored -web/src/assets/* linguist-vendored -web/src/styles/bootstrap/bootstrap.scss linguist-vendored +webassets/* linguist-vendored docs/theme/js/* linguist-vendored docs/theme/js/theme.js linguist-vendored=false diff --git a/.gitignore b/.gitignore index e5d75ae5258..3c4d61e9f75 100644 --- a/.gitignore +++ b/.gitignore @@ -9,9 +9,6 @@ darwin *.gz *.zip -# built web assets -web/dist/app/app - # editors .vscode diff --git a/.gitmodules b/.gitmodules index 9cfa044b9c5..29277f434f2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "examples/chart/teleport-demo/secrets"] path = examples/chart/teleport-demo/secrets url = git@github.com:gravitational/ops.git +[submodule "webassets"] + path = webassets + url = https://github.com/gravitational/webassets.git diff --git a/Makefile b/Makefile index 4bafcfabc8d..fc7d93d30c5 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ $(BUILDDIR)/tctl: GOOS=$(OS) GOARCH=$(ARCH) $(CGOFLAG) go build -tags "$(PAM_TAG) $(FIPS_TAG) $(BPF_TAG)" -o $(BUILDDIR)/tctl $(BUILDFLAGS) ./tool/tctl .PHONY: $(BUILDDIR)/teleport -$(BUILDDIR)/teleport: +$(BUILDDIR)/teleport: ensure-webassets GOOS=$(OS) GOARCH=$(ARCH) $(CGOFLAG) go build -tags "$(PAM_TAG) $(FIPS_TAG) $(BPF_TAG)" -o $(BUILDDIR)/teleport $(BUILDFLAGS) ./tool/teleport .PHONY: $(BUILDDIR)/tsh @@ -193,6 +193,7 @@ run-docs: # tests everything: called by Jenkins # .PHONY: test +test: ensure-webassets test: FLAGS ?= '-race' test: PACKAGES := $(shell go list ./... | grep -v integration) test: $(VERSRC) @@ -243,7 +244,7 @@ tag: $(BUILDDIR)/webassets.zip: ifneq ("$(OS)", "windows") @echo "---> Building OSS web assets." - cd web/dist ; zip -qr ../../$(BUILDDIR)/webassets.zip . + cd webassets/teleport/ ; zip -qr ../../$(BUILDDIR)/webassets.zip . endif .PHONY: test-package @@ -305,6 +306,8 @@ grpc: buildbox buildbox-grpc: # standard GRPC output echo $$PROTO_INCLUDE + find lib/ -iname *.proto | xargs clang-format -i -style='{ColumnLimit: 100, IndentWidth: 4, Language: Proto}' + cd lib/events && protoc -I=.:$$PROTO_INCLUDE \ --gofast_out=plugins=grpc:.\ *.proto @@ -410,3 +413,30 @@ deb: update-helm-charts: sed -i -E "s/^ tag: [a-z0-9.-]+$$/ tag: $(VERSION)/" examples/chart/teleport/values.yaml sed -i -E "s/^teleportVersion: [a-z0-9.-]+$$/teleportVersion: $(VERSION)/" examples/chart/teleport-demo/values.yaml + +.PHONY: ensure-webassets +ensure-webassets: + @if [ ! -d $(shell pwd)/webassets/teleport/ ]; then \ + $(MAKE) init-webapps-submodules; \ + fi; + +.PHONY: ensure-webassets-e +ensure-webassets-e: + @if [ ! -d $(shell pwd)/webassets/e/teleport ]; then \ + $(MAKE) init-webapps-submodules-e; \ + fi; + +.PHONY: init-webapps-submodules +init-webapps-submodules: + echo "init webassets submodule" + git submodule update --init webassets + +.PHONY: init-webapps-submodules-e +init-webapps-submodules-e: + echo "init webassets oss and enterprise submodules" + git submodule update --init --recursive webassets + +.PHONY: init-submodules-e +init-submodules-e: init-webapps-submodules-e + git submodule init e + git submodule update \ No newline at end of file diff --git a/README.md b/README.md index b6a5820290f..39d546cc44f 100644 --- a/README.md +++ b/README.md @@ -21,11 +21,11 @@ practices like: - No need to distribute keys: Teleport uses certificate-based access with automatic certificate expiration time. - 2nd factor authentication (2FA) for SSH and Kubernetes. - Collaboratively troubleshoot issues through session sharing. -- Single sign-on (SSO) for SSH/Kubernetes and your organization identities via +- Single sign-on (SSO) for SSH/Kubernetes and your organization identities via Github Auth, OpenID Connect or SAML with endpoints like Okta or Active Directory. - Cluster introspection: every SSH node and its status can be queried via CLI and Web UI. -Teleport is built on top of the high-quality [Golang SSH](https://godoc.org/golang.org/x/crypto/ssh) +Teleport is built on top of the high-quality [Golang SSH](https://godoc.org/golang.org/x/crypto/ssh) implementation and it is _fully compatible with OpenSSH_ and can be used with `sshd` servers and `ssh` clients. @@ -41,17 +41,17 @@ implementation and it is _fully compatible with OpenSSH_ and can be used with ## Installing and Running -Download the [latest binary release](https://gravitational.com/teleport/download/), -unpack the .tar.gz and run `sudo ./install`. This will copy Teleport binaries into +Download the [latest binary release](https://gravitational.com/teleport/download/), +unpack the .tar.gz and run `sudo ./install`. This will copy Teleport binaries into `/usr/local/bin`. Then you can run Teleport as a single-node cluster: ```bash -$ sudo teleport start +$ sudo teleport start ``` -In a production environment Teleport must run as root. But to play, just do `chown $USER /var/lib/teleport` +In a production environment Teleport must run as root. But to play, just do `chown $USER /var/lib/teleport` and run it under `$USER`, in this case you will not be able to login as someone else though. ## Docker @@ -71,8 +71,7 @@ Follow instructions at [docker/README](docker/README.md) ## Building Teleport Teleport source code consists of the actual Teleport daemon binary written in Golang, and also -it has a web UI (located in /web directory) written in Javascript. The WebUI is not changed often -and we keep it checked into Git under `/dist`, so you only need to build Golang: +of a web UI (a git submodule located in /webassets directory) written in Javascript. Make sure you have Golang `v1.13` or newer, then run: @@ -89,7 +88,7 @@ $ sudo mkdir -p /var/lib/teleport $ sudo chown $USER /var/lib/teleport ``` -If the build succeeds the binaries will be placed in +If the build succeeds the binaries will be placed in `$GOPATH/src/github.com/gravitational/teleport/build` NOTE: The Go compiler is somewhat sensitive to amount of memory: you will need @@ -100,14 +99,25 @@ NOTE: This will build the latest version of Teleport, regardless of whether it i ### Rebuilding Web UI -To enable speedy iterations on the Web UI, teleport can load the web UI assets -from the source directory. To enable this behavior, set the environment variable -`DEBUG=1` and rebuild with the default target: +Teleport Web UI is located in the [Gravitational Webapps](https://github.com/gravitational/webapps.) monorepo. +You can clone that repository and rebuild teleport UI package with: ```bash -$ make +$ git clone git@github.com:gravitational/webapps.git +$ cd webapps +$ make build-teleport +``` -# Run Teleport as a single-node cluster in development mode: +Then you can replace Teleport web UI files with the one found in the generated `/dist` folder. + +To enable speedy iterations on the Web UI, you can run a +[local web-dev server](https://github.com/gravitational/webapps/tree/master/packages/teleport). + +You can also tell teleport to load the web UI assets from the source directory. +To enable this behavior, set the environment variable `DEBUG=1` and rebuild with the default target: + +```bash +# Run Teleport as a single-node cluster in development mode: $ DEBUG=1 ./build/teleport start -d ``` @@ -134,7 +144,7 @@ expensive to maintain. Additionally, most organizations use multiple infrastructure form factors such as several cloud providers, multiple cloud accounts, servers in colocation, and even smart devices. Some of those devices run on untrusted networks, behind third party firewalls. This only magnifies -complexity and increases operational overhead. +complexity and increases operational overhead. We had a choice, either to start a security consulting business or build a solution that’s dead-easy to use and understand, something that creates an @@ -160,11 +170,11 @@ We offer a few different options for support. First of all, we try to provide cl ## Is Teleport Secure and Production Ready? Teleport has completed several security audits from the nationally recognized -technology security companies. [Some](https://gravitational.com/blog/teleport-release-2-2/) of -[them](https://gravitational.com/blog/teleport-security-audit/) have been made public. +technology security companies. [Some](https://gravitational.com/blog/teleport-release-2-2/) of +[them](https://gravitational.com/blog/teleport-security-audit/) have been made public. We are comfortable with the use of Teleport from a security perspective. -You can see the list of companies who use Teleport in production on the Teleport +You can see the list of companies who use Teleport in production on the Teleport [product page](https://gravitational.com/teleport#customerlist). However, Teleport is still a relatively young product so you may experience @@ -177,11 +187,11 @@ The latest stable Teleport build can be found in [Releases](https://gravitationa ## Who Built Teleport? Teleport was created by [Gravitational Inc](https://gravitational.com). We have -built Teleport by borrowing from our previous experiences at Rackspace. It has +built Teleport by borrowing from our previous experiences at Rackspace. It has been extracted from [Gravity](https://gravitational.com/gravity/), our -Kubernetes distribution optimized for deploying and remotely controlling complex +Kubernetes distribution optimized for deploying and remotely controlling complex applications into multiple environments _at the same time_: * Multiple cloud regions -* Colocation +* Colocation * Private enterprise clouds located behind firewalls diff --git a/build.assets/grpc/Dockerfile b/build.assets/grpc/Dockerfile index be1539799fc..5f55baf4391 100644 --- a/build.assets/grpc/Dockerfile +++ b/build.assets/grpc/Dockerfile @@ -7,7 +7,7 @@ ARG PLATFORM ENV TARBALL protoc-${PROTOC_VER}-${PLATFORM}.zip ENV GOGOPROTO_ROOT ${GOPATH}/src/github.com/gogo/protobuf -RUN apt-get update && apt-get install unzip +RUN apt-get update && apt-get install unzip clang-format -y RUN curl -L -o /tmp/${TARBALL} https://github.com/google/protobuf/releases/download/v${PROTOC_VER}/${TARBALL} RUN cd /tmp && unzip /tmp/protoc-${PROTOC_VER}-linux-x86_64.zip -d /usr/local && rm /tmp/${TARBALL} diff --git a/e b/e index bf1015756ce..8ff1fe53131 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit bf1015756ceef981ade32bd69acee56744ccfc92 +Subproject commit 8ff1fe53131dfb73c49f9f3b998577b4a1704b02 diff --git a/integration/integration_test.go b/integration/integration_test.go index 623a7f71214..0623ce54fae 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -44,7 +44,6 @@ import ( "github.com/gravitational/teleport/lib" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/auth/testauthority" - "github.com/gravitational/teleport/lib/backend" "github.com/gravitational/teleport/lib/bpf" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/defaults" @@ -3795,70 +3794,6 @@ func (s *IntSuite) TestList(c *check.C) { } } -// TestMultipleSignup makes sure that multiple users can create Teleport accounts. -func (s *IntSuite) TestMultipleSignup(c *check.C) { - tr := utils.NewTracer(utils.ThisFunction()).Start() - defer tr.Stop() - - type createNewUserReq struct { - InviteToken string `json:"invite_token"` - Pass string `json:"pass"` - } - - // Create and start a Teleport cluster. - makeConfig := func() (*check.C, []string, []*InstanceSecrets, *service.Config) { - clusterConfig, err := services.NewClusterConfig(services.ClusterConfigSpecV3{ - SessionRecording: services.RecordAtNode, - LocalAuth: services.NewBool(true), - }) - c.Assert(err, check.IsNil) - - tconf := service.MakeDefaultConfig() - tconf.Auth.Preference.SetSecondFactor("off") - tconf.Auth.Enabled = true - tconf.Auth.ClusterConfig = clusterConfig - tconf.Proxy.Enabled = true - tconf.Proxy.DisableWebService = false - tconf.Proxy.DisableWebInterface = true - tconf.SSH.Enabled = true - return c, nil, nil, tconf - } - main := s.newTeleportWithConfig(makeConfig()) - defer main.Stop(true) - - mainAuth := main.Process.GetAuthServer() - - // Create a few users to make sure the proxy uses the correct identity - // when connecting to the auth server. - for i := 0; i < 5; i++ { - // Create a random username. - username, err := utils.CryptoRandomHex(16) - c.Assert(err, check.IsNil) - - // Create signup token, this is like doing "tctl users add foo foo". - token, err := mainAuth.CreateSignupToken(services.UserV1{ - Name: username, - AllowedLogins: []string{username}, - }, backend.Forever) - c.Assert(err, check.IsNil) - - // Create client that will simulate web browser. - clt, err := createWebClient(main) - c.Assert(err, check.IsNil) - - // Render the signup page. - _, err = clt.Get(context.Background(), clt.Endpoint("webapi", "users", "invites", token), url.Values{}) - c.Assert(err, check.IsNil) - - // Make sure signup is successful. - _, err = clt.PostJSON(context.Background(), clt.Endpoint("webapi", "users"), createNewUserReq{ - InviteToken: token, - Pass: "fake-password-123", - }) - c.Assert(err, check.IsNil) - } -} - // TestDataTransfer makes sure that a "session.data" event is emitted at the // end of a session that matches the amount of data that was transferred. func (s *IntSuite) TestDataTransfer(c *check.C) { diff --git a/lib/auth/api.go b/lib/auth/api.go index da0b9432e3e..b1883407fd9 100644 --- a/lib/auth/api.go +++ b/lib/auth/api.go @@ -62,7 +62,7 @@ type ReadAccessPoint interface { // GetNamespace returns namespace by name GetNamespace(name string) (*services.Namespace, error) - // GetServers returns a list of registered servers + // GetNodes returns a list of registered servers for this cluster. GetNodes(namespace string, opts ...services.MarshalOption) ([]services.Server, error) // GetProxies returns a list of proxy servers registered in the cluster diff --git a/lib/auth/apiserver.go b/lib/auth/apiserver.go index 6df4888bf20..f461420ce05 100644 --- a/lib/auth/apiserver.go +++ b/lib/auth/apiserver.go @@ -42,7 +42,6 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" "github.com/julienschmidt/httprouter" - "github.com/tstranex/u2f" ) type APIConfig struct { @@ -103,9 +102,7 @@ func NewAPIServer(config *APIConfig) http.Handler { srv.POST("/:version/users/:user/ssh/authenticate", srv.withAuth(srv.authenticateSSHUser)) srv.GET("/:version/users/:user/web/sessions/:sid", srv.withAuth(srv.getWebSession)) srv.DELETE("/:version/users/:user/web/sessions/:sid", srv.withAuth(srv.deleteWebSession)) - srv.GET("/:version/signuptokens/:token", srv.withAuth(srv.getSignupTokenData)) - srv.POST("/:version/signuptokens/users", srv.withAuth(srv.createUserWithToken)) - srv.POST("/:version/signuptokens", srv.withAuth(srv.createSignupToken)) + srv.POST("/:version/web/password/token", srv.withRate(srv.withAuth(srv.changePasswordWithToken))) // Servers and presence heartbeat srv.POST("/:version/namespaces/:namespace/nodes", srv.withAuth(srv.upsertNode)) @@ -215,7 +212,6 @@ func NewAPIServer(config *APIConfig) http.Handler { // U2F srv.GET("/:version/u2f/signuptokens/:token", srv.withAuth(srv.getSignupU2FRegisterRequest)) - srv.POST("/:version/u2f/users", srv.withAuth(srv.createUserWithU2FToken)) srv.POST("/:version/u2f/users/:user/sign", srv.withAuth(srv.u2fSignRequest)) srv.GET("/:version/u2f/appid", srv.withAuth(srv.getU2FAppID)) @@ -1123,6 +1119,21 @@ func (s *APIServer) getClusterCACert(auth ClientI, w http.ResponseWriter, r *htt return localCA, nil } +func (s *APIServer) changePasswordWithToken(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { + var req ChangePasswordWithTokenRequest + if err := httplib.ReadJSON(r, &req); err != nil { + return nil, trace.Wrap(err) + } + + webSession, err := auth.ChangePasswordWithToken(r.Context(), req) + if err != nil { + log.Debugf("Failed to change user password with token: %v.", err) + return nil, trace.Wrap(err) + } + + return rawMessage(services.GetWebSessionMarshaler().MarshalWebSession(webSession, services.WithVersion(version))) +} + // getU2FAppID returns the U2F AppID in the auth configuration func (s *APIServer) getU2FAppID(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { cap, err := auth.GetAuthPreference() @@ -1226,26 +1237,6 @@ func (s *APIServer) getSession(auth ClientI, w http.ResponseWriter, r *http.Requ return se, nil } -type getSignupTokenDataResponse struct { - User string `json:"user"` - QRImg []byte `json:"qrimg"` -} - -// getSignupTokenData returns the signup data for a token. -func (s *APIServer) getSignupTokenData(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { - token := p.ByName("token") - - user, otpQRCode, err := auth.GetSignupTokenData(token) - if err != nil { - return nil, trace.Wrap(err) - } - - return &getSignupTokenDataResponse{ - User: user, - QRImg: otpQRCode, - }, nil -} - func (s *APIServer) getSignupU2FRegisterRequest(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { token := p.ByName("token") u2fRegReq, err := auth.GetSignupU2FRegisterRequest(token) @@ -1255,83 +1246,6 @@ func (s *APIServer) getSignupU2FRegisterRequest(auth ClientI, w http.ResponseWri return u2fRegReq, nil } -type createSignupTokenReq struct { - User services.UserV1 `json:"user"` - TTL time.Duration `json:"ttl"` -} - -func (s *APIServer) createSignupToken(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { - var req *createSignupTokenReq - - if err := httplib.ReadJSON(r, &req); err != nil { - return nil, trace.Wrap(err) - } - - if err := req.User.Check(); err != nil { - return nil, trace.Wrap(err) - } - - token, err := auth.CreateSignupToken(req.User, req.TTL) - if err != nil { - return nil, trace.Wrap(err) - } - - return token, nil -} - -type createUserWithTokenReq struct { - Token string `json:"token"` - Password string `json:"password"` - OTPToken string `json:"otp_token"` -} - -func (s *APIServer) createUserWithToken(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { - var req *createUserWithTokenReq - if err := httplib.ReadJSON(r, &req); err != nil { - return nil, trace.Wrap(err) - } - - cap, err := auth.GetAuthPreference() - if err != nil { - return nil, trace.Wrap(err) - } - - var webSession services.WebSession - - switch cap.GetSecondFactor() { - case teleport.OFF: - webSession, err = auth.CreateUserWithoutOTP(req.Token, req.Password) - case teleport.OTP, teleport.TOTP, teleport.HOTP: - webSession, err = auth.CreateUserWithOTP(req.Token, req.Password, req.OTPToken) - } - if err != nil { - log.Warningf("failed to create user: %v", err.Error()) - return nil, trace.Wrap(err) - } - - return rawMessage(services.GetWebSessionMarshaler().MarshalWebSession(webSession, services.WithVersion(version))) -} - -type createUserWithU2FTokenReq struct { - Token string `json:"token"` - Password string `json:"password"` - U2FRegisterResponse u2f.RegisterResponse `json:"u2f_register_response"` -} - -func (s *APIServer) createUserWithU2FToken(auth ClientI, w http.ResponseWriter, r *http.Request, p httprouter.Params, version string) (interface{}, error) { - var req *createUserWithU2FTokenReq - if err := httplib.ReadJSON(r, &req); err != nil { - return nil, trace.Wrap(err) - } - - sess, err := auth.CreateUserWithU2FToken(req.Token, req.Password, req.U2FRegisterResponse) - if err != nil { - log.Error(err) - return nil, trace.Wrap(err) - } - return rawMessage(services.GetWebSessionMarshaler().MarshalWebSession(sess, services.WithVersion(version))) -} - type upsertOIDCConnectorRawReq struct { Connector json.RawMessage `json:"connector"` TTL time.Duration `json:"ttl"` diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 4525a7b5f6e..74ff021d28a 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -1194,8 +1194,8 @@ func (s *AuthServer) DeleteToken(token string) (err error) { return trace.BadParameter("token %s is statically configured and cannot be removed", token) } } - // delete user token: - if err = s.Identity.DeleteSignupToken(token); err == nil { + // delete reset password token: + if err = s.Identity.DeleteResetPasswordToken(context.TODO(), token); err == nil { return nil } // delete node token: @@ -1221,15 +1221,15 @@ func (s *AuthServer) GetTokens(opts ...services.MarshalOption) (tokens []service if err == nil { tokens = append(tokens, tkns.GetStaticTokens()...) } - // get user tokens: - userTokens, err := s.Identity.GetSignupTokens() + // get reset password tokens: + resetPasswordTokens, err := s.Identity.GetResetPasswordTokens(context.TODO()) if err != nil { return nil, trace.Wrap(err) } - // convert user tokens to machine tokens: - for _, t := range userTokens { + // convert reset password tokens to machine tokens: + for _, t := range resetPasswordTokens { roles := teleport.Roles{teleport.RoleSignup} - tok, err := services.NewProvisionToken(t.Token, roles, t.Expires) + tok, err := services.NewProvisionToken(t.GetName(), roles, t.Expiry()) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 58d3ed2e83a..d7dda7f49c7 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -734,13 +734,6 @@ func (a *AuthWithRoles) UpsertTOTP(user string, otpSecret string) error { return a.authServer.UpsertTOTP(user, otpSecret) } -func (a *AuthWithRoles) GetOTPData(user string) (string, []byte, error) { - if err := a.currentUserAction(user); err != nil { - return "", nil, trace.Wrap(err) - } - return a.authServer.GetOTPData(user) -} - func (a *AuthWithRoles) PreAuthenticatedSignIn(user string) (services.WebSession, error) { if err := a.currentUserAction(user); err != nil { return nil, trace.Wrap(err) @@ -1085,41 +1078,38 @@ func (a *AuthWithRoles) GenerateUserCerts(ctx context.Context, req proto.UserCer }, nil } -func (a *AuthWithRoles) CreateSignupToken(user services.UserV1, ttl time.Duration) (token string, e error) { - if err := a.action(defaults.Namespace, services.KindUser, services.VerbCreate); err != nil { - return "", trace.Wrap(err) - } - return a.authServer.CreateSignupToken(user, ttl) -} - -func (a *AuthWithRoles) GetSignupTokenData(token string) (user string, otpQRCode []byte, err error) { - // signup token are their own authz resource - return a.authServer.GetSignupTokenData(token) -} - -func (a *AuthWithRoles) GetSignupToken(token string) (*services.SignupToken, error) { - // signup token are their own authz resource - return a.authServer.GetSignupToken(token) -} - func (a *AuthWithRoles) GetSignupU2FRegisterRequest(token string) (u2fRegisterRequest *u2f.RegisterRequest, e error) { // signup token are their own authz resource return a.authServer.CreateSignupU2FRegisterRequest(token) } -func (a *AuthWithRoles) CreateUserWithOTP(token, password, otpToken string) (services.WebSession, error) { - // tokens are their own authz mechanism, no need to double check - return a.authServer.CreateUserWithOTP(token, password, otpToken) +func (a *AuthWithRoles) CreateResetPasswordToken(ctx context.Context, req CreateResetPasswordTokenRequest) (services.ResetPasswordToken, error) { + if err := a.action(defaults.Namespace, services.KindUser, services.VerbUpdate); err != nil { + return nil, trace.Wrap(err) + } + + a.EmitAuditEvent(events.ResetPasswordTokenCreated, events.EventFields{ + events.ResetPasswordTokenFor: req.Name, + events.ResetPasswordTokenTTL: req.TTL.String(), + events.EventUser: a.user.GetName(), + }) + + return a.authServer.CreateResetPasswordToken(ctx, req) } -func (a *AuthWithRoles) CreateUserWithoutOTP(token string, password string) (services.WebSession, error) { +func (a *AuthWithRoles) GetResetPasswordToken(ctx context.Context, tokenID string) (services.ResetPasswordToken, error) { // tokens are their own authz mechanism, no need to double check - return a.authServer.CreateUserWithoutOTP(token, password) + return a.authServer.GetResetPasswordToken(ctx, tokenID) } -func (a *AuthWithRoles) CreateUserWithU2FToken(token string, password string, u2fRegisterResponse u2f.RegisterResponse) (services.WebSession, error) { - // signup tokens are their own authz resource - return a.authServer.CreateUserWithU2FToken(token, password, u2fRegisterResponse) +func (a *AuthWithRoles) RotateResetPasswordTokenSecrets(ctx context.Context, tokenID string) (services.ResetPasswordTokenSecrets, error) { + // tokens are their own authz mechanism, no need to double check + return a.authServer.RotateResetPasswordTokenSecrets(ctx, tokenID) +} + +func (a *AuthWithRoles) ChangePasswordWithToken(ctx context.Context, req ChangePasswordWithTokenRequest) (services.WebSession, error) { + // Token is it's own authentication, no need to double check. + return a.authServer.ChangePasswordWithToken(ctx, req) } func (a *AuthWithRoles) UpsertUser(u services.User) error { diff --git a/lib/auth/clt.go b/lib/auth/clt.go index b4d29130e0b..d090e909087 100644 --- a/lib/auth/clt.go +++ b/lib/auth/clt.go @@ -686,7 +686,7 @@ func (c *Client) GetToken(token string) (services.ProvisionToken, error) { } // DeleteToken deletes a given provisioning token on the auth server (CA). It -// could be a user token or a machine token +// could be a reset password token or a machine token func (c *Client) DeleteToken(token string) error { _, err := c.Delete(c.Endpoint("tokens", token)) return trace.Wrap(err) @@ -1577,41 +1577,6 @@ func (c *Client) GenerateHostCert( return []byte(cert), nil } -// CreateSignupToken creates one time token for creating account for the user -// For each token it creates username and otp generator -func (c *Client) CreateSignupToken(user services.UserV1, ttl time.Duration) (string, error) { - if err := user.Check(); err != nil { - return "", trace.Wrap(err) - } - out, err := c.PostJSON(c.Endpoint("signuptokens"), createSignupTokenReq{ - User: user, - TTL: ttl, - }) - if err != nil { - return "", trace.Wrap(err) - } - var token string - if err := json.Unmarshal(out.Bytes(), &token); err != nil { - return "", trace.Wrap(err) - } - return token, nil -} - -// GetSignupTokenData returns token data for a valid token -func (c *Client) GetSignupTokenData(token string) (user string, otpQRCode []byte, e error) { - out, err := c.Get(c.Endpoint("signuptokens", token), url.Values{}) - if err != nil { - return "", nil, err - } - - var tokenData getSignupTokenDataResponse - if err := json.Unmarshal(out.Bytes(), &tokenData); err != nil { - return "", nil, err - } - - return tokenData.User, tokenData.QRImg, nil -} - // GenerateUserCerts takes the public key in the OpenSSH `authorized_keys` plain // text format, signs it using User Certificate Authority signing key and // returns the resulting certificates. @@ -1640,41 +1605,9 @@ func (c *Client) GetSignupU2FRegisterRequest(token string) (u2fRegisterRequest * return &u2fRegReq, nil } -// CreateUserWithOTP creates account with provided token and password. -// Account username and OTP key are taken from token data. -// Deletes token after account creation. -func (c *Client) CreateUserWithOTP(token, password, otpToken string) (services.WebSession, error) { - out, err := c.PostJSON(c.Endpoint("signuptokens", "users"), createUserWithTokenReq{ - Token: token, - Password: password, - OTPToken: otpToken, - }) - if err != nil { - return nil, trace.Wrap(err) - } - return services.GetWebSessionMarshaler().UnmarshalWebSession(out.Bytes()) -} - -// CreateUserWithoutOTP validates a given token creates a user -// with the given password and deletes the token afterwards. -func (c *Client) CreateUserWithoutOTP(token string, password string) (services.WebSession, error) { - out, err := c.PostJSON(c.Endpoint("signuptokens", "users"), createUserWithTokenReq{ - Token: token, - Password: password, - }) - if err != nil { - return nil, trace.Wrap(err) - } - return services.GetWebSessionMarshaler().UnmarshalWebSession(out.Bytes()) -} - -// CreateUserWithU2FToken creates user account with provided token and U2F sign response -func (c *Client) CreateUserWithU2FToken(token string, password string, u2fRegisterResponse u2f.RegisterResponse) (services.WebSession, error) { - out, err := c.PostJSON(c.Endpoint("u2f", "users"), createUserWithU2FTokenReq{ - Token: token, - Password: password, - U2FRegisterResponse: u2fRegisterResponse, - }) +// ChangePasswordWithToken changes user password with ResetPasswordToken +func (c *Client) ChangePasswordWithToken(ctx context.Context, req ChangePasswordWithTokenRequest) (services.WebSession, error) { + out, err := c.PostJSON(c.Endpoint("web", "password", "token"), req) if err != nil { return nil, trace.Wrap(err) } @@ -2572,6 +2505,57 @@ func (c *Client) CreateAccessRequest(ctx context.Context, req services.AccessReq return nil } +func (c *Client) RotateResetPasswordTokenSecrets(ctx context.Context, tokenID string) (services.ResetPasswordTokenSecrets, error) { + clt, err := c.grpc() + if err != nil { + return nil, trace.Wrap(err) + } + + secrets, err := clt.RotateResetPasswordTokenSecrets(ctx, &proto.RotateResetPasswordTokenSecretsRequest{ + TokenID: tokenID, + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + + return secrets, nil +} + +func (c *Client) GetResetPasswordToken(ctx context.Context, tokenID string) (services.ResetPasswordToken, error) { + clt, err := c.grpc() + if err != nil { + return nil, trace.Wrap(err) + } + + token, err := clt.GetResetPasswordToken(ctx, &proto.GetResetPasswordTokenRequest{ + TokenID: tokenID, + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + + return token, nil +} + +// CreateResetPasswordToken creates reset password token +func (c *Client) CreateResetPasswordToken(ctx context.Context, req CreateResetPasswordTokenRequest) (services.ResetPasswordToken, error) { + clt, err := c.grpc() + if err != nil { + return nil, trace.Wrap(err) + } + + token, err := clt.CreateResetPasswordToken(ctx, &proto.CreateResetPasswordTokenRequest{ + Name: req.Name, + TTL: proto.Duration(req.TTL), + Type: req.Type, + }) + if err != nil { + return nil, trail.FromGRPC(err) + } + + return token, nil +} + func (c *Client) DeleteAccessRequest(ctx context.Context, reqID string) error { clt, err := c.grpc() if err != nil { @@ -2722,9 +2706,6 @@ type IdentityService interface { // GetSignupU2FRegisterRequest generates sign request for user trying to sign up with invite token GetSignupU2FRegisterRequest(token string) (*u2f.RegisterRequest, error) - // CreateUserWithU2FToken creates user account with provided token and U2F sign response - CreateUserWithU2FToken(token string, password string, u2fRegisterResponse u2f.RegisterResponse) (services.WebSession, error) - // GetUser returns user by name GetUser(name string, withSecrets bool) (services.User, error) @@ -2743,15 +2724,6 @@ type IdentityService interface { // CheckPassword checks if the suplied web access password is valid. CheckPassword(user string, password []byte, otpToken string) error - // CreateUserWithOTP creates account with provided token and password. - // Account username and OTP key are taken from token data. - // Deletes token after account creation. - CreateUserWithOTP(token, password, otpToken string) (services.WebSession, error) - - // CreateUserWithoutOTP validates a given token creates a user - // with the given password and deletes the token afterwards. - CreateUserWithoutOTP(token string, password string) (services.WebSession, error) - // GenerateToken creates a special provisioning token for a new SSH server // that is valid for ttl period seconds. // @@ -2777,15 +2749,20 @@ type IdentityService interface { // returns the resulting certificates. GenerateUserCerts(ctx context.Context, req proto.UserCertsRequest) (*proto.Certs, error) - // GetSignupTokenData returns token data for a valid token - GetSignupTokenData(token string) (user string, otpQRCode []byte, e error) - - // CreateSignupToken creates one time token for creating account for the user - // For each token it creates username and OTP key - CreateSignupToken(user services.UserV1, ttl time.Duration) (string, error) - // DeleteAllUsers deletes all users DeleteAllUsers() error + + // CreateResetPasswordToken creates a new user reset token + CreateResetPasswordToken(ctx context.Context, req CreateResetPasswordTokenRequest) (services.ResetPasswordToken, error) + + // ChangePasswordWithToken changes password with token + ChangePasswordWithToken(ctx context.Context, req ChangePasswordWithTokenRequest) (services.WebSession, error) + + // GetResetPasswordToken returns token + GetResetPasswordToken(ctx context.Context, username string) (services.ResetPasswordToken, error) + + // RotateResetPasswordTokenSecrets rotates token secrets for a given tokenID + RotateResetPasswordTokenSecrets(ctx context.Context, tokenID string) (services.ResetPasswordTokenSecrets, error) } // ProvisioningService is a service in control @@ -2798,7 +2775,7 @@ type ProvisioningService interface { GetToken(token string) (services.ProvisionToken, error) // DeleteToken deletes a given provisioning token on the auth server (CA). It - // could be a user token or a machine token + // could be a reset password token or a machine token DeleteToken(token string) error // DeleteAllTokens deletes all provisioning tokens diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 4a5a74a4089..97aef1c316b 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -21,6 +21,7 @@ import ( "io" "net/http" "strings" + "time" "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/auth/proto" @@ -246,6 +247,84 @@ func (g *GRPCServer) SetAccessRequestState(ctx context.Context, req *proto.Reque return &empty.Empty{}, nil } +func (g *GRPCServer) CreateResetPasswordToken(ctx context.Context, req *proto.CreateResetPasswordTokenRequest) (*services.ResetPasswordTokenV3, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trail.ToGRPC(err) + } + + if req == nil { + req = &proto.CreateResetPasswordTokenRequest{} + } + + token, err := auth.CreateResetPasswordToken(ctx, CreateResetPasswordTokenRequest{ + Name: req.Name, + TTL: time.Duration(req.TTL), + Type: req.Type, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + r, ok := token.(*services.ResetPasswordTokenV3) + if !ok { + err = trace.BadParameter("unexpected ResetPasswordToken type %T", token) + return nil, trail.ToGRPC(err) + } + + return r, nil +} + +func (g *GRPCServer) RotateResetPasswordTokenSecrets(ctx context.Context, req *proto.RotateResetPasswordTokenSecretsRequest) (*services.ResetPasswordTokenSecretsV3, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trail.ToGRPC(err) + } + + tokenID := "" + if req != nil { + tokenID = req.TokenID + } + + secrets, err := auth.RotateResetPasswordTokenSecrets(ctx, tokenID) + if err != nil { + return nil, trail.ToGRPC(err) + } + + r, ok := secrets.(*services.ResetPasswordTokenSecretsV3) + if !ok { + err = trace.BadParameter("unexpected ResetPasswordTokenSecrets type %T", secrets) + return nil, trail.ToGRPC(err) + } + + return r, nil +} + +func (g *GRPCServer) GetResetPasswordToken(ctx context.Context, req *proto.GetResetPasswordTokenRequest) (*services.ResetPasswordTokenV3, error) { + auth, err := g.authenticate(ctx) + if err != nil { + return nil, trail.ToGRPC(err) + } + + tokenID := "" + if req != nil { + tokenID = req.TokenID + } + + token, err := auth.GetResetPasswordToken(ctx, tokenID) + if err != nil { + return nil, trail.ToGRPC(err) + } + + r, ok := token.(*services.ResetPasswordTokenV3) + if !ok { + err = trace.BadParameter("unexpected ResetPasswordToken type %T", token) + return nil, trail.ToGRPC(err) + } + + return r, nil +} + // GetPluginData loads all plugin data matching the supplied filter. func (g *GRPCServer) GetPluginData(ctx context.Context, filter *services.PluginDataFilter) (*proto.PluginDataSeq, error) { // TODO(fspmarshall): Implement rate-limiting to prevent misbehaving plugins from diff --git a/lib/auth/methods.go b/lib/auth/methods.go index 9d15929d26c..8cdc6a77078 100644 --- a/lib/auth/methods.go +++ b/lib/auth/methods.go @@ -184,22 +184,21 @@ func (s *AuthServer) AuthenticateWebUser(req AuthenticateUserRequest) (services. } return session, nil } + if err := s.AuthenticateUser(req); err != nil { return nil, trace.Wrap(err) } + user, err := s.GetUser(req.Username, false) if err != nil { return nil, trace.Wrap(err) } - // It's safe to extract the roles and traits directly from services.User as - // this endpoint is only used for local accounts. - sess, err := s.NewWebSession(req.Username, user.GetRoles(), user.GetTraits()) + + sess, err := s.createUserWebSession(user) if err != nil { return nil, trace.Wrap(err) } - if err := s.UpsertWebSession(req.Username, sess); err != nil { - return nil, trace.Wrap(err) - } + sess, err = services.GetWebSessionMarshaler().GenerateWebSession(sess) if err != nil { return nil, trace.Wrap(err) @@ -365,4 +364,19 @@ func (s *AuthServer) emitNoLocalAuthEvent(username string) { s.IAuditLog.EmitAuditEvent(events.AuthAttemptFailure, fields) } +func (s *AuthServer) createUserWebSession(user services.User) (services.WebSession, error) { + // It's safe to extract the roles and traits directly from services.User as this method + // is only used for local accounts. + sess, err := s.NewWebSession(user.GetName(), user.GetRoles(), user.GetTraits()) + if err != nil { + return nil, trace.Wrap(err) + } + err = s.UpsertWebSession(user.GetName(), sess) + if err != nil { + return nil, trace.Wrap(err) + } + + return sess, nil +} + const noLocalAuth = "local auth disabled" diff --git a/lib/auth/new_web_user.go b/lib/auth/new_web_user.go deleted file mode 100644 index aa5c4f2e189..00000000000 --- a/lib/auth/new_web_user.go +++ /dev/null @@ -1,467 +0,0 @@ -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package auth implements certificate signing authority and access control server -// Authority server is composed of several parts: -// -// * Authority server itself that implements signing and acl logic -// * HTTP server wrapper for authority server -// * HTTP client wrapper -// -package auth - -import ( - "bytes" - "image/png" - "time" - - "github.com/gravitational/teleport" - "github.com/gravitational/teleport/lib/defaults" - "github.com/gravitational/teleport/lib/events" - "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/utils" - - "github.com/gravitational/trace" - "github.com/pquerna/otp/totp" - - "github.com/tstranex/u2f" -) - -// CreateSignupToken creates one time token for creating account for the user -// For each token it creates username and otp generator -func (s *AuthServer) CreateSignupToken(userv1 services.UserV1, ttl time.Duration) (string, error) { - clusterConfig, err := s.GetClusterConfig() - if err != nil { - return "", trace.Wrap(err) - } - if clusterConfig.GetLocalAuth() == false { - s.emitNoLocalAuthEvent(userv1.V2().GetName()) - return "", trace.AccessDenied(noLocalAuth) - } - - user := userv1.V2() - if err := user.Check(); err != nil { - return "", trace.Wrap(err) - } - - if ttl > defaults.MaxSignupTokenTTL { - return "", trace.BadParameter("failed to invite user: maximum signup token TTL is %v hours", int(defaults.MaxSignupTokenTTL/time.Hour)) - } - - // make sure that connectors actually exist - for _, id := range user.GetOIDCIdentities() { - if err := id.Check(); err != nil { - return "", trace.Wrap(err) - } - if _, err := s.GetOIDCConnector(id.ConnectorID, false); err != nil { - return "", trace.Wrap(err) - } - } - - for _, id := range user.GetSAMLIdentities() { - if err := id.Check(); err != nil { - return "", trace.Wrap(err) - } - if _, err := s.GetSAMLConnector(id.ConnectorID, false); err != nil { - return "", trace.Wrap(err) - } - } - - // TODO(rjones): TOCTOU, instead try to create signup token for user and fail - // when unable to. - _, err = s.GetPasswordHash(user.GetName()) - if err == nil { - return "", trace.BadParameter("user '%s' already exists", user.GetName()) - } - - token, err := utils.CryptoRandomHex(TokenLenBytes) - if err != nil { - return "", trace.Wrap(err) - } - - // This OTP secret and QR code are never actually used. The OTP secret and - // QR code are rotated every time the signup link is show to the user, see - // the "GetSignupTokenData" function for details on why this is done. We - // generate a OTP token because it causes no harm and makes tests easier to - // write. - accountName := user.GetName() + "@" + s.AuthServiceName - otpKey, otpQRCode, err := s.initializeTOTP(accountName) - if err != nil { - return "", trace.Wrap(err) - } - - // create and upsert signup token - tokenData := services.SignupToken{ - Token: token, - User: userv1, - OTPKey: otpKey, - OTPQRCode: otpQRCode, - } - - if ttl == 0 || ttl > defaults.MaxSignupTokenTTL { - ttl = defaults.SignupTokenTTL - } - - err = s.UpsertSignupToken(token, tokenData, ttl) - if err != nil { - return "", trace.Wrap(err) - } - - log.Infof("[AUTH API] created the signup token for %q", user) - return token, nil -} - -// initializeTOTP creates TOTP algorithm and returns the key and QR code. -func (s *AuthServer) initializeTOTP(accountName string) (key string, qr []byte, err error) { - // create totp key - otpKey, err := totp.Generate(totp.GenerateOpts{ - Issuer: "Teleport", - AccountName: accountName, - }) - if err != nil { - return "", nil, trace.Wrap(err) - } - - // create QR code - var otpQRBuf bytes.Buffer - otpImage, err := otpKey.Image(456, 456) - if err != nil { - return "", nil, trace.Wrap(err) - } - png.Encode(&otpQRBuf, otpImage) - - return otpKey.Secret(), otpQRBuf.Bytes(), nil -} - -// rotateAndFetchSignupToken rotates the signup token everytime it's fetched. -// This ensures that an attacker that gains the signup link can not view it, -// extract the OTP key from the QR code, then allow the user to signup with -// the same OTP token. -func (s *AuthServer) rotateAndFetchSignupToken(token string) (*services.SignupToken, error) { - var err error - - // Fetch original signup token. - st, err := s.GetSignupToken(token) - if err != nil { - return nil, trace.Wrap(err) - } - - // Generate and set new OTP code for user in *services.SignupToken. - accountName := st.User.V2().GetName() + "@" + s.AuthServiceName - st.OTPKey, st.OTPQRCode, err = s.initializeTOTP(accountName) - if err != nil { - return nil, trace.Wrap(err) - } - - // Upsert token into backend. - err = s.UpsertSignupToken(token, *st, st.Expires.Sub(s.clock.Now())) - if err != nil { - return nil, trace.Wrap(err) - } - - return st, nil -} - -// GetSignupTokenData returns token data (username and QR code bytes) for a -// valid signup token. -func (s *AuthServer) GetSignupTokenData(token string) (user string, qrCode []byte, err error) { - // Rotate OTP secret before the signup data is fetched (signup page is - // rendered). This mitigates attacks where an attacker just views the signup - // link, extracts the OTP secret from the QR code, then closes the window. - // Then when the user signs up later, the attacker has access to the OTP - // secret. - st, err := s.rotateAndFetchSignupToken(token) - if err != nil { - return "", nil, trace.Wrap(err) - } - - // TODO(rjones): Remove this check and use compare and swap in the Create* - // functions below. It's a TOCTOU bug in the making: - // https://en.wikipedia.org/wiki/Time_of_check_to_time_of_use - _, err = s.GetPasswordHash(st.User.Name) - if err == nil { - return "", nil, trace.Errorf("user %q already exists", st.User.Name) - } - - return st.User.Name, st.OTPQRCode, nil -} - -func (s *AuthServer) CreateSignupU2FRegisterRequest(token string) (u2fRegisterRequest *u2f.RegisterRequest, e error) { - cap, err := s.GetAuthPreference() - if err != nil { - return nil, trace.Wrap(err) - } - - universalSecondFactor, err := cap.GetU2F() - if err != nil { - return nil, trace.Wrap(err) - } - - tokenData, err := s.GetSignupToken(token) - if err != nil { - return nil, trace.Wrap(err) - } - - _, err = s.GetPasswordHash(tokenData.User.Name) - if err == nil { - return nil, trace.AlreadyExists("user %q already exists", tokenData.User.Name) - } - - c, err := u2f.NewChallenge(universalSecondFactor.AppID, universalSecondFactor.Facets) - if err != nil { - return nil, trace.Wrap(err) - } - - request := c.RegisterRequest() - - err = s.UpsertU2FRegisterChallenge(token, c) - if err != nil { - return nil, trace.Wrap(err) - } - - return request, nil -} - -// CreateUserWithOTP creates account with provided token and password. -// Account username and hotp generator are taken from token data. -// Deletes token after account creation. -func (s *AuthServer) CreateUserWithOTP(token string, password string, otpToken string) (services.WebSession, error) { - clusterConfig, err := s.GetClusterConfig() - if err != nil { - return nil, trace.Wrap(err) - } - if clusterConfig.GetLocalAuth() == false { - s.emitNoLocalAuthEvent("") - return nil, trace.AccessDenied(noLocalAuth) - } - - tokenData, err := s.GetSignupToken(token) - if err != nil { - log.Debugf("failed to get signup token: %v", err) - return nil, trace.AccessDenied("expired or incorrect signup token") - } - - err = s.UpsertTOTP(tokenData.User.Name, tokenData.OTPKey) - if err != nil { - return nil, trace.Wrap(err) - } - - err = s.CheckOTP(tokenData.User.Name, otpToken) - if err != nil { - log.Debugf("failed to validate a token: %v", err) - return nil, trace.AccessDenied("failed to validate a token") - } - - err = s.UpsertPassword(tokenData.User.Name, []byte(password)) - if err != nil { - return nil, trace.Wrap(err) - } - - // create services.User and services.WebSession - webSession, err := s.createUserAndSession(tokenData) - if err != nil { - return nil, trace.Wrap(err) - } - - return webSession, nil -} - -// CreateUserWithoutOTP creates an account with the provided password and deletes the token afterwards. -func (s *AuthServer) CreateUserWithoutOTP(token string, password string) (services.WebSession, error) { - clusterConfig, err := s.GetClusterConfig() - if err != nil { - return nil, trace.Wrap(err) - } - if clusterConfig.GetLocalAuth() == false { - s.emitNoLocalAuthEvent("") - return nil, trace.AccessDenied(noLocalAuth) - } - - authPreference, err := s.GetAuthPreference() - if err != nil { - return nil, trace.Wrap(err) - } - if authPreference.GetSecondFactor() != teleport.OFF { - return nil, trace.AccessDenied("missing second factor") - } - tokenData, err := s.GetSignupToken(token) - if err != nil { - log.Warningf("failed to get signup token: %v", err) - return nil, trace.AccessDenied("expired or incorrect signup token") - } - - err = s.UpsertPassword(tokenData.User.Name, []byte(password)) - if err != nil { - return nil, trace.Wrap(err) - } - - // create services.User and services.WebSession - webSession, err := s.createUserAndSession(tokenData) - if err != nil { - return nil, trace.Wrap(err) - } - - return webSession, nil -} - -func (s *AuthServer) CreateUserWithU2FToken(token string, password string, response u2f.RegisterResponse) (services.WebSession, error) { - clusterConfig, err := s.GetClusterConfig() - if err != nil { - return nil, trace.Wrap(err) - } - if clusterConfig.GetLocalAuth() == false { - s.emitNoLocalAuthEvent("") - return nil, trace.AccessDenied(noLocalAuth) - } - - // before trying to create a user, see U2F is actually setup on the backend - cap, err := s.GetAuthPreference() - if err != nil { - return nil, trace.Wrap(err) - } - _, err = cap.GetU2F() - if err != nil { - return nil, trace.Wrap(err) - } - - tokenData, err := s.GetSignupToken(token) - if err != nil { - log.Warningf("failed to get signup token: %v", err) - return nil, trace.AccessDenied("expired or incorrect signup token") - } - - challenge, err := s.GetU2FRegisterChallenge(token) - if err != nil { - return nil, trace.Wrap(err) - } - - reg, err := u2f.Register(response, *challenge, &u2f.Config{SkipAttestationVerify: true}) - if err != nil { - log.Error(trace.DebugReport(err)) - return nil, trace.Wrap(err) - } - - err = s.UpsertU2FRegistration(tokenData.User.Name, reg) - if err != nil { - return nil, trace.Wrap(err) - } - err = s.UpsertU2FRegistrationCounter(tokenData.User.Name, 0) - if err != nil { - return nil, trace.Wrap(err) - } - - err = s.UpsertPassword(tokenData.User.Name, []byte(password)) - if err != nil { - return nil, trace.Wrap(err) - } - - // create services.User and services.WebSession - webSession, err := s.createUserAndSession(tokenData) - if err != nil { - return nil, trace.Wrap(err) - } - - return webSession, nil -} - -// createUserAndSession takes a signup token and creates services.User (either -// with the passed in roles, or if no role, the default role) and -// services.WebSession in the backend and returns the new services.WebSession. -func (a *AuthServer) createUserAndSession(stoken *services.SignupToken) (services.WebSession, error) { - // extract user from signup token. if no roles have been passed along, create - // user with default role. note: during the conversion from services.UserV1 - // to services.UserV2 we convert allowed logins to traits. - user := stoken.User.V2() - if len(user.GetRoles()) == 0 { - user.SetRoles([]string{teleport.AdminRoleName}) - } - - // upsert user into the backend - err := a.UpsertUser(user) - if err != nil { - return nil, trace.Wrap(err) - } - log.Infof("[AUTH] Created user: %v", user) - - // remove the token once the user has been created - err = a.DeleteSignupToken(stoken.Token) - if err != nil { - return nil, trace.Wrap(err) - } - - // It's safe to extract the roles and traits directly from services.User as - // this endpoint is only used for local accounts. - sess, err := a.NewWebSession(user.GetName(), user.GetRoles(), user.GetTraits()) - if err != nil { - return nil, trace.Wrap(err) - } - err = a.UpsertWebSession(user.GetName(), sess) - if err != nil { - return nil, trace.Wrap(err) - } - - return sess, nil -} - -func (a *AuthServer) UpsertUser(user services.User) error { - err := a.Identity.UpsertUser(user) - if err != nil { - return trace.Wrap(err) - } - - // If the user was successfully upserted, emit an event. - var connectorName string - if user.GetCreatedBy().Connector == nil { - connectorName = teleport.Local - } else { - connectorName = user.GetCreatedBy().Connector.ID - } - a.EmitAuditEvent(events.UserUpdate, events.EventFields{ - events.EventUser: user.GetName(), - events.UserExpires: user.Expiry(), - events.UserRoles: user.GetRoles(), - events.UserConnector: connectorName, - }) - - return nil -} - -func (a *AuthServer) DeleteUser(user string) error { - role, err := a.Access.GetRole(services.RoleNameForUser(user)) - if err != nil { - if !trace.IsNotFound(err) { - return trace.Wrap(err) - } - } else { - if err := a.Access.DeleteRole(role.GetName()); err != nil { - if !trace.IsNotFound(err) { - return trace.Wrap(err) - } - } - } - - err = a.Identity.DeleteUser(user) - if err != nil { - return trace.Wrap(err) - } - - // If the user was successfully deleted, emit an event. - a.EmitAuditEvent(events.UserDelete, events.EventFields{ - events.EventUser: user, - }) - - return nil -} diff --git a/lib/auth/password.go b/lib/auth/password.go index d89d69ee9bc..e7503f99492 100644 --- a/lib/auth/password.go +++ b/lib/auth/password.go @@ -1,6 +1,7 @@ package auth import ( + "context" "crypto/subtle" "golang.org/x/crypto/bcrypt" @@ -10,6 +11,7 @@ import ( "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/trace" + "github.com/tstranex/u2f" "github.com/pquerna/otp" "github.com/pquerna/otp/totp" @@ -17,6 +19,55 @@ import ( var fakePasswordHash = []byte(`$2a$10$Yy.e6BmS2SrGbBDsyDLVkOANZmvjjMR890nUGSXFJHBXWzxe7T44m`) +// ChangePasswordWithTokenRequest defines a request to change user password +type ChangePasswordWithTokenRequest struct { + // SecondFactorToken is 2nd factor token value + SecondFactorToken string `json:"second_factor_token"` + // TokenID is this token ID + TokenID string `json:"token"` + // Password is user password + Password []byte `json:"password"` + // U2FRegisterResponse is U2F register response + U2FRegisterResponse u2f.RegisterResponse `json:"u2f_register_response"` +} + +// ChangePasswordWithToken changes password with token +func (s *AuthServer) ChangePasswordWithToken(ctx context.Context, req ChangePasswordWithTokenRequest) (services.WebSession, error) { + user, err := s.changePasswordWithToken(ctx, req) + if err != nil { + return nil, trace.Wrap(err) + } + + sess, err := s.createUserWebSession(user) + if err != nil { + return nil, trace.Wrap(err) + } + + return sess, nil +} + +// ResetPassword securely generates a new random password and assigns it to user. +// This method is used to invalidate existing user password during password +// reset process. +func (s *AuthServer) ResetPassword(username string) (string, error) { + user, err := s.GetUser(username, false) + if err != nil { + return "", trace.Wrap(err) + } + + password, err := utils.CryptoRandomHex(defaults.ResetPasswordLength) + if err != nil { + return "", trace.Wrap(err) + } + + err = s.UpsertPassword(user.GetName(), []byte(password)) + if err != nil { + return "", trace.Wrap(err) + } + + return password, nil +} + // ChangePassword changes user passsword func (s *AuthServer) ChangePassword(req services.ChangePasswordReq) error { // validate new password @@ -165,8 +216,39 @@ func (s *AuthServer) CheckOTP(user string, otpToken string) error { return nil } +// CreateSignupU2FRegisterRequest creates U2F requests +func (s *AuthServer) CreateSignupU2FRegisterRequest(tokenID string) (u2fRegisterRequest *u2f.RegisterRequest, e error) { + cap, err := s.GetAuthPreference() + if err != nil { + return nil, trace.Wrap(err) + } + + universalSecondFactor, err := cap.GetU2F() + if err != nil { + return nil, trace.Wrap(err) + } + + _, err = s.GetResetPasswordToken(context.TODO(), tokenID) + if err != nil { + return nil, trace.Wrap(err) + } + + c, err := u2f.NewChallenge(universalSecondFactor.AppID, universalSecondFactor.Facets) + if err != nil { + return nil, trace.Wrap(err) + } + + err = s.UpsertU2FRegisterChallenge(tokenID, c) + if err != nil { + return nil, trace.Wrap(err) + } + + request := c.RegisterRequest() + return request, nil +} + // getOTPType returns the type of OTP token used, HOTP or TOTP. -// Deprecated: Remove this method once HOTP support has been removed. +// Deprecated: Remove this method once HOTP support has been removed from Gravity. func (s *AuthServer) getOTPType(user string) (string, error) { _, err := s.GetHOTP(user) if err != nil { @@ -178,23 +260,115 @@ func (s *AuthServer) getOTPType(user string) (string, error) { return teleport.HOTP, nil } -// GetOTPData returns the OTP Key, Key URL, and the QR code. -func (s *AuthServer) GetOTPData(user string) (string, []byte, error) { - // get otp key from backend - otpSecret, err := s.GetTOTP(user) +func (s *AuthServer) changePasswordWithToken(ctx context.Context, req ChangePasswordWithTokenRequest) (services.User, error) { + // Get cluster configuration and check if local auth is allowed. + clusterConfig, err := s.GetClusterConfig() if err != nil { - return "", nil, trace.Wrap(err) + return nil, trace.Wrap(err) + } + if clusterConfig.GetLocalAuth() == false { + return nil, trace.AccessDenied(noLocalAuth) } - // create otp url - params := map[string][]byte{"secret": []byte(otpSecret)} - otpURL := utils.GenerateOTPURL("totp", user, params) - - // create the qr code - otpQR, err := utils.GenerateQRCode(otpURL) + err = services.VerifyPassword(req.Password) if err != nil { - return "", nil, trace.Wrap(err) + return nil, trace.Wrap(err) } - return otpURL, otpQR, nil + // Check if token exists. + token, err := s.GetResetPasswordToken(ctx, req.TokenID) + if err != nil { + return nil, trace.Wrap(err) + } + + if token.Expiry().Before(s.clock.Now().UTC()) { + return nil, trace.BadParameter("expired token") + } + + err = s.changeUserSecondFactor(req, token) + if err != nil { + return nil, trace.Wrap(err) + } + + username := token.GetUser() + // Delete this token first to minimize the chances + // of partially updated user with still valid token. + err = s.deleteResetPasswordTokens(ctx, username) + if err != nil { + return nil, trace.Wrap(err) + } + + // Set a new password. + err = s.UpsertPassword(username, []byte(req.Password)) + if err != nil { + return nil, trace.Wrap(err) + } + + user, err := s.GetUser(username, false) + if err != nil { + return nil, trace.Wrap(err) + } + + return user, nil +} + +func (s *AuthServer) changeUserSecondFactor(req ChangePasswordWithTokenRequest, ResetPasswordToken services.ResetPasswordToken) error { + username := ResetPasswordToken.GetUser() + cap, err := s.GetAuthPreference() + if err != nil { + return trace.Wrap(err) + } + + switch cap.GetSecondFactor() { + case teleport.OFF: + return nil + case teleport.OTP, teleport.TOTP, teleport.HOTP: + secrets, err := s.Identity.GetResetPasswordTokenSecrets(context.TODO(), req.TokenID) + if err != nil { + return trace.Wrap(err) + } + + // TODO: create a separate method to validate TOTP without inserting it first + err = s.UpsertTOTP(username, secrets.GetOTPKey()) + if err != nil { + return trace.Wrap(err) + } + + err = s.CheckOTP(username, req.SecondFactorToken) + if err != nil { + return trace.Wrap(err) + } + + return nil + case teleport.U2F: + _, err = cap.GetU2F() + if err != nil { + return trace.Wrap(err) + } + + challenge, err := s.GetU2FRegisterChallenge(req.TokenID) + if err != nil { + return trace.Wrap(err) + } + + u2fRes := req.U2FRegisterResponse + reg, err := u2f.Register(u2fRes, *challenge, &u2f.Config{SkipAttestationVerify: true}) + if err != nil { + return trace.Wrap(err) + } + + err = s.UpsertU2FRegistration(username, reg) + if err != nil { + return trace.Wrap(err) + } + + err = s.UpsertU2FRegistrationCounter(username, 0) + if err != nil { + return trace.Wrap(err) + } + + return nil + } + + return trace.BadParameter("unknown second factor type %q", cap.GetSecondFactor()) } diff --git a/lib/auth/password_test.go b/lib/auth/password_test.go index 673952241de..22aae0862d4 100644 --- a/lib/auth/password_test.go +++ b/lib/auth/password_test.go @@ -76,6 +76,14 @@ func (s *PasswordSuite) SetUpTest(c *C) { err = s.a.SetClusterName(clusterName) c.Assert(err, IsNil) + clusterConfig, err := services.NewClusterConfig(services.ClusterConfigSpecV3{ + LocalAuth: services.NewBool(true), + }) + c.Assert(err, IsNil) + + err = s.a.SetClusterConfig(clusterConfig) + c.Assert(err, IsNil) + // set static tokens staticTokens, err := services.NewStaticTokens(services.StaticTokensSpecV2{ StaticTokens: []services.ProvisionTokenV1{}, @@ -171,6 +179,162 @@ func (s *PasswordSuite) TestChangePasswordWithOTP(c *C) { c.Assert(err, IsNil) } +func (s *PasswordSuite) TestChangePasswordWithToken(c *C) { + authPreference, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.OFF, + }) + c.Assert(err, IsNil) + + err = s.a.SetAuthPreference(authPreference) + c.Assert(err, IsNil) + + username := "joe@example.com" + password := []byte("qweqweqwe") + _, _, err = CreateUserAndRole(s.a, username, []string{username}) + c.Assert(err, IsNil) + + token, err := s.a.CreateResetPasswordToken(context.TODO(), CreateResetPasswordTokenRequest{ + Name: username, + }) + c.Assert(err, IsNil) + + _, err = s.a.changePasswordWithToken(context.TODO(), ChangePasswordWithTokenRequest{ + TokenID: token.GetName(), + Password: password, + }) + c.Assert(err, IsNil) + + // password should be updated + err = s.a.CheckPasswordWOToken(username, password) + c.Assert(err, IsNil) +} + +func (s *PasswordSuite) TestChangePasswordWithTokenOTP(c *C) { + authPreference, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.OTP, + }) + c.Assert(err, IsNil) + + err = s.a.SetAuthPreference(authPreference) + c.Assert(err, IsNil) + + username := "joe@example.com" + password := []byte("qweqweqwe") + _, _, err = CreateUserAndRole(s.a, username, []string{username}) + c.Assert(err, IsNil) + + token, err := s.a.CreateResetPasswordToken(context.TODO(), CreateResetPasswordTokenRequest{ + Name: username, + }) + + secrets, err := s.a.RotateResetPasswordTokenSecrets(context.TODO(), token.GetName()) + c.Assert(err, IsNil) + + otpToken, err := totp.GenerateCode(secrets.GetOTPKey(), s.bk.Clock().Now()) + c.Assert(err, IsNil) + + _, err = s.a.changePasswordWithToken(context.TODO(), ChangePasswordWithTokenRequest{ + TokenID: token.GetName(), + Password: password, + SecondFactorToken: otpToken, + }) + c.Assert(err, IsNil) + + err = s.a.CheckPasswordWOToken(username, password) + c.Assert(err, IsNil) +} + +func (s *PasswordSuite) TestChangePasswordWithTokenErrors(c *C) { + authPreference, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.OTP, + }) + c.Assert(err, IsNil) + + username := "joe@example.com" + _, _, err = CreateUserAndRole(s.a, username, []string{username}) + c.Assert(err, IsNil) + + token, err := s.a.CreateResetPasswordToken(context.TODO(), CreateResetPasswordTokenRequest{ + Name: username, + }) + c.Assert(err, IsNil) + + validPassword := []byte("qweQWE1") + validTokenID := token.GetName() + + type testCase struct { + desc string + secondFactor string + req ChangePasswordWithTokenRequest + } + + testCases := []testCase{ + { + secondFactor: teleport.OFF, + desc: "invalid tokenID value", + req: ChangePasswordWithTokenRequest{ + TokenID: "what_token", + Password: validPassword, + }, + }, + { + secondFactor: teleport.OFF, + desc: "invalid password", + req: ChangePasswordWithTokenRequest{ + TokenID: validTokenID, + Password: []byte("short"), + }, + }, + { + secondFactor: teleport.OTP, + desc: "missing second factor", + req: ChangePasswordWithTokenRequest{ + TokenID: validTokenID, + Password: validPassword, + }, + }, + { + secondFactor: teleport.OTP, + desc: "invalid OTP value", + req: ChangePasswordWithTokenRequest{ + TokenID: validTokenID, + Password: validPassword, + SecondFactorToken: "invalid", + }, + }, + } + + for _, tc := range testCases { + // set new auth preference settings + authPreference.SetSecondFactor(tc.secondFactor) + err = s.a.SetAuthPreference(authPreference) + c.Assert(err, IsNil) + + _, err = s.a.changePasswordWithToken(context.TODO(), tc.req) + c.Assert(err, NotNil, Commentf("test case %q", tc.desc)) + } + + authPreference.SetSecondFactor(teleport.OFF) + err = s.a.SetAuthPreference(authPreference) + c.Assert(err, IsNil) + + _, err = s.a.changePasswordWithToken(context.TODO(), ChangePasswordWithTokenRequest{ + TokenID: validTokenID, + Password: validPassword, + }) + c.Assert(err, IsNil) + + // invite token cannot be reused + _, err = s.a.changePasswordWithToken(context.TODO(), ChangePasswordWithTokenRequest{ + TokenID: validTokenID, + Password: validPassword, + }) + c.Assert(err, NotNil) +} + func (s *PasswordSuite) shouldLockAfterFailedAttempts(c *C, req services.ChangePasswordReq) { loginAttempts, _ := s.a.GetUserLoginAttempts(req.User) c.Assert(len(loginAttempts), Equals, 0) diff --git a/lib/auth/proto/auth.pb.go b/lib/auth/proto/auth.pb.go index ce63143222d..643b8349d1c 100644 --- a/lib/auth/proto/auth.pb.go +++ b/lib/auth/proto/auth.pb.go @@ -60,7 +60,7 @@ func (x Operation) String() string { return proto.EnumName(Operation_name, int32(x)) } func (Operation) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{0} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{0} } // Event returns cluster event @@ -93,7 +93,7 @@ func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{0} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{0} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -583,7 +583,7 @@ func (m *Watch) Reset() { *m = Watch{} } func (m *Watch) String() string { return proto.CompactTextString(m) } func (*Watch) ProtoMessage() {} func (*Watch) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{1} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{1} } func (m *Watch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -641,7 +641,7 @@ func (m *WatchKind) Reset() { *m = WatchKind{} } func (m *WatchKind) String() string { return proto.CompactTextString(m) } func (*WatchKind) ProtoMessage() {} func (*WatchKind) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{2} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{2} } func (m *WatchKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -713,7 +713,7 @@ func (m *Certs) Reset() { *m = Certs{} } func (m *Certs) String() string { return proto.CompactTextString(m) } func (*Certs) ProtoMessage() {} func (*Certs) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{3} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{3} } func (m *Certs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -766,7 +766,8 @@ type UserCertsRequest struct { // Expires is a desired time of the expiry of the certificate, could // be adjusted based on the permissions Expires time.Time `protobuf:"bytes,3,opt,name=Expires,stdtime" json:"expires,omitempty"` - // Format encodes the desired SSH Certificate format (either old ssh compatibility + // Format encodes the desired SSH Certificate format (either old ssh + // compatibility // format to remove some metadata causing trouble with old SSH servers) // or standard SSH cert format with custom extensions Format string `protobuf:"bytes,4,opt,name=Format,proto3" json:"format,omitempty"` @@ -786,7 +787,7 @@ func (m *UserCertsRequest) Reset() { *m = UserCertsRequest{} } func (m *UserCertsRequest) String() string { return proto.CompactTextString(m) } func (*UserCertsRequest) ProtoMessage() {} func (*UserCertsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{4} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{4} } func (m *UserCertsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -857,7 +858,7 @@ func (m *UserCertsRequest) GetAccessRequests() []string { return nil } -// GetUserRequest specifies paramters for the GetUser method. +// GetUserRequest specifies parameters for the GetUser method. type GetUserRequest struct { // Name is the name of the desired user. Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"name"` @@ -872,7 +873,7 @@ func (m *GetUserRequest) Reset() { *m = GetUserRequest{} } func (m *GetUserRequest) String() string { return proto.CompactTextString(m) } func (*GetUserRequest) ProtoMessage() {} func (*GetUserRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{5} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{5} } func (m *GetUserRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -928,7 +929,7 @@ func (m *GetUsersRequest) Reset() { *m = GetUsersRequest{} } func (m *GetUsersRequest) String() string { return proto.CompactTextString(m) } func (*GetUsersRequest) ProtoMessage() {} func (*GetUsersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{6} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{6} } func (m *GetUsersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -976,7 +977,7 @@ func (m *AccessRequests) Reset() { *m = AccessRequests{} } func (m *AccessRequests) String() string { return proto.CompactTextString(m) } func (*AccessRequests) ProtoMessage() {} func (*AccessRequests) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{7} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{7} } func (m *AccessRequests) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1024,7 +1025,7 @@ func (m *PluginDataSeq) Reset() { *m = PluginDataSeq{} } func (m *PluginDataSeq) String() string { return proto.CompactTextString(m) } func (*PluginDataSeq) ProtoMessage() {} func (*PluginDataSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{8} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{8} } func (m *PluginDataSeq) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1074,7 +1075,7 @@ func (m *RequestStateSetter) Reset() { *m = RequestStateSetter{} } func (m *RequestStateSetter) String() string { return proto.CompactTextString(m) } func (*RequestStateSetter) ProtoMessage() {} func (*RequestStateSetter) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{9} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{9} } func (m *RequestStateSetter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1129,7 +1130,7 @@ func (m *RequestID) Reset() { *m = RequestID{} } func (m *RequestID) String() string { return proto.CompactTextString(m) } func (*RequestID) ProtoMessage() {} func (*RequestID) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{10} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{10} } func (m *RequestID) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1165,6 +1166,172 @@ func (m *RequestID) GetID() string { return "" } +// RotateResetPasswordTokenSecretsRequest is a request to rotate token secrets. +type RotateResetPasswordTokenSecretsRequest struct { + TokenID string `protobuf:"bytes,1,opt,name=TokenID,proto3" json:"token"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RotateResetPasswordTokenSecretsRequest) Reset() { + *m = RotateResetPasswordTokenSecretsRequest{} +} +func (m *RotateResetPasswordTokenSecretsRequest) String() string { return proto.CompactTextString(m) } +func (*RotateResetPasswordTokenSecretsRequest) ProtoMessage() {} +func (*RotateResetPasswordTokenSecretsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{11} +} +func (m *RotateResetPasswordTokenSecretsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RotateResetPasswordTokenSecretsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RotateResetPasswordTokenSecretsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *RotateResetPasswordTokenSecretsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RotateResetPasswordTokenSecretsRequest.Merge(dst, src) +} +func (m *RotateResetPasswordTokenSecretsRequest) XXX_Size() int { + return m.Size() +} +func (m *RotateResetPasswordTokenSecretsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RotateResetPasswordTokenSecretsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RotateResetPasswordTokenSecretsRequest proto.InternalMessageInfo + +func (m *RotateResetPasswordTokenSecretsRequest) GetTokenID() string { + if m != nil { + return m.TokenID + } + return "" +} + +// GetResetPasswordTokenRequest is a request to get a reset password token. +type GetResetPasswordTokenRequest struct { + TokenID string `protobuf:"bytes,1,opt,name=TokenID,proto3" json:"token"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetResetPasswordTokenRequest) Reset() { *m = GetResetPasswordTokenRequest{} } +func (m *GetResetPasswordTokenRequest) String() string { return proto.CompactTextString(m) } +func (*GetResetPasswordTokenRequest) ProtoMessage() {} +func (*GetResetPasswordTokenRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{12} +} +func (m *GetResetPasswordTokenRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetResetPasswordTokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetResetPasswordTokenRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *GetResetPasswordTokenRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetResetPasswordTokenRequest.Merge(dst, src) +} +func (m *GetResetPasswordTokenRequest) XXX_Size() int { + return m.Size() +} +func (m *GetResetPasswordTokenRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetResetPasswordTokenRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetResetPasswordTokenRequest proto.InternalMessageInfo + +func (m *GetResetPasswordTokenRequest) GetTokenID() string { + if m != nil { + return m.TokenID + } + return "" +} + +// CreateResetPasswordTokenRequest is a request to create an instance of +// ResetPasswordToken +type CreateResetPasswordTokenRequest struct { + // Name is the user name. + Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"name"` + // Type is a token type. + Type string `protobuf:"bytes,2,opt,name=Type,proto3" json:"type"` + // TTL specifies how long the generated token is valid for. + TTL Duration `protobuf:"varint,3,opt,name=TTL,proto3,casttype=Duration" json:"ttl"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CreateResetPasswordTokenRequest) Reset() { *m = CreateResetPasswordTokenRequest{} } +func (m *CreateResetPasswordTokenRequest) String() string { return proto.CompactTextString(m) } +func (*CreateResetPasswordTokenRequest) ProtoMessage() {} +func (*CreateResetPasswordTokenRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{13} +} +func (m *CreateResetPasswordTokenRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CreateResetPasswordTokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CreateResetPasswordTokenRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *CreateResetPasswordTokenRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_CreateResetPasswordTokenRequest.Merge(dst, src) +} +func (m *CreateResetPasswordTokenRequest) XXX_Size() int { + return m.Size() +} +func (m *CreateResetPasswordTokenRequest) XXX_DiscardUnknown() { + xxx_messageInfo_CreateResetPasswordTokenRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_CreateResetPasswordTokenRequest proto.InternalMessageInfo + +func (m *CreateResetPasswordTokenRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateResetPasswordTokenRequest) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *CreateResetPasswordTokenRequest) GetTTL() Duration { + if m != nil { + return m.TTL + } + return 0 +} + // PingRequest is the input value for the Ping method. type PingRequest struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -1176,7 +1343,7 @@ func (m *PingRequest) Reset() { *m = PingRequest{} } func (m *PingRequest) String() string { return proto.CompactTextString(m) } func (*PingRequest) ProtoMessage() {} func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{11} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{14} } func (m *PingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1220,7 +1387,7 @@ func (m *PingResponse) Reset() { *m = PingResponse{} } func (m *PingResponse) String() string { return proto.CompactTextString(m) } func (*PingResponse) ProtoMessage() {} func (*PingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_auth_a21c5411562892bf, []int{12} + return fileDescriptor_auth_9f0fdb27f50b4af3, []int{15} } func (m *PingResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1276,6 +1443,9 @@ func init() { proto.RegisterType((*PluginDataSeq)(nil), "proto.PluginDataSeq") proto.RegisterType((*RequestStateSetter)(nil), "proto.RequestStateSetter") proto.RegisterType((*RequestID)(nil), "proto.RequestID") + proto.RegisterType((*RotateResetPasswordTokenSecretsRequest)(nil), "proto.RotateResetPasswordTokenSecretsRequest") + proto.RegisterType((*GetResetPasswordTokenRequest)(nil), "proto.GetResetPasswordTokenRequest") + proto.RegisterType((*CreateResetPasswordTokenRequest)(nil), "proto.CreateResetPasswordTokenRequest") proto.RegisterType((*PingRequest)(nil), "proto.PingRequest") proto.RegisterType((*PingResponse)(nil), "proto.PingResponse") proto.RegisterEnum("proto.Operation", Operation_name, Operation_value) @@ -1298,7 +1468,8 @@ type AuthServiceClient interface { WatchEvents(ctx context.Context, in *Watch, opts ...grpc.CallOption) (AuthService_WatchEventsClient, error) // UpsertNode upserts node UpsertNode(ctx context.Context, in *services.ServerV2, opts ...grpc.CallOption) (*services.KeepAlive, error) - // GenerateUserCerts generates a set of user certificates for use by `tctl auth sign`. + // GenerateUserCerts generates a set of user certificates for use by `tctl + // auth sign`. GenerateUserCerts(ctx context.Context, in *UserCertsRequest, opts ...grpc.CallOption) (*Certs, error) // GetUser gets a user resource by name. GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*services.UserV2, error) @@ -1320,6 +1491,12 @@ type AuthServiceClient interface { // to mimic the behavior of the proxy's Ping method, and may be used by // clients for verification or configuration on startup. Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) + // RotateResetPasswordTokenSecrets rotates token secrets for a given tokenID. + RotateResetPasswordTokenSecrets(ctx context.Context, in *RotateResetPasswordTokenSecretsRequest, opts ...grpc.CallOption) (*services.ResetPasswordTokenSecretsV3, error) + // GetResetPasswordToken returns a token. + GetResetPasswordToken(ctx context.Context, in *GetResetPasswordTokenRequest, opts ...grpc.CallOption) (*services.ResetPasswordTokenV3, error) + // CreateResetPasswordToken creates ResetPasswordToken. + CreateResetPasswordToken(ctx context.Context, in *CreateResetPasswordTokenRequest, opts ...grpc.CallOption) (*services.ResetPasswordTokenV3, error) } type authServiceClient struct { @@ -1518,6 +1695,33 @@ func (c *authServiceClient) Ping(ctx context.Context, in *PingRequest, opts ...g return out, nil } +func (c *authServiceClient) RotateResetPasswordTokenSecrets(ctx context.Context, in *RotateResetPasswordTokenSecretsRequest, opts ...grpc.CallOption) (*services.ResetPasswordTokenSecretsV3, error) { + out := new(services.ResetPasswordTokenSecretsV3) + err := c.cc.Invoke(ctx, "/proto.AuthService/RotateResetPasswordTokenSecrets", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authServiceClient) GetResetPasswordToken(ctx context.Context, in *GetResetPasswordTokenRequest, opts ...grpc.CallOption) (*services.ResetPasswordTokenV3, error) { + out := new(services.ResetPasswordTokenV3) + err := c.cc.Invoke(ctx, "/proto.AuthService/GetResetPasswordToken", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authServiceClient) CreateResetPasswordToken(ctx context.Context, in *CreateResetPasswordTokenRequest, opts ...grpc.CallOption) (*services.ResetPasswordTokenV3, error) { + out := new(services.ResetPasswordTokenV3) + err := c.cc.Invoke(ctx, "/proto.AuthService/CreateResetPasswordToken", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for AuthService service type AuthServiceServer interface { @@ -1527,7 +1731,8 @@ type AuthServiceServer interface { WatchEvents(*Watch, AuthService_WatchEventsServer) error // UpsertNode upserts node UpsertNode(context.Context, *services.ServerV2) (*services.KeepAlive, error) - // GenerateUserCerts generates a set of user certificates for use by `tctl auth sign`. + // GenerateUserCerts generates a set of user certificates for use by `tctl + // auth sign`. GenerateUserCerts(context.Context, *UserCertsRequest) (*Certs, error) // GetUser gets a user resource by name. GetUser(context.Context, *GetUserRequest) (*services.UserV2, error) @@ -1549,6 +1754,12 @@ type AuthServiceServer interface { // to mimic the behavior of the proxy's Ping method, and may be used by // clients for verification or configuration on startup. Ping(context.Context, *PingRequest) (*PingResponse, error) + // RotateResetPasswordTokenSecrets rotates token secrets for a given tokenID. + RotateResetPasswordTokenSecrets(context.Context, *RotateResetPasswordTokenSecretsRequest) (*services.ResetPasswordTokenSecretsV3, error) + // GetResetPasswordToken returns a token. + GetResetPasswordToken(context.Context, *GetResetPasswordTokenRequest) (*services.ResetPasswordTokenV3, error) + // CreateResetPasswordToken creates ResetPasswordToken. + CreateResetPasswordToken(context.Context, *CreateResetPasswordTokenRequest) (*services.ResetPasswordTokenV3, error) } func RegisterAuthServiceServer(s *grpc.Server, srv AuthServiceServer) { @@ -1803,6 +2014,60 @@ func _AuthService_Ping_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _AuthService_RotateResetPasswordTokenSecrets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RotateResetPasswordTokenSecretsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).RotateResetPasswordTokenSecrets(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/RotateResetPasswordTokenSecrets", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).RotateResetPasswordTokenSecrets(ctx, req.(*RotateResetPasswordTokenSecretsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthService_GetResetPasswordToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetResetPasswordTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).GetResetPasswordToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/GetResetPasswordToken", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).GetResetPasswordToken(ctx, req.(*GetResetPasswordTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthService_CreateResetPasswordToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateResetPasswordTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServiceServer).CreateResetPasswordToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.AuthService/CreateResetPasswordToken", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServiceServer).CreateResetPasswordToken(ctx, req.(*CreateResetPasswordTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _AuthService_serviceDesc = grpc.ServiceDesc{ ServiceName: "proto.AuthService", HandlerType: (*AuthServiceServer)(nil), @@ -1847,6 +2112,18 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{ MethodName: "Ping", Handler: _AuthService_Ping_Handler, }, + { + MethodName: "RotateResetPasswordTokenSecrets", + Handler: _AuthService_RotateResetPasswordTokenSecrets_Handler, + }, + { + MethodName: "GetResetPasswordToken", + Handler: _AuthService_GetResetPasswordToken_Handler, + }, + { + MethodName: "CreateResetPasswordToken", + Handler: _AuthService_CreateResetPasswordToken_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -2470,6 +2747,98 @@ func (m *RequestID) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *RotateResetPasswordTokenSecretsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RotateResetPasswordTokenSecretsRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.TokenID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintAuth(dAtA, i, uint64(len(m.TokenID))) + i += copy(dAtA[i:], m.TokenID) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *GetResetPasswordTokenRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetResetPasswordTokenRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.TokenID) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintAuth(dAtA, i, uint64(len(m.TokenID))) + i += copy(dAtA[i:], m.TokenID) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *CreateResetPasswordTokenRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateResetPasswordTokenRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintAuth(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + } + if len(m.Type) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintAuth(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + } + if m.TTL != 0 { + dAtA[i] = 0x18 + i++ + i = encodeVarintAuth(dAtA, i, uint64(m.TTL)) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + func (m *PingRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2845,6 +3214,52 @@ func (m *RequestID) Size() (n int) { return n } +func (m *RotateResetPasswordTokenSecretsRequest) Size() (n int) { + var l int + _ = l + l = len(m.TokenID) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *GetResetPasswordTokenRequest) Size() (n int) { + var l int + _ = l + l = len(m.TokenID) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *CreateResetPasswordTokenRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + l = len(m.Type) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + if m.TTL != 0 { + n += 1 + sovAuth(uint64(m.TTL)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *PingRequest) Size() (n int) { var l int _ = l @@ -4554,6 +4969,294 @@ func (m *RequestID) Unmarshal(dAtA []byte) error { } return nil } +func (m *RotateResetPasswordTokenSecretsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RotateResetPasswordTokenSecretsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RotateResetPasswordTokenSecretsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuth(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAuth + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetResetPasswordTokenRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetResetPasswordTokenRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetResetPasswordTokenRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuth(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAuth + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CreateResetPasswordTokenRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateResetPasswordTokenRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateResetPasswordTokenRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) + } + m.TTL = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TTL |= (Duration(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipAuth(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAuth + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PingRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -4819,104 +5522,114 @@ var ( ErrIntOverflowAuth = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("auth.proto", fileDescriptor_auth_a21c5411562892bf) } +func init() { proto.RegisterFile("auth.proto", fileDescriptor_auth_9f0fdb27f50b4af3) } -var fileDescriptor_auth_a21c5411562892bf = []byte{ - // 1536 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x56, 0x4f, 0x6f, 0xdb, 0xca, - 0x11, 0x0f, 0x6d, 0x4b, 0xb1, 0x46, 0xb6, 0xa2, 0xac, 0xfd, 0x6c, 0x46, 0x49, 0x4c, 0x43, 0xef, - 0x62, 0xbc, 0x06, 0xd2, 0x83, 0x82, 0xb6, 0x69, 0x50, 0x20, 0x08, 0x6d, 0x25, 0xf6, 0x8b, 0x91, - 0xba, 0x94, 0xac, 0x14, 0xed, 0x41, 0xa0, 0xa5, 0x89, 0x4c, 0x98, 0x22, 0xf9, 0xb8, 0x2b, 0xb5, - 0x06, 0x7a, 0xea, 0x27, 0xe8, 0xb1, 0x9f, 0xa6, 0xbd, 0xe6, 0xd8, 0x4f, 0xc0, 0xb6, 0xe9, 0x8d, - 0x9f, 0xa1, 0x87, 0x62, 0xff, 0x50, 0xe2, 0xd2, 0xd6, 0x3b, 0x91, 0xfb, 0x9b, 0x99, 0xdf, 0xec, - 0xce, 0xce, 0x9f, 0x05, 0x70, 0x67, 0xec, 0xba, 0x15, 0xc5, 0x21, 0x0b, 0x49, 0x49, 0x7c, 0x1a, - 0xbb, 0x93, 0x70, 0x12, 0x8a, 0xdf, 0x36, 0xff, 0x93, 0xc2, 0xc6, 0xd3, 0x49, 0x18, 0x4e, 0x7c, - 0x6c, 0x8b, 0xd5, 0xd5, 0xec, 0x73, 0x1b, 0xa7, 0x11, 0xbb, 0x55, 0x42, 0xab, 0x28, 0x64, 0xde, - 0x14, 0x29, 0x73, 0xa7, 0x91, 0x52, 0x78, 0x3d, 0xf1, 0xd8, 0xf5, 0xec, 0xaa, 0x35, 0x0a, 0xa7, - 0xed, 0x49, 0xec, 0xce, 0x3d, 0xe6, 0x32, 0x2f, 0x0c, 0x5c, 0xbf, 0xcd, 0xd0, 0xc7, 0x28, 0x8c, - 0x59, 0xdb, 0xf7, 0xae, 0xda, 0x14, 0xe3, 0xb9, 0x37, 0x42, 0xda, 0x66, 0xb7, 0x11, 0x52, 0x69, - 0xdb, 0xfc, 0x47, 0x05, 0x4a, 0xdd, 0x39, 0x06, 0x8c, 0xbc, 0x82, 0x8d, 0xfe, 0x6d, 0x84, 0xa6, - 0x71, 0x68, 0x1c, 0xd5, 0x3a, 0x75, 0x29, 0x6f, 0xfd, 0x26, 0xc2, 0x58, 0xb0, 0xd9, 0x24, 0x4d, - 0xac, 0x1a, 0x37, 0x7d, 0x11, 0x4e, 0x3d, 0x26, 0x36, 0xe8, 0x08, 0x0b, 0xf2, 0x7b, 0xa8, 0x39, - 0x48, 0xc3, 0x59, 0x3c, 0xc2, 0x53, 0x74, 0xc7, 0x18, 0x9b, 0x6b, 0x87, 0xc6, 0x51, 0xb5, 0x63, - 0xb6, 0x32, 0x97, 0x2d, 0x5d, 0x6e, 0xef, 0xa5, 0x89, 0x45, 0x62, 0x85, 0x2d, 0xf9, 0x4e, 0x1f, - 0x38, 0x05, 0x26, 0x32, 0x84, 0xed, 0x63, 0x8c, 0xd9, 0xdb, 0x19, 0xbb, 0x0e, 0x63, 0x8f, 0xdd, - 0x9a, 0xeb, 0x82, 0xfa, 0xc9, 0x92, 0x5a, 0x13, 0x0f, 0x3a, 0xf6, 0xb3, 0x34, 0xb1, 0xcc, 0x11, - 0xc6, 0x6c, 0xe8, 0x66, 0xa8, 0xe6, 0x41, 0xe7, 0x23, 0x7f, 0x80, 0xad, 0x1e, 0x8f, 0xd7, 0xa8, - 0x1f, 0xde, 0x60, 0x40, 0xcd, 0x8d, 0xe2, 0xd6, 0xf3, 0xd2, 0x41, 0xc7, 0x7e, 0x9a, 0x26, 0xd6, - 0x3e, 0x15, 0xd8, 0x90, 0x09, 0x50, 0x63, 0xd7, 0xc8, 0xc8, 0x08, 0x6a, 0x17, 0x71, 0x38, 0xf7, - 0xa8, 0x17, 0x06, 0x02, 0x32, 0x4b, 0x82, 0xbe, 0xb1, 0xa4, 0xd7, 0xe5, 0x83, 0x8e, 0xfd, 0x3c, - 0x4d, 0xac, 0x27, 0x51, 0x86, 0x4a, 0x1f, 0x7a, 0x88, 0x74, 0x13, 0xf2, 0x09, 0xaa, 0xc7, 0xfe, - 0x8c, 0x32, 0x8c, 0x3f, 0xba, 0x53, 0x34, 0xcb, 0xc2, 0xc3, 0x7e, 0x2e, 0x40, 0x4b, 0xe1, 0xa0, - 0x63, 0x37, 0xd2, 0xc4, 0xda, 0x1b, 0x49, 0x68, 0x18, 0xb8, 0x53, 0x3d, 0xfc, 0x79, 0x26, 0x11, - 0x7b, 0xb9, 0x3c, 0x0e, 0x83, 0xcf, 0xde, 0xc4, 0x7c, 0x78, 0x27, 0xf6, 0x79, 0xf1, 0xe0, 0xa5, - 0x8a, 0xbd, 0x22, 0x1f, 0x09, 0xb4, 0x10, 0xfb, 0xbc, 0x01, 0x79, 0x0d, 0x1b, 0x97, 0x14, 0x63, - 0x73, 0x53, 0xf0, 0xd6, 0x97, 0xbc, 0x1c, 0x1d, 0x74, 0x64, 0xca, 0xcd, 0x28, 0xc6, 0x1a, 0x89, - 0xb0, 0xe1, 0xb6, 0x4e, 0xe8, 0xa3, 0x59, 0x29, 0xda, 0x72, 0x74, 0xf0, 0x52, 0xda, 0xc6, 0xa1, - 0xaf, 0x9f, 0x4f, 0xd8, 0x90, 0x73, 0xa8, 0xf0, 0x03, 0xd2, 0xc8, 0x1d, 0xa1, 0x09, 0x82, 0x60, - 0x67, 0x49, 0xb0, 0x10, 0xd9, 0xfb, 0x69, 0x62, 0xed, 0x04, 0xd9, 0x52, 0x23, 0x5a, 0x12, 0x10, - 0x1b, 0xca, 0x3d, 0x8c, 0xe7, 0x18, 0x9b, 0x55, 0x41, 0x45, 0x72, 0xb9, 0x23, 0xf0, 0x41, 0xc7, - 0xde, 0x4d, 0x13, 0xab, 0x4e, 0xc5, 0x4a, 0xa3, 0x51, 0x96, 0x3c, 0xd4, 0x0e, 0xce, 0x31, 0xa6, - 0xd8, 0x9f, 0x05, 0x01, 0xfa, 0xe6, 0x56, 0x31, 0xd4, 0x9a, 0x38, 0x4b, 0xf3, 0x58, 0x82, 0x43, - 0x26, 0x50, 0x3d, 0xd4, 0x9a, 0x01, 0xb9, 0x81, 0xba, 0xfc, 0x3b, 0x0e, 0x83, 0x00, 0x47, 0xbc, - 0xa2, 0xcd, 0x6d, 0xe1, 0xe3, 0xd9, 0xd2, 0x47, 0x51, 0x63, 0xd0, 0xb1, 0xad, 0x34, 0xb1, 0x9e, - 0x4a, 0x7a, 0x7e, 0xa1, 0x4a, 0xa0, 0x79, 0xba, 0x43, 0xcc, 0x4f, 0xf3, 0x76, 0x34, 0x42, 0x4a, - 0x1d, 0xfc, 0x71, 0x86, 0x94, 0x99, 0xb5, 0xe2, 0x69, 0x34, 0x71, 0x96, 0x38, 0xae, 0x00, 0x87, - 0xb1, 0x44, 0xf5, 0xd3, 0x68, 0x06, 0x36, 0xc0, 0x66, 0xd6, 0x27, 0x9a, 0xa7, 0x50, 0xfa, 0xe4, - 0xb2, 0xd1, 0x35, 0x79, 0x03, 0xa5, 0x0f, 0x5e, 0x30, 0xa6, 0xa6, 0x71, 0xb8, 0x2e, 0x52, 0x42, - 0x76, 0x30, 0x21, 0xe4, 0x02, 0x7b, 0xff, 0x4b, 0x62, 0x3d, 0x48, 0x13, 0xeb, 0xd1, 0x0d, 0x57, - 0xcb, 0xb5, 0x31, 0x69, 0xd7, 0xfc, 0xcb, 0x1a, 0x54, 0x16, 0xda, 0xe4, 0x19, 0x6c, 0xf0, 0xaf, - 0xe8, 0x87, 0x15, 0x7b, 0x33, 0x4d, 0xac, 0x0d, 0x6e, 0xe7, 0x08, 0x94, 0x74, 0xa0, 0x7a, 0x1e, - 0xba, 0xe3, 0x1e, 0x8e, 0x62, 0x64, 0x54, 0x34, 0xbc, 0x4d, 0xbb, 0x9e, 0x26, 0xd6, 0x96, 0x1f, - 0xba, 0xe3, 0x21, 0x95, 0xb8, 0x93, 0x57, 0xe2, 0x8c, 0xa2, 0x42, 0xd7, 0x97, 0x8c, 0x3c, 0xb9, - 0x1c, 0x81, 0x92, 0x1f, 0xa0, 0xfc, 0xce, 0xf3, 0x19, 0xc6, 0xe6, 0x86, 0xd8, 0xff, 0xb3, 0xe2, - 0xfe, 0x5b, 0x52, 0xdc, 0x0d, 0x58, 0x7c, 0x2b, 0x13, 0xea, 0xb3, 0x00, 0x72, 0x07, 0x51, 0x0c, - 0x8d, 0x5f, 0x41, 0x35, 0xa7, 0x4c, 0xea, 0xb0, 0x7e, 0x83, 0xb7, 0xf2, 0x24, 0x0e, 0xff, 0x25, - 0xbb, 0x50, 0x9a, 0xbb, 0xfe, 0x0c, 0xc5, 0xc6, 0x2b, 0x8e, 0x5c, 0xbc, 0x5e, 0x7b, 0x65, 0x34, - 0x7f, 0x0b, 0x25, 0xde, 0x20, 0x29, 0xf9, 0x16, 0xd6, 0x7b, 0xbd, 0x53, 0x61, 0xb4, 0x65, 0x3f, - 0x4e, 0x13, 0x6b, 0x9b, 0xd2, 0xeb, 0x9c, 0x2f, 0x2e, 0xe5, 0x4a, 0xfd, 0xf3, 0x9e, 0x60, 0x51, - 0x4a, 0xcc, 0xcf, 0x47, 0x96, 0x4b, 0x9b, 0xff, 0x5b, 0x83, 0x3a, 0xaf, 0x59, 0xc1, 0xab, 0xae, - 0x90, 0xbc, 0x80, 0xca, 0xc5, 0xec, 0xca, 0xf7, 0x46, 0x1f, 0xd4, 0xce, 0xb6, 0xec, 0x5a, 0x9a, - 0x58, 0x10, 0x09, 0x70, 0x78, 0x83, 0xb7, 0xce, 0x52, 0x81, 0x1c, 0xc1, 0x26, 0x67, 0xe0, 0xe1, - 0x92, 0x5b, 0xb6, 0xb7, 0xd2, 0xc4, 0xda, 0x9c, 0x29, 0xcc, 0x59, 0x48, 0x49, 0x0f, 0x1e, 0x76, - 0xff, 0x14, 0x79, 0x31, 0x52, 0x35, 0x2a, 0x1a, 0x2d, 0x39, 0x3f, 0x5b, 0xd9, 0xfc, 0x6c, 0xf5, - 0xb3, 0xf9, 0x69, 0x3f, 0x57, 0x19, 0xf1, 0x18, 0xa5, 0xc9, 0x72, 0xe7, 0x7f, 0xfd, 0x97, 0x65, - 0x38, 0x19, 0x13, 0x79, 0x01, 0xe5, 0x77, 0x61, 0x3c, 0x75, 0x99, 0x18, 0x0f, 0x15, 0x15, 0x7d, - 0x81, 0x68, 0xd1, 0x17, 0x08, 0x79, 0x07, 0x35, 0x27, 0x9c, 0x31, 0xec, 0x87, 0xaa, 0xdd, 0x89, - 0xae, 0x5f, 0xb1, 0x0f, 0xd2, 0xc4, 0x6a, 0xc4, 0x5c, 0x32, 0x64, 0xe1, 0x50, 0xb5, 0xc9, 0x9c, - 0x7d, 0xc1, 0x8a, 0x74, 0xa1, 0xa6, 0xa5, 0x3d, 0x35, 0xcb, 0x87, 0xeb, 0x47, 0x15, 0x39, 0x21, - 0xf4, 0x62, 0xc9, 0xc7, 0xbc, 0x60, 0xd4, 0xf4, 0xa1, 0xf6, 0x1e, 0x19, 0x0f, 0x50, 0x16, 0xfb, - 0x2c, 0x11, 0x8d, 0x7b, 0x13, 0xf1, 0xd7, 0x50, 0xfd, 0xe4, 0xb1, 0x6b, 0x3d, 0xb5, 0xc5, 0xd8, - 0xf8, 0xa3, 0xc7, 0xae, 0xb3, 0xd4, 0xce, 0x39, 0xcc, 0xab, 0x37, 0xbb, 0xf0, 0x48, 0x79, 0x5b, - 0x5c, 0x75, 0x47, 0x27, 0x34, 0x96, 0xb5, 0x92, 0x27, 0xd4, 0x69, 0xae, 0x8b, 0x67, 0x27, 0x83, - 0x3b, 0xd1, 0x90, 0x75, 0xfe, 0x13, 0x5d, 0x65, 0x87, 0x17, 0x7b, 0x21, 0x50, 0x77, 0xc2, 0xf3, - 0x3b, 0xd8, 0xbe, 0xf0, 0x67, 0x13, 0x2f, 0x38, 0x71, 0x99, 0xdb, 0xc3, 0x1f, 0xc9, 0x7b, 0x80, - 0x25, 0xa0, 0x9c, 0xec, 0xe5, 0x06, 0xf6, 0x42, 0x36, 0x78, 0x69, 0x3f, 0x4a, 0x13, 0xab, 0x1a, - 0x09, 0x64, 0x38, 0x76, 0x99, 0xeb, 0xe4, 0x4c, 0x9b, 0x08, 0x44, 0x79, 0xe1, 0x8f, 0x02, 0xec, - 0x21, 0xe3, 0xb7, 0xba, 0x07, 0x6b, 0x67, 0x27, 0x2a, 0xf4, 0xe5, 0x34, 0xb1, 0xd6, 0xbc, 0xb1, - 0xb3, 0x76, 0x76, 0x42, 0x7e, 0x09, 0x25, 0xa1, 0x26, 0x02, 0x5e, 0xcb, 0x7b, 0xcc, 0x93, 0xd8, - 0x95, 0x34, 0xb1, 0x4a, 0xfc, 0xfd, 0x81, 0x8e, 0xd4, 0x6f, 0x7e, 0x0b, 0x15, 0xa5, 0x71, 0x76, - 0xb2, 0x8a, 0xbd, 0xb9, 0x0d, 0xd5, 0x0b, 0x2f, 0x98, 0x28, 0xc5, 0xe6, 0x9f, 0x61, 0x4b, 0x2e, - 0x69, 0x14, 0x06, 0x14, 0xf9, 0x15, 0xe5, 0xdf, 0x10, 0xd2, 0x5e, 0x5c, 0x51, 0xfe, 0xa9, 0xa0, - 0x3f, 0x0f, 0x5e, 0xc1, 0xb6, 0x9a, 0x6f, 0x18, 0xf3, 0xd7, 0x88, 0x2a, 0x4c, 0x31, 0x78, 0xe5, - 0xa8, 0x1b, 0xce, 0xa5, 0xc4, 0xd1, 0x15, 0xbf, 0xfb, 0x0e, 0x2a, 0x8b, 0x77, 0x25, 0xd9, 0x84, - 0x8d, 0xb3, 0x8f, 0x67, 0xfd, 0xfa, 0x03, 0xf2, 0x10, 0xd6, 0x2f, 0x2e, 0xfb, 0x75, 0x83, 0x00, - 0x94, 0x4f, 0xba, 0xe7, 0xdd, 0x7e, 0xb7, 0xbe, 0xd6, 0xf9, 0x7b, 0x19, 0xaa, 0xfc, 0xb5, 0xd6, - 0x93, 0xd1, 0x20, 0x6f, 0xa0, 0xd6, 0xc3, 0x60, 0xfc, 0x01, 0x31, 0x7a, 0xeb, 0x7b, 0x73, 0xa4, - 0x24, 0x37, 0xba, 0x17, 0x68, 0x63, 0xef, 0x4e, 0xd5, 0x77, 0x79, 0xae, 0x1e, 0x19, 0xe4, 0x67, - 0x50, 0x15, 0x2d, 0x55, 0xbc, 0x7a, 0x29, 0xd9, 0xca, 0xb7, 0xd9, 0x46, 0xb6, 0x12, 0xc2, 0xef, - 0x0d, 0xf2, 0x73, 0x80, 0xcb, 0x88, 0x62, 0xcc, 0x3e, 0x86, 0x63, 0x24, 0xf7, 0x4c, 0xf6, 0xc6, - 0x7d, 0xde, 0xc9, 0x6b, 0x78, 0xfc, 0x1e, 0x03, 0x7e, 0x42, 0x5c, 0x34, 0x3e, 0xb2, 0xaf, 0xb8, - 0x8b, 0xad, 0x70, 0xe1, 0x54, 0xaa, 0x75, 0xe0, 0xa1, 0x2a, 0x20, 0xf2, 0x8d, 0x12, 0xe8, 0xe5, - 0xdb, 0xb8, 0xf3, 0x50, 0x22, 0xbf, 0x80, 0xcd, 0xac, 0xe8, 0xc8, 0x9e, 0x6e, 0x44, 0x57, 0x5a, - 0x7d, 0x6f, 0x90, 0x33, 0xbe, 0x4f, 0x56, 0x28, 0xb4, 0xe7, 0x2b, 0x0a, 0x4a, 0xcd, 0x96, 0x6c, - 0x53, 0x05, 0xab, 0x53, 0xd8, 0x39, 0x8e, 0xd1, 0x65, 0xa8, 0xe1, 0x64, 0x75, 0x75, 0xae, 0xba, - 0x22, 0xf2, 0x06, 0x76, 0x4e, 0xd0, 0xc7, 0x22, 0x53, 0x36, 0xcf, 0x17, 0xb9, 0xbe, 0x92, 0xe0, - 0x07, 0xf8, 0xa6, 0x57, 0x38, 0x95, 0xa8, 0x14, 0xf2, 0x44, 0xa7, 0xc8, 0x55, 0xe5, 0x4a, 0xae, - 0xb7, 0xb0, 0xfd, 0x1e, 0xd9, 0xb2, 0xa8, 0x49, 0xe3, 0xbe, 0x4e, 0xa0, 0x42, 0xb3, 0xab, 0xf8, - 0xf5, 0x7e, 0x72, 0x0e, 0xf5, 0xcb, 0x68, 0xec, 0x32, 0xcc, 0xb1, 0x1c, 0xde, 0xc7, 0xa2, 0xb4, - 0xdc, 0xd8, 0x9d, 0xd2, 0x95, 0x1b, 0x6a, 0xc3, 0x06, 0xaf, 0x5c, 0x42, 0x32, 0x5f, 0xcb, 0xaa, - 0x6e, 0xec, 0x68, 0x98, 0x2c, 0x6d, 0x7b, 0xf7, 0xcb, 0x7f, 0x0e, 0x8c, 0x2f, 0x5f, 0x0f, 0x8c, - 0x7f, 0x7e, 0x3d, 0x30, 0xfe, 0xfd, 0xf5, 0xc0, 0xf8, 0xdb, 0x7f, 0x0f, 0x1e, 0x5c, 0x95, 0x85, - 0xe6, 0xcb, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x91, 0x3f, 0x90, 0x81, 0xa3, 0x0e, 0x00, 0x00, +var fileDescriptor_auth_9f0fdb27f50b4af3 = []byte{ + // 1693 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0x51, 0x6f, 0xdb, 0xc8, + 0x11, 0x8e, 0x24, 0xcb, 0x91, 0x46, 0xb6, 0xa2, 0xac, 0x1d, 0x9b, 0x51, 0x1c, 0xd3, 0x50, 0x70, + 0x07, 0xe3, 0x9a, 0x4a, 0x07, 0x19, 0x6d, 0xd3, 0xa0, 0x40, 0x10, 0xda, 0x8a, 0xed, 0x8b, 0x9b, + 0xba, 0x94, 0xa2, 0x14, 0x6d, 0x01, 0x81, 0x96, 0x26, 0x32, 0x61, 0x8a, 0xd4, 0x71, 0x57, 0x4a, + 0x0d, 0xf4, 0xa9, 0xe8, 0x0f, 0xe8, 0x63, 0xff, 0x4d, 0x5f, 0xf3, 0xd8, 0x5f, 0xc0, 0xb6, 0xe9, + 0x1b, 0xff, 0x41, 0x8b, 0x3e, 0x14, 0xbb, 0x5c, 0x8a, 0x5c, 0xda, 0xca, 0xdd, 0x3d, 0x89, 0xfc, + 0x66, 0xe6, 0x9b, 0xdd, 0xe1, 0xec, 0xb7, 0x23, 0x00, 0x6b, 0xc6, 0x2e, 0x9b, 0x53, 0xdf, 0x63, + 0x1e, 0x29, 0x8a, 0x9f, 0xfa, 0xf3, 0xb1, 0xcd, 0x2e, 0x67, 0x17, 0xcd, 0xa1, 0x37, 0x69, 0x8d, + 0x7d, 0x6b, 0x6e, 0x33, 0x8b, 0xd9, 0x9e, 0x6b, 0x39, 0x2d, 0x86, 0x0e, 0x4e, 0x3d, 0x9f, 0xb5, + 0x1c, 0xfb, 0xa2, 0x45, 0xd1, 0x9f, 0xdb, 0x43, 0xa4, 0x2d, 0x76, 0x3d, 0x45, 0x1a, 0x51, 0xd4, + 0x37, 0xc7, 0xde, 0xd8, 0x13, 0x8f, 0x2d, 0xfe, 0x24, 0xd1, 0x47, 0x63, 0xcf, 0x1b, 0x3b, 0xd8, + 0x12, 0x6f, 0x17, 0xb3, 0xf7, 0x2d, 0x9c, 0x4c, 0xd9, 0xb5, 0x34, 0xea, 0x59, 0x23, 0xb3, 0x27, + 0x48, 0x99, 0x35, 0x99, 0x46, 0x0e, 0x8d, 0xbf, 0x95, 0xa1, 0xd8, 0x99, 0xa3, 0xcb, 0xc8, 0x33, + 0x58, 0xe9, 0x5d, 0x4f, 0x51, 0xcb, 0xed, 0xe5, 0xf6, 0xab, 0xed, 0x5a, 0x64, 0x6f, 0xfe, 0x6a, + 0x8a, 0xbe, 0x58, 0xa1, 0x41, 0xc2, 0x40, 0xaf, 0xf2, 0xe5, 0x3c, 0xf5, 0x26, 0x36, 0x13, 0x49, + 0x4c, 0x11, 0x41, 0x7e, 0x0b, 0x55, 0x13, 0xa9, 0x37, 0xf3, 0x87, 0x78, 0x82, 0xd6, 0x08, 0x7d, + 0x2d, 0xbf, 0x97, 0xdb, 0xaf, 0xb4, 0xb5, 0x66, 0xbc, 0x8d, 0xa6, 0x6a, 0x37, 0xb6, 0xc2, 0x40, + 0x27, 0xbe, 0xc4, 0x12, 0xbe, 0x93, 0x3b, 0x66, 0x86, 0x89, 0x0c, 0x60, 0xfd, 0x10, 0x7d, 0xf6, + 0x72, 0xc6, 0x2e, 0x3d, 0xdf, 0x66, 0xd7, 0x5a, 0x41, 0x50, 0x3f, 0x4c, 0xa8, 0x15, 0x73, 0xbf, + 0x6d, 0xec, 0x84, 0x81, 0xae, 0x0d, 0xd1, 0x67, 0x03, 0x2b, 0x46, 0x95, 0x0c, 0x2a, 0x1f, 0xf9, + 0x1d, 0xac, 0x75, 0xf9, 0x37, 0x18, 0xf6, 0xbc, 0x2b, 0x74, 0xa9, 0xb6, 0x92, 0x5d, 0x7a, 0xda, + 0xda, 0x6f, 0x1b, 0x8f, 0xc2, 0x40, 0xdf, 0xa6, 0x02, 0x1b, 0x30, 0x01, 0x2a, 0xec, 0x0a, 0x19, + 0x19, 0x42, 0xf5, 0xdc, 0xf7, 0xe6, 0x36, 0xb5, 0x3d, 0x57, 0x40, 0x5a, 0x51, 0xd0, 0xd7, 0x13, + 0x7a, 0xd5, 0xde, 0x6f, 0x1b, 0x8f, 0xc3, 0x40, 0x7f, 0x38, 0x8d, 0xd1, 0x28, 0x87, 0x5a, 0x22, + 0x35, 0x84, 0xbc, 0x83, 0xca, 0xa1, 0x33, 0xa3, 0x0c, 0xfd, 0x37, 0xd6, 0x04, 0xb5, 0x55, 0x91, + 0x61, 0x3b, 0x55, 0xa0, 0xc4, 0xd8, 0x6f, 0x1b, 0xf5, 0x30, 0xd0, 0xb7, 0x86, 0x11, 0x34, 0x70, + 0xad, 0x89, 0x5a, 0xfe, 0x34, 0x93, 0xa8, 0x7d, 0xf4, 0x7a, 0xe8, 0xb9, 0xef, 0xed, 0xb1, 0x76, + 0xf7, 0x46, 0xed, 0xd3, 0xe6, 0xfe, 0x81, 0xac, 0xbd, 0x24, 0x1f, 0x0a, 0x34, 0x53, 0xfb, 0x74, + 0x00, 0x79, 0x0e, 0x2b, 0x6f, 0x29, 0xfa, 0x5a, 0x49, 0xf0, 0xd6, 0x12, 0x5e, 0x8e, 0xf6, 0xdb, + 0x51, 0xcb, 0xcd, 0x28, 0xfa, 0x0a, 0x89, 0x88, 0xe1, 0xb1, 0xa6, 0xe7, 0xa0, 0x56, 0xce, 0xc6, + 0x72, 0xb4, 0x7f, 0x10, 0xc5, 0xfa, 0x9e, 0xa3, 0xee, 0x4f, 0xc4, 0x90, 0x33, 0x28, 0xf3, 0x0d, + 0xd2, 0xa9, 0x35, 0x44, 0x0d, 0x04, 0xc1, 0x46, 0x42, 0xb0, 0x30, 0x19, 0xdb, 0x61, 0xa0, 0x6f, + 0xb8, 0xf1, 0xab, 0x42, 0x94, 0x10, 0x10, 0x03, 0x56, 0xbb, 0xe8, 0xcf, 0xd1, 0xd7, 0x2a, 0x82, + 0x8a, 0xa4, 0x7a, 0x47, 0xe0, 0xfd, 0xb6, 0xb1, 0x19, 0x06, 0x7a, 0x8d, 0x8a, 0x37, 0x85, 0x46, + 0x46, 0xf2, 0x52, 0x9b, 0x38, 0x47, 0x9f, 0x62, 0x6f, 0xe6, 0xba, 0xe8, 0x68, 0x6b, 0xd9, 0x52, + 0x2b, 0xe6, 0xb8, 0xcd, 0xfd, 0x08, 0x1c, 0x30, 0x81, 0xaa, 0xa5, 0x56, 0x02, 0xc8, 0x15, 0xd4, + 0xa2, 0xa7, 0x43, 0xcf, 0x75, 0x71, 0xc8, 0x4f, 0xb4, 0xb6, 0x2e, 0x72, 0xec, 0x24, 0x39, 0xb2, + 0x1e, 0xfd, 0xb6, 0xa1, 0x87, 0x81, 0xfe, 0x28, 0xa2, 0xe7, 0x1f, 0x54, 0x1a, 0x94, 0x4c, 0x37, + 0x88, 0xf9, 0x6e, 0x5e, 0x0e, 0x87, 0x48, 0xa9, 0x89, 0xdf, 0xce, 0x90, 0x32, 0xad, 0x9a, 0xdd, + 0x8d, 0x62, 0x8e, 0x1b, 0xc7, 0x12, 0xe0, 0xc0, 0x8f, 0x50, 0x75, 0x37, 0x4a, 0x80, 0x01, 0x50, + 0x8a, 0x75, 0xa2, 0x71, 0x02, 0xc5, 0x77, 0x16, 0x1b, 0x5e, 0x92, 0x17, 0x50, 0x7c, 0x6d, 0xbb, + 0x23, 0xaa, 0xe5, 0xf6, 0x0a, 0xa2, 0x25, 0x22, 0x05, 0x13, 0x46, 0x6e, 0x30, 0xb6, 0x3f, 0x06, + 0xfa, 0x9d, 0x30, 0xd0, 0xef, 0x5d, 0x71, 0xb7, 0x94, 0x8c, 0x45, 0x71, 0x8d, 0x3f, 0xe5, 0xa1, + 0xbc, 0xf0, 0x26, 0x3b, 0xb0, 0xc2, 0x7f, 0x85, 0x1e, 0x96, 0x8d, 0x52, 0x18, 0xe8, 0x2b, 0x3c, + 0xce, 0x14, 0x28, 0x69, 0x43, 0xe5, 0xcc, 0xb3, 0x46, 0x5d, 0x1c, 0xfa, 0xc8, 0xa8, 0x10, 0xbc, + 0x92, 0x51, 0x0b, 0x03, 0x7d, 0xcd, 0xf1, 0xac, 0xd1, 0x80, 0x46, 0xb8, 0x99, 0x76, 0xe2, 0x8c, + 0xe2, 0x84, 0x16, 0x12, 0x46, 0xde, 0x5c, 0xa6, 0x40, 0xc9, 0x37, 0xb0, 0xfa, 0xca, 0x76, 0x18, + 0xfa, 0xda, 0x8a, 0x58, 0xff, 0x4e, 0x76, 0xfd, 0xcd, 0xc8, 0xdc, 0x71, 0x99, 0x7f, 0x1d, 0x35, + 0xd4, 0x7b, 0x01, 0xa4, 0x36, 0x22, 0x19, 0xea, 0x3f, 0x87, 0x4a, 0xca, 0x99, 0xd4, 0xa0, 0x70, + 0x85, 0xd7, 0xd1, 0x4e, 0x4c, 0xfe, 0x48, 0x36, 0xa1, 0x38, 0xb7, 0x9c, 0x19, 0x8a, 0x85, 0x97, + 0xcd, 0xe8, 0xe5, 0x79, 0xfe, 0x59, 0xae, 0xf1, 0x6b, 0x28, 0x72, 0x81, 0xa4, 0xe4, 0x09, 0x14, + 0xba, 0xdd, 0x13, 0x11, 0xb4, 0x66, 0xdc, 0x0f, 0x03, 0x7d, 0x9d, 0xd2, 0xcb, 0x54, 0x2e, 0x6e, + 0xe5, 0x4e, 0xbd, 0xb3, 0xae, 0x60, 0x91, 0x4e, 0xcc, 0x49, 0x57, 0x96, 0x5b, 0x1b, 0xff, 0xcb, + 0x43, 0x8d, 0x9f, 0x59, 0xc1, 0x2b, 0x3f, 0x21, 0x79, 0x0a, 0xe5, 0xf3, 0xd9, 0x85, 0x63, 0x0f, + 0x5f, 0xcb, 0x95, 0xad, 0x19, 0xd5, 0x30, 0xd0, 0x61, 0x2a, 0xc0, 0xc1, 0x15, 0x5e, 0x9b, 0x89, + 0x03, 0xd9, 0x87, 0x12, 0x67, 0xe0, 0xe5, 0x8a, 0x96, 0x6c, 0xac, 0x85, 0x81, 0x5e, 0x9a, 0x49, + 0xcc, 0x5c, 0x58, 0x49, 0x17, 0xee, 0x76, 0xfe, 0x30, 0xb5, 0x7d, 0xa4, 0xf2, 0xaa, 0xa8, 0x37, + 0xa3, 0x3b, 0xb0, 0x19, 0xdf, 0x81, 0xcd, 0x5e, 0x7c, 0x07, 0x1a, 0x8f, 0x65, 0x47, 0xdc, 0xc7, + 0x28, 0x24, 0x59, 0xf9, 0x5f, 0xfe, 0xa1, 0xe7, 0xcc, 0x98, 0x89, 0x3c, 0x85, 0xd5, 0x57, 0x9e, + 0x3f, 0xb1, 0x98, 0xb8, 0x1e, 0xca, 0xb2, 0xfa, 0x02, 0x51, 0xaa, 0x2f, 0x10, 0xf2, 0x0a, 0xaa, + 0xa6, 0x37, 0x63, 0xd8, 0xf3, 0xa4, 0xdc, 0x09, 0xd5, 0x2f, 0x1b, 0xbb, 0x61, 0xa0, 0xd7, 0x7d, + 0x6e, 0x19, 0x30, 0x6f, 0x20, 0x65, 0x32, 0x15, 0x9f, 0x89, 0x22, 0x1d, 0xa8, 0x2a, 0x6d, 0x4f, + 0xb5, 0xd5, 0xbd, 0xc2, 0x7e, 0x39, 0xba, 0x21, 0xd4, 0xc3, 0x92, 0xae, 0x79, 0x26, 0xa8, 0xe1, + 0x40, 0xf5, 0x18, 0x19, 0x2f, 0x50, 0x5c, 0xfb, 0xb8, 0x11, 0x73, 0xb7, 0x36, 0xe2, 0x2f, 0xa0, + 0xf2, 0xce, 0x66, 0x97, 0x6a, 0x6b, 0x8b, 0x6b, 0xe3, 0x83, 0xcd, 0x2e, 0xe3, 0xd6, 0x4e, 0x25, + 0x4c, 0xbb, 0x37, 0x3a, 0x70, 0x4f, 0x66, 0x5b, 0x7c, 0xea, 0xb6, 0x4a, 0x98, 0x4b, 0xce, 0x4a, + 0x9a, 0x50, 0xa5, 0xb9, 0xcc, 0xee, 0x9d, 0xf4, 0x6f, 0x54, 0x23, 0x3a, 0xe7, 0x9f, 0x51, 0x95, + 0x0d, 0x7e, 0xd8, 0x33, 0x85, 0xba, 0x51, 0x9e, 0xdf, 0xc0, 0xfa, 0xb9, 0x33, 0x1b, 0xdb, 0xee, + 0x91, 0xc5, 0xac, 0x2e, 0x7e, 0x4b, 0x8e, 0x01, 0x12, 0x40, 0x26, 0xd9, 0x4a, 0x5d, 0xd8, 0x0b, + 0x5b, 0xff, 0xc0, 0xb8, 0x17, 0x06, 0x7a, 0x65, 0x2a, 0x90, 0xc1, 0xc8, 0x62, 0x96, 0x99, 0x0a, + 0x6d, 0x20, 0x10, 0x99, 0x85, 0x0f, 0x05, 0xd8, 0x45, 0xc6, 0xbf, 0xea, 0x16, 0xe4, 0x4f, 0x8f, + 0x64, 0xe9, 0x57, 0xc3, 0x40, 0xcf, 0xdb, 0x23, 0x33, 0x7f, 0x7a, 0x44, 0x7e, 0x06, 0x45, 0xe1, + 0x26, 0x0a, 0x5e, 0x4d, 0x67, 0x4c, 0x93, 0x18, 0xe5, 0x30, 0xd0, 0x8b, 0x7c, 0xfe, 0x40, 0x33, + 0xf2, 0x6f, 0x3c, 0x81, 0xb2, 0xf4, 0x38, 0x3d, 0x5a, 0xc6, 0xde, 0xf8, 0x25, 0x7c, 0x69, 0x7a, + 0x22, 0x0a, 0x29, 0xb2, 0x73, 0x8b, 0xd2, 0x0f, 0x9e, 0x3f, 0x12, 0x03, 0x84, 0x2c, 0x79, 0xfc, + 0xb5, 0x9e, 0xc0, 0x5d, 0x01, 0x2f, 0x68, 0x44, 0x46, 0x31, 0x86, 0x98, 0xb1, 0xa5, 0x71, 0x08, + 0x3b, 0xc7, 0xc8, 0x6e, 0x72, 0xfd, 0x20, 0x92, 0x3f, 0xe7, 0x40, 0x3f, 0xf4, 0xf1, 0xd6, 0x45, + 0x7d, 0xbf, 0x56, 0xdd, 0x91, 0x33, 0x6b, 0x3e, 0xb1, 0xf2, 0x09, 0x55, 0xce, 0xa5, 0x5f, 0x40, + 0xa1, 0xd7, 0x3b, 0x13, 0x32, 0x50, 0x10, 0xbd, 0x50, 0x60, 0xcc, 0xf9, 0x6f, 0xa0, 0x97, 0x8e, + 0x66, 0xd1, 0x4c, 0x6b, 0x72, 0x7b, 0x63, 0x1d, 0x2a, 0xe7, 0xb6, 0x3b, 0x96, 0x19, 0x1b, 0x7f, + 0x84, 0xb5, 0xe8, 0x95, 0x4e, 0x3d, 0x97, 0x22, 0xef, 0xde, 0xf4, 0x78, 0x15, 0x2d, 0x44, 0x74, + 0x6f, 0x7a, 0x8a, 0x52, 0x27, 0xa7, 0x67, 0xb0, 0x2e, 0xaf, 0x7e, 0xf4, 0xf9, 0xa0, 0x26, 0x17, + 0x28, 0x66, 0x92, 0x68, 0x0a, 0x18, 0xcc, 0x23, 0x8b, 0xa9, 0x3a, 0x7e, 0xf5, 0x15, 0x94, 0x17, + 0x23, 0x37, 0x29, 0xc1, 0xca, 0xe9, 0x9b, 0xd3, 0x5e, 0xed, 0x0e, 0xb9, 0x0b, 0x85, 0xf3, 0xb7, + 0xbd, 0x5a, 0x8e, 0x00, 0xac, 0x1e, 0x75, 0xce, 0x3a, 0xbd, 0x4e, 0x2d, 0xdf, 0xfe, 0x4f, 0x09, + 0x2a, 0x7c, 0x90, 0xed, 0x46, 0x8d, 0x42, 0x5e, 0x40, 0xb5, 0x8b, 0xee, 0xe8, 0x35, 0xe2, 0xf4, + 0xa5, 0x63, 0xcf, 0x91, 0x92, 0xd4, 0x54, 0xb3, 0x40, 0xeb, 0x5b, 0x37, 0x04, 0xb1, 0xc3, 0x8f, + 0xf1, 0x7e, 0x8e, 0xfc, 0x08, 0x2a, 0xe2, 0xb6, 0x11, 0x7f, 0x08, 0x28, 0x59, 0x4b, 0xdf, 0x40, + 0xf5, 0xf8, 0x4d, 0x18, 0xbf, 0xce, 0x91, 0x9f, 0x00, 0xbc, 0x9d, 0x52, 0xf4, 0xd9, 0x1b, 0x6f, + 0x84, 0xe4, 0x96, 0xa1, 0xa7, 0x7e, 0x5b, 0x76, 0xf2, 0x1c, 0xee, 0x1f, 0xa3, 0xcb, 0x77, 0x88, + 0x8b, 0x3b, 0x81, 0x6c, 0x4b, 0xee, 0xec, 0x2d, 0xb1, 0x48, 0x1a, 0xb9, 0xb5, 0xe1, 0xae, 0xd4, + 0x16, 0xf2, 0x40, 0x1a, 0x54, 0x65, 0xab, 0xdf, 0x98, 0x21, 0xc9, 0x4f, 0xa1, 0x14, 0xeb, 0x11, + 0xd9, 0x52, 0x83, 0xe8, 0xd2, 0xa8, 0xaf, 0x73, 0xe4, 0x94, 0xaf, 0x93, 0x65, 0x34, 0xe8, 0xf1, + 0x12, 0xad, 0x91, 0xd7, 0x6e, 0xbc, 0xa8, 0x4c, 0xd4, 0x09, 0x6c, 0x44, 0x6d, 0xae, 0xe0, 0x64, + 0xb9, 0x70, 0x2d, 0xfb, 0x44, 0xe4, 0x05, 0x6c, 0x1c, 0xa1, 0x83, 0x59, 0xa6, 0x78, 0xd4, 0x59, + 0xc8, 0xc0, 0x52, 0x82, 0x6f, 0xe0, 0x41, 0x37, 0xb3, 0x2b, 0x21, 0x22, 0xe4, 0xa1, 0x4a, 0x91, + 0x12, 0xac, 0xa5, 0x5c, 0x2f, 0x61, 0xfd, 0x18, 0x59, 0xa2, 0x77, 0xa4, 0x7e, 0x9b, 0x48, 0xca, + 0xd2, 0x6c, 0x4a, 0x7e, 0x55, 0x6a, 0xcf, 0xa0, 0xf6, 0x76, 0x3a, 0xb2, 0x18, 0xa6, 0x58, 0xf6, + 0x6e, 0x63, 0x91, 0x5e, 0x96, 0x6f, 0x4d, 0xe8, 0xd2, 0x05, 0xb5, 0x60, 0x85, 0x9f, 0x5c, 0x42, + 0xe2, 0x5c, 0xc9, 0xa9, 0xae, 0x6f, 0x28, 0x98, 0x3c, 0xda, 0x1f, 0x40, 0xff, 0x0e, 0x51, 0x24, + 0x3f, 0x8e, 0xeb, 0xf2, 0xbd, 0xc4, 0xb3, 0xfe, 0x85, 0xf2, 0x97, 0xf7, 0x76, 0xdf, 0xfe, 0x01, + 0xf9, 0x3d, 0x3c, 0xb8, 0x55, 0x3e, 0xc9, 0x93, 0xa4, 0x43, 0x97, 0x6a, 0x62, 0x7d, 0xf7, 0x73, + 0x49, 0xfa, 0x07, 0xe4, 0x02, 0xb4, 0x65, 0xb2, 0x4a, 0xbe, 0x8c, 0x0f, 0xd4, 0xe7, 0x75, 0xf7, + 0xbb, 0x72, 0x18, 0x9b, 0x1f, 0xff, 0xb5, 0x9b, 0xfb, 0xf8, 0x69, 0x37, 0xf7, 0xf7, 0x4f, 0xbb, + 0xb9, 0x7f, 0x7e, 0xda, 0xcd, 0xfd, 0xf5, 0xdf, 0xbb, 0x77, 0x2e, 0x56, 0x05, 0xf9, 0xc1, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x8b, 0xec, 0xce, 0x9c, 0xf9, 0x10, 0x00, 0x00, } diff --git a/lib/auth/proto/auth.proto b/lib/auth/proto/auth.proto index 5dcb9648652..a4046e088f6 100644 --- a/lib/auth/proto/auth.proto +++ b/lib/auth/proto/auth.proto @@ -1,10 +1,11 @@ syntax = "proto3"; package proto; +import "github.com/gravitational/teleport/lib/services/types.proto"; + import "gogoproto/gogo.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; -import "github.com/gravitational/teleport/lib/services/types.proto"; option (gogoproto.marshaler_all) = true; option (gogoproto.unmarshaler_all) = true; @@ -14,9 +15,9 @@ option (gogoproto.goproto_getters_all) = true; enum Operation { // INIT is sent as a first sentinel event // on the watch channel - INIT = 0; + INIT = 0; // PUT identifies created or updated object - PUT = 1; + PUT = 1; // DELETE identifies deleted object DELETE = 2; } @@ -24,126 +25,157 @@ enum Operation { // Event returns cluster event message Event { // Operation identifies operation - Operation Type = 1 [(gogoproto.jsontag) = "type,omitempty"]; + Operation Type = 1 [ (gogoproto.jsontag) = "type,omitempty" ]; // Resource contains the updated resource oneof Resource { // ResourceHeader is specified in delete events, // the full object is not available, so resource // header is used to provide information about object type - services.ResourceHeader ResourceHeader = 2 [(gogoproto.jsontag) = "resource,omitempty"]; + services.ResourceHeader ResourceHeader = 2 [ (gogoproto.jsontag) = "resource,omitempty" ]; // CertAuthority is filled in certificate-authority related events - services.CertAuthorityV2 CertAuthority = 3 [(gogoproto.jsontag) = "cert_authority,omitempty"]; + services.CertAuthorityV2 CertAuthority = 3 + [ (gogoproto.jsontag) = "cert_authority,omitempty" ]; // StaticTokens is filled in static-tokens related events - services.StaticTokensV2 StaticTokens = 4 [(gogoproto.jsontag) = "static_tokens,omitempty"]; + services.StaticTokensV2 StaticTokens = 4 + [ (gogoproto.jsontag) = "static_tokens,omitempty" ]; // ProvisionToken is filled in provision-token related events - services.ProvisionTokenV2 ProvisionToken = 5 [(gogoproto.jsontag) = "provision_token,omitempty"]; + services.ProvisionTokenV2 ProvisionToken = 5 + [ (gogoproto.jsontag) = "provision_token,omitempty" ]; // ClusterNameV2 is a cluster name resource - services.ClusterNameV2 ClusterName = 6 [(gogoproto.jsontag) = "cluster_name,omitempty"]; + services.ClusterNameV2 ClusterName = 6 [ (gogoproto.jsontag) = "cluster_name,omitempty" ]; // ClusterConfig is a cluster configuration resource - services.ClusterConfigV3 ClusterConfig = 7 [(gogoproto.jsontag) = "cluster_config,omitempty"]; + services.ClusterConfigV3 ClusterConfig = 7 + [ (gogoproto.jsontag) = "cluster_config,omitempty" ]; // User is a user resource - services.UserV2 User = 8 [(gogoproto.jsontag) = "user,omitempty"]; + services.UserV2 User = 8 [ (gogoproto.jsontag) = "user,omitempty" ]; // Role is a role resource - services.RoleV3 Role = 9 [(gogoproto.jsontag) = "role,omitempty"]; + services.RoleV3 Role = 9 [ (gogoproto.jsontag) = "role,omitempty" ]; // Namespace is a namespace resource - services.Namespace Namespace = 10 [(gogoproto.jsontag) = "namespace,omitempty"]; + services.Namespace Namespace = 10 [ (gogoproto.jsontag) = "namespace,omitempty" ]; // Server is a node or proxy resource - services.ServerV2 Server = 11 [(gogoproto.jsontag) = "server,omitempty"]; + services.ServerV2 Server = 11 [ (gogoproto.jsontag) = "server,omitempty" ]; // ReverseTunnel is a resource with reverse tunnel - services.ReverseTunnelV2 ReverseTunnel = 12 [(gogoproto.jsontag) = "reverse_tunnel,omitempty"]; + services.ReverseTunnelV2 ReverseTunnel = 12 + [ (gogoproto.jsontag) = "reverse_tunnel,omitempty" ]; // TunnelConnection is a resource for tunnel connnections - services.TunnelConnectionV2 TunnelConnection = 13 [(gogoproto.jsontag) = "tunnel_connection,omitempty"]; + services.TunnelConnectionV2 TunnelConnection = 13 + [ (gogoproto.jsontag) = "tunnel_connection,omitempty" ]; // AccessRequest is a resource for access requests - services.AccessRequestV3 AccessRequest = 14 [(gogoproto.jsontag) = "access_request,omitempty"]; + services.AccessRequestV3 AccessRequest = 14 + [ (gogoproto.jsontag) = "access_request,omitempty" ]; } } // Watch specifies watch parameters message Watch { // Kinds specifies object kinds to watch - repeated WatchKind Kinds = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "kinds,omitempty"]; + repeated WatchKind Kinds = 1 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "kinds,omitempty" ]; } // WatchKind specifies resource kind to watch message WatchKind { // Kind is a resource kind to watch - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // LoadSecrets specifies whether to load secrets - bool LoadSecrets = 2 [(gogoproto.jsontag) = "load_secrets"]; + bool LoadSecrets = 2 [ (gogoproto.jsontag) = "load_secrets" ]; // Name is an optional specific resource type to watch, // if specified only the events with a specific resource // name will be sent - string Name = 3 [(gogoproto.jsontag) = "name"]; + string Name = 3 [ (gogoproto.jsontag) = "name" ]; // Filter is an optional mapping of custom filter parameters. // Valid values vary by resource kind. - map Filter = 4 [(gogoproto.jsontag) = "filter,omitempty"]; + map Filter = 4 [ (gogoproto.jsontag) = "filter,omitempty" ]; } // Set of certificates corresponding to a single public key. message Certs { // SSH X509 cert (PEM-encoded). - bytes SSH = 1 [(gogoproto.jsontag) = "ssh,omitempty"]; + bytes SSH = 1 [ (gogoproto.jsontag) = "ssh,omitempty" ]; // TLS X509 cert (PEM-encoded). - bytes TLS = 2 [(gogoproto.jsontag) = "tls,omitempty"]; + bytes TLS = 2 [ (gogoproto.jsontag) = "tls,omitempty" ]; } // UserCertRequest specifies certificate-generation parameters // for a user. message UserCertsRequest { // PublicKey is a public key to be signed. - bytes PublicKey = 1 [(gogoproto.jsontag) = "public_key"]; + bytes PublicKey = 1 [ (gogoproto.jsontag) = "public_key" ]; // Username of key owner. - string Username = 2 [(gogoproto.jsontag) = "username"]; - // Expires is a desired time of the expiry of the certificate, could + string Username = 2 [ (gogoproto.jsontag) = "username" ]; + // Expires is a desired time of the expiry of the certificate, could // be adjusted based on the permissions - google.protobuf.Timestamp Expires = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "expires,omitempty"]; - // Format encodes the desired SSH Certificate format (either old ssh compatibility + google.protobuf.Timestamp Expires = 3 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "expires,omitempty" + ]; + // Format encodes the desired SSH Certificate format (either old ssh + // compatibility // format to remove some metadata causing trouble with old SSH servers) // or standard SSH cert format with custom extensions - string Format = 4 [(gogoproto.jsontag) = "format,omitempty"]; + string Format = 4 [ (gogoproto.jsontag) = "format,omitempty" ]; // RouteToCluster is an optional cluster name to add to the certificate, // so that requests originating with this certificate will be redirected // to this cluster - string RouteToCluster = 5 [(gogoproto.jsontag) = "route_to_cluster,omitempty"]; + string RouteToCluster = 5 [ (gogoproto.jsontag) = "route_to_cluster,omitempty" ]; // AccessRequests is an optional list of request IDs indicating requests whose // escalated privileges should be added to the certificate. - repeated string AccessRequests = 6 [(gogoproto.jsontag) = "access_requests,omitempty"]; + repeated string AccessRequests = 6 [ (gogoproto.jsontag) = "access_requests,omitempty" ]; } -// GetUserRequest specifies paramters for the GetUser method. +// GetUserRequest specifies parameters for the GetUser method. message GetUserRequest { // Name is the name of the desired user. - string Name = 1 [(gogoproto.jsontag) = "name"]; + string Name = 1 [ (gogoproto.jsontag) = "name" ]; // WithSecrets specifies whether to load associated secrets. - bool WithSecrets = 2 [(gogoproto.jsontag) = "with_secrets,omitempty"]; + bool WithSecrets = 2 [ (gogoproto.jsontag) = "with_secrets,omitempty" ]; } // GetUsersRequest specifies parameters for the GetUsers method. message GetUsersRequest { // WithSecrets specifies whether to load associated secrets. - bool WithSecrets = 1 [(gogoproto.jsontag) = "with_secrets"]; + bool WithSecrets = 1 [ (gogoproto.jsontag) = "with_secrets" ]; } // AccessRequests is a collection of AccessRequest values. message AccessRequests { - repeated services.AccessRequestV3 AccessRequests = 1 [(gogoproto.jsontag) = "access_requests"]; + repeated services.AccessRequestV3 AccessRequests = 1 + [ (gogoproto.jsontag) = "access_requests" ]; } // PluginDataSeq is a sequence of plugin data. message PluginDataSeq { - repeated services.PluginDataV3 PluginData = 1 [(gogoproto.jsontag) = "plugin_data"]; + repeated services.PluginDataV3 PluginData = 1 [ (gogoproto.jsontag) = "plugin_data" ]; } // RequestStateSetter encodes the paramters necessary to update the // state of a privilege escalation request. message RequestStateSetter { - string ID = 1 [(gogoproto.jsontag) = "id"]; - services.RequestState State = 2 [(gogoproto.jsontag) = "state"]; + string ID = 1 [ (gogoproto.jsontag) = "id" ]; + services.RequestState State = 2 [ (gogoproto.jsontag) = "state" ]; } // RequestID is the unique identifier of an access request. -message RequestID { - string ID = 1 [(gogoproto.jsontag) = "id"]; +message RequestID { string ID = 1 [ (gogoproto.jsontag) = "id" ]; } + +// RotateResetPasswordTokenSecretsRequest is a request to rotate token secrets. +message RotateResetPasswordTokenSecretsRequest { + string TokenID = 1 [ (gogoproto.jsontag) = "token" ]; +} + +// GetResetPasswordTokenRequest is a request to get a reset password token. +message GetResetPasswordTokenRequest { string TokenID = 1 [ (gogoproto.jsontag) = "token" ]; } + +// CreateResetPasswordTokenRequest is a request to create an instance of +// ResetPasswordToken +message CreateResetPasswordTokenRequest { + // Name is the user name. + string Name = 1 [ (gogoproto.jsontag) = "name" ]; + // Type is a token type. + string Type = 2 [ (gogoproto.jsontag) = "type" ]; + // TTL specifies how long the generated token is valid for. + int64 TTL = 3 [ (gogoproto.jsontag) = "ttl", (gogoproto.casttype) = "Duration" ]; } // PingRequest is the input value for the Ping method. @@ -154,9 +186,9 @@ message PingRequest { // PingResponse contains data about the teleport auth server. message PingResponse { // ClusterName is the name of the teleport cluster. - string ClusterName = 1 [(gogoproto.jsontag) = "cluster_name"]; + string ClusterName = 1 [ (gogoproto.jsontag) = "cluster_name" ]; // ServerVersion is the version of the auth server. - string ServerVersion = 2 [(gogoproto.jsontag) = "server_version"]; + string ServerVersion = 2 [ (gogoproto.jsontag) = "server_version" ]; } // AuthService is authentication/authorization service implementation @@ -167,7 +199,8 @@ service AuthService { rpc WatchEvents(Watch) returns (stream Event); // UpsertNode upserts node rpc UpsertNode(services.ServerV2) returns (services.KeepAlive); - // GenerateUserCerts generates a set of user certificates for use by `tctl auth sign`. + // GenerateUserCerts generates a set of user certificates for use by `tctl + // auth sign`. rpc GenerateUserCerts(UserCertsRequest) returns (Certs); // GetUser gets a user resource by name. rpc GetUser(GetUserRequest) returns (services.UserV2); @@ -189,4 +222,12 @@ service AuthService { // to mimic the behavior of the proxy's Ping method, and may be used by // clients for verification or configuration on startup. rpc Ping(PingRequest) returns (PingResponse); + // RotateResetPasswordTokenSecrets rotates token secrets for a given tokenID. + rpc RotateResetPasswordTokenSecrets(RotateResetPasswordTokenSecretsRequest) + returns (services.ResetPasswordTokenSecretsV3); + // GetResetPasswordToken returns a token. + rpc GetResetPasswordToken(GetResetPasswordTokenRequest) returns (services.ResetPasswordTokenV3); + // CreateResetPasswordToken creates ResetPasswordToken. + rpc CreateResetPasswordToken(CreateResetPasswordTokenRequest) + returns (services.ResetPasswordTokenV3); } diff --git a/lib/auth/proto/proto.go b/lib/auth/proto/proto.go new file mode 100644 index 00000000000..39b9ed89ede --- /dev/null +++ b/lib/auth/proto/proto.go @@ -0,0 +1,16 @@ +package proto + +import "time" + +// Duration is a wrapper around duration to set up custom marshal/unmarshal +type Duration time.Duration + +// Get returns time.Duration value +func (d Duration) Get() time.Duration { + return time.Duration(d) +} + +// Set sets time.Duration value +func (d *Duration) Set(value time.Duration) { + *d = Duration(value) +} diff --git a/lib/auth/resetpasswordtoken.go b/lib/auth/resetpasswordtoken.go new file mode 100644 index 00000000000..675e1e0c13c --- /dev/null +++ b/lib/auth/resetpasswordtoken.go @@ -0,0 +1,247 @@ +/* +Copyright 2017-2020 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package auth + +import ( + "bytes" + "context" + "fmt" + "image/png" + "net/url" + "time" + + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/utils" + + "github.com/gravitational/trace" + + "github.com/pquerna/otp/totp" +) + +const ( + // ResetPasswordTokenTypeInvite indicates invite UI flow + ResetPasswordTokenTypeInvite = "invite" + // ResetPasswordTokenTypePassword indicates set new password UI flow + ResetPasswordTokenTypePassword = "password" +) + +// CreateResetPasswordTokenRequest is a request to create a new reset password token +type CreateResetPasswordTokenRequest struct { + // Name is the user name to reset. + Name string `json:"name"` + // TTL specifies how long the generated reset token is valid for. + TTL time.Duration `json:"ttl"` + // Type is a token type. + Type string `json:"type"` +} + +// CheckAndSetDefaults checks and sets the defaults +func (r *CreateResetPasswordTokenRequest) CheckAndSetDefaults() error { + if r.Name == "" { + return trace.BadParameter("user name can't be empty") + } + if r.TTL < 0 { + return trace.BadParameter("TTL can't be negative") + } + + if r.Type == "" { + r.Type = ResetPasswordTokenTypePassword + } + + // We use the same mechanism to handle invites and password resets + // as both allow setting up a new password based on auth preferences. + // The only difference is default TTL values and URLs to web UI. + switch r.Type { + case ResetPasswordTokenTypeInvite: + if r.TTL == 0 { + r.TTL = defaults.SignupTokenTTL + } + + if r.TTL > defaults.MaxSignupTokenTTL { + return trace.BadParameter( + "failed to create user invite token: maximum token TTL is %v hours", + defaults.MaxSignupTokenTTL) + } + case ResetPasswordTokenTypePassword: + if r.TTL == 0 { + r.TTL = defaults.ChangePasswordTokenTTL + } + if r.TTL > defaults.MaxChangePasswordTokenTTL { + return trace.BadParameter( + "failed to create reset password token: maximum token TTL is %v hours", + defaults.MaxChangePasswordTokenTTL) + } + default: + return trace.BadParameter("unknown reset password token request type(%v)", r.Type) + } + + return nil +} + +// CreateResetPasswordToken creates a reset password token +func (s *AuthServer) CreateResetPasswordToken(ctx context.Context, req CreateResetPasswordTokenRequest) (services.ResetPasswordToken, error) { + err := req.CheckAndSetDefaults() + if err != nil { + return nil, trace.Wrap(err) + } + + _, err = s.GetUser(req.Name, false) + if err != nil { + return nil, trace.Wrap(err) + } + + _, err = s.ResetPassword(req.Name) + if err != nil { + return nil, trace.Wrap(err) + } + + token, err := s.newResetPasswordToken(req) + if err != nil { + return nil, trace.Wrap(err) + } + + // remove any other existing tokens for this user + err = s.deleteResetPasswordTokens(ctx, req.Name) + if err != nil { + return nil, trace.Wrap(err) + } + + _, err = s.Identity.CreateResetPasswordToken(ctx, token) + if err != nil { + return nil, trace.Wrap(err) + } + + return s.GetResetPasswordToken(ctx, token.GetName()) +} + +// RotateResetPasswordTokenSecrets rotates secrets for a given tokenID. +// It gets called every time a user fetches 2nd-factor secrets during registration attempt. +// This ensures that an attacker that gains the ResetPasswordToken link can not view it, +// extract the OTP key from the QR code, then allow the user to signup with +// the same OTP token. +func (s *AuthServer) RotateResetPasswordTokenSecrets(ctx context.Context, tokenID string) (services.ResetPasswordTokenSecrets, error) { + token, err := s.GetResetPasswordToken(ctx, tokenID) + if err != nil { + return nil, trace.Wrap(err) + } + + key, qr, err := newTOTPKeys("Teleport", token.GetUser()+"@"+s.AuthServiceName) + if err != nil { + return nil, trace.Wrap(err) + } + + secrets, err := services.NewResetPasswordTokenSecrets(tokenID) + if err != nil { + return nil, trace.Wrap(err) + } + + secrets.Spec.OTPKey = key + secrets.Spec.QRCode = string(qr) + err = s.UpsertResetPasswordTokenSecrets(ctx, &secrets) + if err != nil { + return nil, trace.Wrap(err) + } + + return &secrets, nil +} + +func (s *AuthServer) newResetPasswordToken(req CreateResetPasswordTokenRequest) (services.ResetPasswordToken, error) { + tokenID, err := utils.CryptoRandomHex(TokenLenBytes) + if err != nil { + return nil, trace.Wrap(err) + } + + proxies, err := s.GetProxies() + if err != nil { + log.Errorf("Unable to retrieve proxy list: %v", err) + } + + proxyHost, _ := services.GuessProxyHostAndVersion(proxies) + url, err := formatResetPasswordTokenURL(proxyHost, tokenID, req.Type) + if err != nil { + return nil, trace.Wrap(err) + } + + token := services.NewResetPasswordToken(tokenID) + token.Metadata.SetExpiry(s.clock.Now().UTC().Add(req.TTL)) + token.Spec.User = req.Name + token.Spec.Created = s.clock.Now().UTC() + token.Spec.URL = url + return &token, nil +} + +func formatResetPasswordTokenURL(proxyHost string, tokenID string, reqType string) (string, error) { + if proxyHost == "" { + proxyHost = fmt.Sprintf(":%v", defaults.HTTPListenPort) + } + + u := &url.URL{ + Scheme: "https", + Host: proxyHost, + } + + // We have 2 differen UI flows to process password reset tokens + if reqType == ResetPasswordTokenTypeInvite { + u.Path = fmt.Sprintf("/web/invite/%v", tokenID) + } else if reqType == ResetPasswordTokenTypePassword { + u.Path = fmt.Sprintf("/web/reset/%v", tokenID) + } + + return u.String(), nil +} + +func (s *AuthServer) deleteResetPasswordTokens(ctx context.Context, username string) error { + tokens, err := s.GetResetPasswordTokens(ctx) + if err != nil { + return trace.Wrap(err) + } + + for _, token := range tokens { + if token.GetUser() != username { + continue + } + + err = s.DeleteResetPasswordToken(ctx, token.GetName()) + if err != nil { + return trace.Wrap(err) + } + } + + return nil +} + +func newTOTPKeys(issuer string, accountName string) (key string, qr []byte, err error) { + // create totp key + otpKey, err := totp.Generate(totp.GenerateOpts{ + Issuer: issuer, + AccountName: accountName, + }) + if err != nil { + return "", nil, trace.Wrap(err) + } + + // create QR code + var otpQRBuf bytes.Buffer + otpImage, err := otpKey.Image(456, 456) + if err != nil { + return "", nil, trace.Wrap(err) + } + png.Encode(&otpQRBuf, otpImage) + + return otpKey.Secret(), otpQRBuf.Bytes(), nil +} diff --git a/lib/auth/resetpasswordtoken_test.go b/lib/auth/resetpasswordtoken_test.go new file mode 100644 index 00000000000..b382a09e613 --- /dev/null +++ b/lib/auth/resetpasswordtoken_test.go @@ -0,0 +1,168 @@ +/* +Copyright 2020 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package auth + +import ( + "context" + "fmt" + "time" + + authority "github.com/gravitational/teleport/lib/auth/testauthority" + "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/backend/lite" + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/utils" + + . "gopkg.in/check.v1" +) + +type ResetPasswordTokenTest struct { + bk backend.Backend + a *AuthServer +} + +var _ = fmt.Printf +var _ = Suite(&ResetPasswordTokenTest{}) + +func (s *ResetPasswordTokenTest) SetUpSuite(c *C) { + utils.InitLoggerForTests() +} + +func (s *ResetPasswordTokenTest) TearDownSuite(c *C) { +} + +func (s *ResetPasswordTokenTest) SetUpTest(c *C) { + var err error + c.Assert(err, IsNil) + s.bk, err = lite.New(context.TODO(), backend.Params{"path": c.MkDir()}) + c.Assert(err, IsNil) + + // set cluster name + clusterName, err := services.NewClusterName(services.ClusterNameSpecV2{ + ClusterName: "me.localhost", + }) + c.Assert(err, IsNil) + authConfig := &InitConfig{ + ClusterName: clusterName, + Backend: s.bk, + Authority: authority.New(), + SkipPeriodicOperations: true, + } + s.a, err = NewAuthServer(authConfig) + c.Assert(err, IsNil) + + err = s.a.SetClusterName(clusterName) + c.Assert(err, IsNil) + + // Set services.ClusterConfig to disallow local auth. + clusterConfig, err := services.NewClusterConfig(services.ClusterConfigSpecV3{ + LocalAuth: services.NewBool(true), + }) + c.Assert(err, IsNil) + + err = s.a.SetClusterConfig(clusterConfig) + c.Assert(err, IsNil) +} + +func (s *ResetPasswordTokenTest) TearDownTest(c *C) { +} + +func (s *ResetPasswordTokenTest) TestCreateResetPasswordToken(c *C) { + username := "joe@example.com" + pass := "pass123" + _, _, err := CreateUserAndRole(s.a, username, []string{username}) + c.Assert(err, IsNil) + + req := CreateResetPasswordTokenRequest{ + Name: username, + TTL: time.Hour, + } + + token, err := s.a.CreateResetPasswordToken(context.TODO(), req) + c.Assert(err, IsNil) + c.Assert(token.GetUser(), Equals, username) + c.Assert(token.GetURL(), Equals, "https://:3080/web/reset/"+token.GetName()) + + // verify that password was reset + err = s.a.CheckPasswordWOToken(username, []byte(pass)) + c.Assert(err, NotNil) + + // create another reset token for the same user + token, err = s.a.CreateResetPasswordToken(context.TODO(), req) + c.Assert(err, IsNil) + + // previous token must be deleted + tokens, err := s.a.GetResetPasswordTokens(context.TODO()) + c.Assert(err, IsNil) + c.Assert(len(tokens), Equals, 1) + c.Assert(tokens[0].GetName(), Equals, token.GetName()) +} + +func (s *ResetPasswordTokenTest) TestCreateResetPasswordTokenErrors(c *C) { + username := "joe@example.com" + _, _, err := CreateUserAndRole(s.a, username, []string{username}) + c.Assert(err, IsNil) + + type testCase struct { + desc string + req CreateResetPasswordTokenRequest + } + + testCases := []testCase{ + { + desc: "Reset Password: TTL < 0", + req: CreateResetPasswordTokenRequest{ + Name: username, + TTL: -1, + }, + }, + { + desc: "Reset Password: TTL > max", + req: CreateResetPasswordTokenRequest{ + Name: username, + TTL: defaults.MaxChangePasswordTokenTTL + time.Hour, + }, + }, + { + desc: "Reset Password: empty user name", + req: CreateResetPasswordTokenRequest{ + TTL: time.Hour, + }, + }, + { + desc: "Reset Password: user does not exist", + req: CreateResetPasswordTokenRequest{ + Name: "doesnotexist@example.com", + TTL: time.Hour, + }, + }, + { + desc: "Invite: TTL > max", + req: CreateResetPasswordTokenRequest{ + Name: username, + TTL: defaults.MaxSignupTokenTTL + time.Hour, + Type: ResetPasswordTokenTypeInvite, + }, + }, + } + + for _, tc := range testCases { + _, err := s.a.CreateResetPasswordToken(context.TODO(), tc.req) + c.Assert(err, NotNil, Commentf("test case %q", tc.desc)) + } +} diff --git a/lib/auth/tls_test.go b/lib/auth/tls_test.go index 9692b6713e7..931be4d7ccb 100644 --- a/lib/auth/tls_test.go +++ b/lib/auth/tls_test.go @@ -27,7 +27,6 @@ import ( "fmt" "io" "io/ioutil" - "net/url" "os" "path/filepath" "testing" @@ -50,7 +49,6 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" "github.com/pquerna/otp/totp" - "github.com/tstranex/u2f" "gopkg.in/check.v1" ) @@ -1208,13 +1206,6 @@ func (s *TLSSuite) TestOTPCRUD(c *check.C) { err = s.server.Auth().UpsertTOTP(user, otpSecret) c.Assert(err, check.IsNil) - // make sure the otp url we get back is valid url issued to the correct user - otpURL, _, err := s.server.Auth().GetOTPData(user) - c.Assert(err, check.IsNil) - u, err := url.Parse(otpURL) - c.Assert(err, check.IsNil) - c.Assert(u.Path, check.Equals, "/user1") - // a completely invalid token should return access denied err = clt.CheckPassword("user1", pass, "123456") c.Assert(err, check.NotNil) @@ -1845,14 +1836,6 @@ func (s *TLSSuite) TestAuthenticateWebUserOTP(c *check.C) { err = s.server.Auth().UpsertTOTP(user, otpSecret) c.Assert(err, check.IsNil) - otpURL, _, err := s.server.Auth().GetOTPData(user) - c.Assert(err, check.IsNil) - - // make sure label in url is correct - u, err := url.Parse(otpURL) - c.Assert(err, check.IsNil) - c.Assert(u.Path, check.Equals, "/ws-test") - // create a valid otp token validToken, err := totp.GenerateCode(otpSecret, s.server.Clock().Now()) c.Assert(err, check.IsNil) @@ -1911,68 +1894,6 @@ func (s *TLSSuite) TestAuthenticateWebUserOTP(c *check.C) { c.Assert(err, check.NotNil) } -// TestTokenSignupFlow tests signup flow using invite token -func (s *TLSSuite) TestTokenSignupFlow(c *check.C) { - authPreference, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ - Type: teleport.Local, - SecondFactor: teleport.OTP, - }) - c.Assert(err, check.IsNil) - err = s.server.Auth().SetAuthPreference(authPreference) - c.Assert(err, check.IsNil) - - user := "foobar" - mappings := []string{"admin", "db"} - - token, err := s.server.Auth().CreateSignupToken(services.UserV1{Name: user, AllowedLogins: mappings}, 0) - c.Assert(err, check.IsNil) - - proxy, err := s.server.NewClient(TestBuiltin(teleport.RoleProxy)) - c.Assert(err, check.IsNil) - - // invalid token - _, _, err = proxy.GetSignupTokenData("bad_token_data") - c.Assert(err, check.NotNil) - - // valid token - success - _, _, err = proxy.GetSignupTokenData(token) - c.Assert(err, check.IsNil) - - signupToken, err := s.server.Auth().GetSignupToken(token) - c.Assert(err, check.IsNil) - - otpToken, err := totp.GenerateCode(signupToken.OTPKey, s.server.Clock().Now()) - c.Assert(err, check.IsNil) - - // valid token, but missing second factor - newPassword := "abc123" - _, err = proxy.CreateUserWithoutOTP(token, newPassword) - fixtures.ExpectAccessDenied(c, err) - - // invalid signup token - _, err = proxy.CreateUserWithOTP("what_token?", newPassword, otpToken) - fixtures.ExpectAccessDenied(c, err) - - // valid signup token, invalid otp token - _, err = proxy.CreateUserWithOTP(token, newPassword, "badotp") - fixtures.ExpectAccessDenied(c, err) - - // success - ws, err := proxy.CreateUserWithOTP(token, newPassword, otpToken) - c.Assert(err, check.IsNil) - - // attempt to reuse token fails - _, err = proxy.CreateUserWithOTP(token, newPassword, otpToken) - fixtures.ExpectAccessDenied(c, err) - - // can login with web session credentials now - userClient, err := s.server.NewClientFromWebSession(ws) - c.Assert(err, check.IsNil) - - _, err = userClient.GetWebSessionInfo(user, ws.GetName()) - c.Assert(err, check.IsNil) -} - // TestLoginAttempts makes sure the login attempt counter is incremented and // reset correctly. func (s *TLSSuite) TestLoginAttempts(c *check.C) { @@ -2017,46 +1938,50 @@ func (s *TLSSuite) TestLoginAttempts(c *check.C) { c.Assert(loginAttempts, check.HasLen, 0) } -// TestSignupNoLocalAuth make sure that signup tokens can not be created -// when local auth is disabled. -func (s *TLSSuite) TestSignupNoLocalAuth(c *check.C) { - // Set services.ClusterConfig to disallow local auth. +func (s *TLSSuite) TestChangePasswordWithToken(c *check.C) { clusterConfig, err := services.NewClusterConfig(services.ClusterConfigSpecV3{ - LocalAuth: services.NewBool(false), + LocalAuth: services.NewBool(true), }) c.Assert(err, check.IsNil) + err = s.server.Auth().SetClusterConfig(clusterConfig) c.Assert(err, check.IsNil) - // Make sure access is denied when trying to create a signup token. - _, err = s.server.Auth().CreateSignupToken(services.UserV1{ - Name: "foo", - AllowedLogins: []string{"admin"}, - }, backend.Forever) - fixtures.ExpectAccessDenied(c, err) -} - -// TestCreateUserNoLocalAuth make sure that local users can not be created -// when local auth is disabled. -func (s *TLSSuite) TestCreateUserNoLocalAuth(c *check.C) { - // Set services.ClusterConfig to disallow local auth. - clusterConfig, err := services.NewClusterConfig(services.ClusterConfigSpecV3{ - LocalAuth: services.NewBool(false), + authPreference, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.OTP, }) c.Assert(err, check.IsNil) - err = s.server.Auth().SetClusterConfig(clusterConfig) + + err = s.server.Auth().SetAuthPreference(authPreference) c.Assert(err, check.IsNil) - // Make sure access is denied when trying to create a user. - _, err = s.server.Auth().CreateUserWithoutOTP("foo", "bar") - fixtures.ExpectAccessDenied(c, err) - _, err = s.server.Auth().CreateUserWithOTP("foo", "bar", "123456") - fixtures.ExpectAccessDenied(c, err) - _, err = s.server.Auth().CreateUserWithU2FToken("foo", "bar", u2f.RegisterResponse{ - ClientData: "baz", - RegistrationData: "qux", + username := "user1" + // Create a local user. + clt, err := s.server.NewClient(TestAdmin()) + c.Assert(err, check.IsNil) + + _, _, err = CreateUserAndRole(clt, username, []string{"role1"}) + c.Assert(err, check.IsNil) + + token, err := s.server.Auth().CreateResetPasswordToken(context.TODO(), CreateResetPasswordTokenRequest{ + Name: username, + TTL: time.Hour, }) - fixtures.ExpectAccessDenied(c, err) + c.Assert(err, check.IsNil) + + secrets, err := s.server.Auth().RotateResetPasswordTokenSecrets(context.TODO(), token.GetName()) + c.Assert(err, check.IsNil) + + otpToken, err := totp.GenerateCode(secrets.GetOTPKey(), s.server.Clock().Now()) + c.Assert(err, check.IsNil) + + _, err = s.server.Auth().ChangePasswordWithToken(context.TODO(), ChangePasswordWithTokenRequest{ + TokenID: token.GetName(), + Password: []byte("qweqweqwe"), + SecondFactorToken: otpToken, + }) + c.Assert(err, check.IsNil) } // TestLoginNoLocalAuth makes sure that logins for local accounts can not be diff --git a/lib/auth/user.go b/lib/auth/user.go new file mode 100644 index 00000000000..0ff678fe480 --- /dev/null +++ b/lib/auth/user.go @@ -0,0 +1,84 @@ +/* +Copyright 2015 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package auth implements certificate signing authority and access control server +// Authority server is composed of several parts: +// +// * Authority server itself that implements signing and acl logic +// * HTTP server wrapper for authority server +// * HTTP client wrapper +// +package auth + +import ( + "github.com/gravitational/teleport" + "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/services" + + "github.com/gravitational/trace" +) + +// UpsertUser upserts user +func (s *AuthServer) UpsertUser(user services.User) error { + err := s.Identity.UpsertUser(user) + if err != nil { + return trace.Wrap(err) + } + + // If the user was successfully upserted, emit an event. + var connectorName string + if user.GetCreatedBy().Connector == nil { + connectorName = teleport.Local + } else { + connectorName = user.GetCreatedBy().Connector.ID + } + s.EmitAuditEvent(events.UserUpdate, events.EventFields{ + events.EventUser: user.GetName(), + events.UserExpires: user.Expiry(), + events.UserRoles: user.GetRoles(), + events.UserConnector: connectorName, + }) + + return nil +} + +// DeleteUser deletes user +func (s *AuthServer) DeleteUser(user string) error { + role, err := s.Access.GetRole(services.RoleNameForUser(user)) + if err != nil { + if !trace.IsNotFound(err) { + return trace.Wrap(err) + } + } else { + if err := s.Access.DeleteRole(role.GetName()); err != nil { + if !trace.IsNotFound(err) { + return trace.Wrap(err) + } + } + } + + err = s.Identity.DeleteUser(user) + if err != nil { + return trace.Wrap(err) + } + + // If the user was successfully deleted, emit an event. + s.EmitAuditEvent(events.UserDelete, events.EventFields{ + events.EventUser: user, + }) + + return nil +} diff --git a/lib/defaults/defaults.go b/lib/defaults/defaults.go index a23ff1661a4..0bf1d5223ab 100644 --- a/lib/defaults/defaults.go +++ b/lib/defaults/defaults.go @@ -130,6 +130,15 @@ const ( // clients can reduce this time, not increase it MaxSignupTokenTTL = 48 * time.Hour + // MaxChangePasswordTokenTTL is a maximum TTL for password change token + MaxChangePasswordTokenTTL = 24 * time.Hour + + // ChangePasswordTokenTTL is a default password change token expiry time + ChangePasswordTokenTTL = 8 * time.Hour + + // ResetPasswordLength is the length of the reset user password + ResetPasswordLength = 16 + // ProvisioningTokenTTL is a the default TTL for server provisioning // tokens. When a user generates a token without an explicit TTL, this // value is used. diff --git a/lib/events/api.go b/lib/events/api.go index 42fb898ca85..e8f248ed7c3 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -173,6 +173,13 @@ const ( // AccessRequestID is the ID of an access request. AccessRequestID = "id" + // ResetPasswordTokenCreateEvent is emitted when a new reset password token is created. + ResetPasswordTokenCreateEvent = "reset_password_token.create" + // ResetPasswordTokenTTL is TTL of reset password token. + ResetPasswordTokenTTL = "ttl" + // ResetPasswordTokenFor is a user name of reset password token. + ResetPasswordTokenFor = "entity" + // ExecEvent is an exec command executed by script or user on // the server side ExecEvent = "exec" diff --git a/lib/events/codes.go b/lib/events/codes.go index c2969548772..b5ea6c40473 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -176,6 +176,11 @@ var ( Name: SessionNetworkEvent, Code: SessionNetworkCode, } + // ResetPasswordTokenCreated is emitted when token is created. + ResetPasswordTokenCreated = Event{ + Name: ResetPasswordTokenCreateEvent, + Code: ResetPasswordTokenCreateCode, + } ) var ( @@ -239,4 +244,6 @@ var ( AccessRequestCreateCode = "T5000I" // AccessRequestUpdateCode is the access request state update code. AccessRequestUpdateCode = "T5001I" + // ResetPasswordTokenCreateCode is the token create event code. + ResetPasswordTokenCreateCode = "T6000I" ) diff --git a/lib/events/slice.pb.go b/lib/events/slice.pb.go index 7fb71eeb074..c2111b014f4 100644 --- a/lib/events/slice.pb.go +++ b/lib/events/slice.pb.go @@ -43,7 +43,7 @@ func (m *SessionSlice) Reset() { *m = SessionSlice{} } func (m *SessionSlice) String() string { return proto.CompactTextString(m) } func (*SessionSlice) ProtoMessage() {} func (*SessionSlice) Descriptor() ([]byte, []int) { - return fileDescriptor_slice_c27e90ee7997b6d0, []int{0} + return fileDescriptor_slice_fde4e6ff9bad9f4f, []int{0} } func (m *SessionSlice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -104,7 +104,8 @@ func (m *SessionSlice) GetVersion() int64 { type SessionChunk struct { // Time is the occurence of this event Time int64 `protobuf:"varint,2,opt,name=Time,proto3" json:"Time,omitempty"` - // Data is captured data, contains event fields in case of event, session data otherwise + // Data is captured data, contains event fields in case of event, session data + // otherwise Data []byte `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"` // EventType is event type EventType string `protobuf:"bytes,4,opt,name=EventType,proto3" json:"EventType,omitempty"` @@ -125,7 +126,7 @@ func (m *SessionChunk) Reset() { *m = SessionChunk{} } func (m *SessionChunk) String() string { return proto.CompactTextString(m) } func (*SessionChunk) ProtoMessage() {} func (*SessionChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_slice_c27e90ee7997b6d0, []int{1} + return fileDescriptor_slice_fde4e6ff9bad9f4f, []int{1} } func (m *SessionChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -972,9 +973,9 @@ var ( ErrIntOverflowSlice = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("slice.proto", fileDescriptor_slice_c27e90ee7997b6d0) } +func init() { proto.RegisterFile("slice.proto", fileDescriptor_slice_fde4e6ff9bad9f4f) } -var fileDescriptor_slice_c27e90ee7997b6d0 = []byte{ +var fileDescriptor_slice_fde4e6ff9bad9f4f = []byte{ // 329 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0xc1, 0x4e, 0xc2, 0x40, 0x10, 0x86, 0x59, 0x0b, 0x05, 0x16, 0x0e, 0x66, 0x43, 0xc8, 0x06, 0x4d, 0xd3, 0x70, 0xea, 0xc1, diff --git a/lib/events/slice.proto b/lib/events/slice.proto index 3b32d1be95a..c072cc69bb9 100644 --- a/lib/events/slice.proto +++ b/lib/events/slice.proto @@ -12,28 +12,28 @@ message SessionSlice { // Chunks is a list of submitted session chunks repeated SessionChunk Chunks = 3; // Version specifies session slice version - int64 Version = 4; + int64 Version = 4; } // SessionChunk is a chunk to be posted in the context of the session message SessionChunk { // Time is the occurence of this event - int64 Time = 2; - // Data is captured data, contains event fields in case of event, session data otherwise + int64 Time = 2; + // Data is captured data, contains event fields in case of event, session data + // otherwise bytes Data = 3; // EventType is event type - string EventType = 4; + string EventType = 4; // EventIndex is the event global index - int64 EventIndex = 5; + int64 EventIndex = 5; // Index is the autoincremented chunk index int64 ChunkIndex = 6; // Offset is an offset from the previous chunk in bytes - int64 Offset = 7; + int64 Offset = 7; // Delay is a delay from the previous event in milliseconds int64 Delay = 8; } service AuditLog { - rpc SubmitSessionSlice(stream SessionSlice) returns (google.protobuf.Empty) { - } + rpc SubmitSessionSlice(stream SessionSlice) returns (google.protobuf.Empty) {} } diff --git a/lib/service/service.go b/lib/service/service.go index 731b1bee7c8..419f2392fd9 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -1158,6 +1158,7 @@ func (process *TeleportProcess) initAuthService() error { Spec: services.ServerSpecV2{ Addr: authAddr, Hostname: process.Config.Hostname, + Version: teleport.Version, }, } state, err := process.storage.GetState(teleport.RoleAdmin) @@ -1346,7 +1347,7 @@ func (process *TeleportProcess) newLocalCacheForProxy(clt auth.ClientI, cacheNam return process.newLocalCache(clt, cache.ForProxy, cacheName) } -// newAccessPointCache returns new instance of access point +// newLocalCache returns new instance of access point func (process *TeleportProcess) newLocalCache(clt auth.ClientI, setupConfig cache.SetupConfigFn, cacheName []string) (auth.AccessPoint, error) { // if caching is disabled, return access point if !process.Config.CachePolicy.Enabled { diff --git a/lib/services/identity.go b/lib/services/identity.go index 564617f819a..e52b94e7408 100644 --- a/lib/services/identity.go +++ b/lib/services/identity.go @@ -21,6 +21,7 @@ limitations under the License. package services import ( + "context" "fmt" "time" @@ -124,18 +125,6 @@ type Identity interface { // UpsertPassword upserts new password and OTP token UpsertPassword(user string, password []byte) error - // UpsertSignupToken upserts signup token - one time token that lets user to create a user account - UpsertSignupToken(token string, tokenData SignupToken, ttl time.Duration) error - - // GetSignupToken returns signup token data - GetSignupToken(token string) (*SignupToken, error) - - // GetSignupTokens returns a list of signup tokens - GetSignupTokens() ([]SignupToken, error) - - // DeleteSignupToken deletes signup token from the storage - DeleteSignupToken(token string) error - // UpsertU2FRegisterChallenge upserts a U2F challenge for a new user corresponding to the token UpsertU2FRegisterChallenge(token string, u2fChallenge *u2f.Challenge) error @@ -201,18 +190,42 @@ type Identity interface { // CreateGithubConnector creates a new Github connector CreateGithubConnector(connector GithubConnector) error + // UpsertGithubConnector creates or updates a new Github connector UpsertGithubConnector(connector GithubConnector) error + // GetGithubConnectors returns all configured Github connectors GetGithubConnectors(withSecrets bool) ([]GithubConnector, error) + // GetGithubConnector returns a Github connector by its name GetGithubConnector(name string, withSecrets bool) (GithubConnector, error) + // DeleteGithubConnector deletes a Github connector by its name DeleteGithubConnector(name string) error + // CreateGithubAuthRequest creates a new auth request for Github OAuth2 flow CreateGithubAuthRequest(req GithubAuthRequest) error + // GetGithubAuthRequest retrieves Github auth request by the token GetGithubAuthRequest(stateToken string) (*GithubAuthRequest, error) + + // CreateResetPasswordToken creates a token + CreateResetPasswordToken(ctx context.Context, resetPasswordToken ResetPasswordToken) (ResetPasswordToken, error) + + // DeleteResetPasswordToken deletes a token + DeleteResetPasswordToken(ctx context.Context, tokenID string) error + + // GetResetPasswordTokens returns tokens + GetResetPasswordTokens(ctx context.Context) ([]ResetPasswordToken, error) + + // GetResetPasswordToken returns a token + GetResetPasswordToken(ctx context.Context, tokenID string) (ResetPasswordToken, error) + + // UpsertResetPasswordTokenSecrets upserts token secrets + UpsertResetPasswordTokenSecrets(ctx context.Context, secrets ResetPasswordTokenSecrets) error + + // GetResetPasswordTokenSecrets returns token secrets + GetResetPasswordTokenSecrets(ctx context.Context, tokenID string) (ResetPasswordTokenSecrets, error) } // VerifyPassword makes sure password satisfies our requirements (relaxed), @@ -229,16 +242,6 @@ func VerifyPassword(password []byte) error { return nil } -// SignupToken stores metadata about user signup token -// is stored and generated when tctl add user is executed -type SignupToken struct { - Token string `json:"token"` - User UserV1 `json:"user"` - OTPKey string `json:"otp_key"` - OTPQRCode []byte `json:"otp_qr_code"` - Expires time.Time `json:"expires"` -} - const ExternalIdentitySchema = `{ "type": "object", "additionalProperties": false, @@ -308,7 +311,7 @@ func (r *GithubAuthRequest) SetExpiry(expires time.Time) { r.Expires = &expires } -// Expires returns object expiry setting. +// Expiry returns object expiry setting. func (r *GithubAuthRequest) Expiry() time.Time { if r.Expires == nil { return time.Time{} diff --git a/lib/services/invite.go b/lib/services/invite.go deleted file mode 100644 index ed803b5ccea..00000000000 --- a/lib/services/invite.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2019 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package services - -import ( - "time" -) - -// InviteTokenV3 is an invite token spec format V3 -type InviteTokenV3 struct { - // Kind is a resource kind - always resource. - Kind string `json:"kind"` - - // SubKind is a resource sub kind - SubKind string `json:"sub_kind,omitempty"` - - // Version is a resource version. - Version string `json:"version"` - - // Metadata is metadata about the resource. - Metadata Metadata `json:"metadata"` - - // Spec is a spec of the invite token - Spec InviteTokenSpecV3 `json:"spec"` -} - -// InviteTokenSpecV3 is a spec for invite token -type InviteTokenSpecV3 struct { - // URL is a helper invite token URL - URL string `json:"url"` -} - -// NewInviteToken returns a new instance of the invite token -func NewInviteToken(token, signupURL string, expires time.Time) *InviteTokenV3 { - tok := InviteTokenV3{ - Kind: KindInviteToken, - Version: V3, - Metadata: Metadata{ - Name: token, - }, - Spec: InviteTokenSpecV3{ - URL: signupURL, - }, - } - if !expires.IsZero() { - tok.Metadata.SetExpiry(expires) - } - return &tok -} diff --git a/lib/services/local/resetpasswordtoken.go b/lib/services/local/resetpasswordtoken.go new file mode 100644 index 00000000000..533ef90a413 --- /dev/null +++ b/lib/services/local/resetpasswordtoken.go @@ -0,0 +1,149 @@ +/* +Copyright 2015 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package local + +import ( + "bytes" + "context" + + "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/services" + + "github.com/gravitational/trace" +) + +// GetResetPasswordTokens returns all ResetPasswordTokens +func (s *IdentityService) GetResetPasswordTokens(ctx context.Context) ([]services.ResetPasswordToken, error) { + startKey := backend.Key(passwordTokensPrefix) + result, err := s.GetRange(ctx, startKey, backend.RangeEnd(startKey), backend.NoLimit) + if err != nil { + return nil, trace.Wrap(err) + } + + var tokens []services.ResetPasswordToken + for _, item := range result.Items { + if !bytes.HasSuffix(item.Key, []byte(paramsPrefix)) { + continue + } + + token, err := services.GetResetPasswordTokenMarshaler().Unmarshal(item.Value) + if err != nil { + return nil, trace.Wrap(err) + } + + tokens = append(tokens, token) + } + + return tokens, nil +} + +// DeleteResetPasswordToken deletes ResetPasswordToken by ID +func (s *IdentityService) DeleteResetPasswordToken(ctx context.Context, tokenID string) error { + _, err := s.GetResetPasswordToken(ctx, tokenID) + if err != nil { + return trace.Wrap(err) + } + + startKey := backend.Key(passwordTokensPrefix, tokenID) + err = s.DeleteRange(ctx, startKey, backend.RangeEnd(startKey)) + return trace.Wrap(err) +} + +// GetResetPasswordToken returns a token by its ID +func (s *IdentityService) GetResetPasswordToken(ctx context.Context, tokenID string) (services.ResetPasswordToken, error) { + item, err := s.Get(ctx, backend.Key(passwordTokensPrefix, tokenID, paramsPrefix)) + if err != nil { + if trace.IsNotFound(err) { + return nil, trace.NotFound("reset password token(%v) not found", tokenID) + } + return nil, trace.Wrap(err) + } + + token, err := services.GetResetPasswordTokenMarshaler().Unmarshal(item.Value) + if err != nil { + return nil, trace.Wrap(err) + } + + return token, nil +} + +// CreateResetPasswordToken creates a token that is used for signups and resets +func (s *IdentityService) CreateResetPasswordToken(ctx context.Context, token services.ResetPasswordToken) (services.ResetPasswordToken, error) { + if err := token.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + + value, err := services.GetResetPasswordTokenMarshaler().Marshal(token) + if err != nil { + return nil, trace.Wrap(err) + } + + item := backend.Item{ + Key: backend.Key(passwordTokensPrefix, token.GetName(), paramsPrefix), + Value: value, + Expires: token.Expiry(), + } + _, err = s.Create(ctx, item) + if err != nil { + return nil, trace.Wrap(err) + } + + return token, nil +} + +// GetResetPasswordTokenSecrets returns token secrets +func (s *IdentityService) GetResetPasswordTokenSecrets(ctx context.Context, tokenID string) (services.ResetPasswordTokenSecrets, error) { + item, err := s.Get(ctx, backend.Key(passwordTokensPrefix, tokenID, secretsPrefix)) + if err != nil { + if trace.IsNotFound(err) { + return nil, trace.NotFound("reset password token(%v) secrets not found", tokenID) + } + return nil, trace.Wrap(err) + } + + secrets, err := services.UnmarshalResetPasswordTokenSecrets(item.Value) + if err != nil { + return nil, trace.Wrap(err) + } + + return secrets, nil +} + +// UpsertResetPasswordTokenSecrets upserts token secrets +func (s *IdentityService) UpsertResetPasswordTokenSecrets(ctx context.Context, secrets services.ResetPasswordTokenSecrets) error { + if err := secrets.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + + value, err := services.MarshalResetPasswordTokenSecrets(secrets) + if err != nil { + return trace.Wrap(err) + } + item := backend.Item{ + Key: backend.Key(passwordTokensPrefix, secrets.GetName(), secretsPrefix), + Value: value, + Expires: secrets.Expiry(), + } + _, err = s.Put(ctx, item) + + return trace.Wrap(err) +} + +const ( + passwordTokensPrefix = "resetpasswordtokens" + secretsPrefix = "secrets" +) diff --git a/lib/services/local/users.go b/lib/services/local/users.go index b16167a2f25..721f90de7df 100644 --- a/lib/services/local/users.go +++ b/lib/services/local/users.go @@ -414,7 +414,7 @@ func (s *IdentityService) GetTOTP(user string) (string, error) { item, err := s.Get(context.TODO(), backend.Key(webPrefix, usersPrefix, user, totpPrefix)) if err != nil { if trace.IsNotFound(err) { - return "", trace.NotFound("user %q is not found", user) + return "", trace.NotFound("OTP key for user(%q) is not found", user) } return "", trace.Wrap(err) } @@ -593,74 +593,6 @@ func (s *IdentityService) UpsertPassword(user string, password []byte) error { return nil } -// UpsertSignupToken upserts signup token - one time token that lets user to create a user account -func (s *IdentityService) UpsertSignupToken(token string, tokenData services.SignupToken, ttl time.Duration) error { - if ttl < time.Second || ttl > defaults.MaxSignupTokenTTL { - ttl = defaults.MaxSignupTokenTTL - } - tokenData.Expires = time.Now().UTC().Add(ttl) - value, err := json.Marshal(tokenData) - if err != nil { - return trace.Wrap(err) - } - item := backend.Item{ - Key: backend.Key(userTokensPrefix, token), - Value: value, - Expires: tokenData.Expires, - } - _, err = s.Put(context.TODO(), item) - if err != nil { - return trace.Wrap(err) - } - return nil - -} - -// GetSignupToken returns signup token data -func (s *IdentityService) GetSignupToken(token string) (*services.SignupToken, error) { - if token == "" { - return nil, trace.BadParameter("missing token") - } - item, err := s.Get(context.TODO(), backend.Key(userTokensPrefix, token)) - if err != nil { - return nil, trace.Wrap(err) - } - var signupToken services.SignupToken - err = json.Unmarshal(item.Value, &signupToken) - if err != nil { - return nil, trace.Wrap(err) - } - return &signupToken, nil -} - -// GetSignupTokens returns all non-expired user tokens -func (s *IdentityService) GetSignupTokens() ([]services.SignupToken, error) { - startKey := backend.Key(userTokensPrefix) - result, err := s.GetRange(context.TODO(), startKey, backend.RangeEnd(startKey), backend.NoLimit) - if err != nil { - return nil, trace.Wrap(err) - } - tokens := make([]services.SignupToken, len(result.Items)) - for i, item := range result.Items { - var signupToken services.SignupToken - err = json.Unmarshal(item.Value, &signupToken) - if err != nil { - return nil, trace.Wrap(err) - } - tokens[i] = signupToken - } - return tokens, nil -} - -// DeleteSignupToken deletes signup token from the storage -func (s *IdentityService) DeleteSignupToken(token string) error { - if token == "" { - return trace.BadParameter("missing parameter token") - } - err := s.Delete(context.TODO(), backend.Key(userTokensPrefix, token)) - return trace.Wrap(err) -} - func (s *IdentityService) UpsertU2FRegisterChallenge(token string, u2fChallenge *u2f.Challenge) error { if token == "" { return trace.BadParameter("missing parmeter token") @@ -1243,7 +1175,6 @@ const ( samlPrefix = "saml" githubPrefix = "github" requestsPrefix = "requests" - userTokensPrefix = "addusertokens" u2fRegChalPrefix = "adduseru2fchallenges" usedTOTPPrefix = "used_totp" usedTOTPTTL = 30 * time.Second diff --git a/lib/services/resetpasswordtoken.go b/lib/services/resetpasswordtoken.go new file mode 100644 index 00000000000..37d4dae56ce --- /dev/null +++ b/lib/services/resetpasswordtoken.go @@ -0,0 +1,210 @@ +/* +Copyright 2020 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package services + +import ( + "fmt" + "time" + + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/utils" + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" +) + +// ResetPasswordToken represents a temporary token used to reset passwords +type ResetPasswordToken interface { + // Resource provides common resource properties + Resource + // GetUser returns User + GetUser() string + // GetCreated returns Created + GetCreated() time.Time + // GetURL returns URL + GetURL() string + // SetURL returns URL + SetURL(string) + // CheckAndSetDefaults checks and set default values for any missing fields. + CheckAndSetDefaults() error +} + +// GetName returns Name +func (u *ResetPasswordTokenV3) GetName() string { + return u.Metadata.Name +} + +// GetUser returns User +func (u *ResetPasswordTokenV3) GetUser() string { + return u.Spec.User +} + +// GetCreated returns Created +func (u *ResetPasswordTokenV3) GetCreated() time.Time { + return u.Spec.Created +} + +// GetURL returns URL +func (u *ResetPasswordTokenV3) GetURL() string { + return u.Spec.URL +} + +// SetURL sets URL +func (u *ResetPasswordTokenV3) SetURL(url string) { + u.Spec.URL = url +} + +// Expiry returns object expiry setting +func (u *ResetPasswordTokenV3) Expiry() time.Time { + return u.Metadata.Expiry() +} + +// SetExpiry sets object expiry +func (u *ResetPasswordTokenV3) SetExpiry(t time.Time) { + u.Metadata.SetExpiry(t) +} + +// SetTTL sets Expires header using current clock +func (u *ResetPasswordTokenV3) SetTTL(clock clockwork.Clock, ttl time.Duration) { + u.Metadata.SetTTL(clock, ttl) +} + +// GetMetadata returns object metadata +func (u *ResetPasswordTokenV3) GetMetadata() Metadata { + return u.Metadata +} + +// GetVersion returns resource version +func (u *ResetPasswordTokenV3) GetVersion() string { + return u.Version +} + +// GetKind returns resource kind +func (u *ResetPasswordTokenV3) GetKind() string { + return u.Kind +} + +// SetName sets the name of the resource +func (u *ResetPasswordTokenV3) SetName(name string) { + u.Metadata.Name = name +} + +// GetResourceID returns resource ID +func (u *ResetPasswordTokenV3) GetResourceID() int64 { + return u.Metadata.ID +} + +// SetResourceID sets resource ID +func (u *ResetPasswordTokenV3) SetResourceID(id int64) { + u.Metadata.ID = id +} + +// GetSubKind returns resource sub kind +func (u *ResetPasswordTokenV3) GetSubKind() string { + return u.SubKind +} + +// SetSubKind sets resource subkind +func (u *ResetPasswordTokenV3) SetSubKind(s string) { + u.SubKind = s +} + +// CheckAndSetDefaults checks and set default values for any missing fields. +func (u ResetPasswordTokenV3) CheckAndSetDefaults() error { + return u.Metadata.CheckAndSetDefaults() +} + +// // String represents a human readable version of the token +func (u *ResetPasswordTokenV3) String() string { + return fmt.Sprintf("ResetPasswordTokenV3(tokenID=%v, user=%v, expires at %v)", u.GetName(), u.Spec.User, u.Expiry()) +} + +// NewResetPasswordToken is a convenience wa to create a RemoteCluster resource. +func NewResetPasswordToken(tokenID string) ResetPasswordTokenV3 { + return ResetPasswordTokenV3{ + Kind: KindResetPasswordToken, + Version: V3, + Metadata: Metadata{ + Name: tokenID, + Namespace: defaults.Namespace, + }, + } +} + +// ResetPasswordTokenSpecV3Template is a template for V3 ResetPasswordToken JSON schema +const ResetPasswordTokenSpecV3Template = `{ + "type": "object", + "additionalProperties": false, + "properties": { + "user": { + "type": ["string"] + }, + "created": { + "type": ["string"] + }, + "url": { + "type": ["string"] + } + } +}` + +type TeleportResetPasswordTokenMarshaler struct{} + +// ResetPasswordTokenMarshaler implements marshal/unmarshal of ResetPasswordToken implementations +// mostly adds support for extended versions +type ResetPasswordTokenMarshaler interface { + // Marshal marshals token to binary representation + Marshal(t ResetPasswordToken, opts ...MarshalOption) ([]byte, error) + // Unmarshal unmarshals token from binary representation + Unmarshal(bytes []byte, opts ...MarshalOption) (ResetPasswordToken, error) +} + +var resetPasswordTokenMarshaler ResetPasswordTokenMarshaler = &TeleportResetPasswordTokenMarshaler{} + +// SetResetTokenMarshaler sets global ResetPasswordToken marshaler +func SetResetTokenMarshaler(m ResetPasswordTokenMarshaler) { + marshalerMutex.Lock() + defer marshalerMutex.Unlock() + resetPasswordTokenMarshaler = m +} + +// GetResetPasswordTokenMarshaler returns ResetPasswordToken marshaler +func GetResetPasswordTokenMarshaler() ResetPasswordTokenMarshaler { + marshalerMutex.Lock() + defer marshalerMutex.Unlock() + return resetPasswordTokenMarshaler +} + +// Unmarshal unmarshals ResetPasswordToken +func (t *TeleportResetPasswordTokenMarshaler) Unmarshal(bytes []byte, opts ...MarshalOption) (ResetPasswordToken, error) { + if len(bytes) == 0 { + return nil, trace.BadParameter("missing resource data") + } + + var token ResetPasswordTokenV3 + schema := fmt.Sprintf(V2SchemaTemplate, MetadataSchema, ResetPasswordTokenSpecV3Template, DefaultDefinitions) + err := utils.UnmarshalWithSchema(schema, &token, bytes) + if err != nil { + return nil, trace.BadParameter(err.Error()) + } + + return &token, nil +} + +// Marshal marshals role to JSON or YAML. +func (t *TeleportResetPasswordTokenMarshaler) Marshal(token ResetPasswordToken, opts ...MarshalOption) ([]byte, error) { + return utils.FastMarshal(token) +} diff --git a/lib/services/resetpasswordtoken_test.go b/lib/services/resetpasswordtoken_test.go new file mode 100644 index 00000000000..66e31293a82 --- /dev/null +++ b/lib/services/resetpasswordtoken_test.go @@ -0,0 +1,91 @@ +/* +Copyright 2020 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package services + +import ( + "fmt" + "time" + + "github.com/gravitational/teleport/lib/fixtures" + "github.com/gravitational/teleport/lib/utils" + + "gopkg.in/check.v1" +) + +type ResetPasswordTokenSuite struct{} + +var _ = check.Suite(&ResetPasswordTokenSuite{}) +var _ = fmt.Printf + +func (s *ResetPasswordTokenSuite) SetUpSuite(c *check.C) { + utils.InitLoggerForTests() +} + +func (s *ResetPasswordTokenSuite) TestUnmarshal(c *check.C) { + created, err := time.Parse(time.RFC3339, "2020-01-14T18:52:39.523076855Z") + c.Assert(err, check.IsNil) + + type testCase struct { + description string + input string + expected ResetPasswordToken + } + + testCases := []testCase{ + { + description: "simple case", + input: ` + { + "kind": "user_token", + "version": "v3", + "metadata": { + "name": "tokenId" + }, + "spec": { + "user": "example@example.com", + "created": "2020-01-14T18:52:39.523076855Z", + "url": "https://localhost" + } + } + `, + expected: &ResetPasswordTokenV3{ + Kind: KindResetPasswordToken, + Version: V3, + Metadata: Metadata{ + Name: "tokenId", + }, + Spec: ResetPasswordTokenSpecV3{ + Created: created, + User: "example@example.com", + URL: "https://localhost", + }, + }, + }, + } + + marshaler := GetResetPasswordTokenMarshaler() + for _, tc := range testCases { + comment := check.Commentf("test case %q", tc.description) + out, err := marshaler.Unmarshal([]byte(tc.input)) + c.Assert(err, check.IsNil, comment) + fixtures.DeepCompare(c, tc.expected, out) + data, err := marshaler.Marshal(out) + c.Assert(err, check.IsNil, comment) + out2, err := marshaler.Unmarshal(data) + c.Assert(err, check.IsNil, comment) + fixtures.DeepCompare(c, tc.expected, out2) + } +} diff --git a/lib/services/resetpasswordtokensecrets.go b/lib/services/resetpasswordtokensecrets.go new file mode 100644 index 00000000000..4fd9586c20a --- /dev/null +++ b/lib/services/resetpasswordtokensecrets.go @@ -0,0 +1,230 @@ +/* +Copyright 2020 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package services + +import ( + "fmt" + "time" + + "github.com/gravitational/teleport/lib/utils" + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" +) + +// ResetPasswordTokenSecrets contains token secrets +type ResetPasswordTokenSecrets interface { + // Resource provides common resource properties + Resource + // GetCreated returns Created + GetCreated() time.Time + // GetQRCode returns QRCode + GetQRCode() []byte + // GetOTPKey returns OTP key + GetOTPKey() string + // CheckAndSetDefaults checks and set default values for any missing fields. + CheckAndSetDefaults() error +} + +// GetName returns Name +func (u *ResetPasswordTokenSecretsV3) GetName() string { + return u.Metadata.Name +} + +// GetCreated returns Created +func (u *ResetPasswordTokenSecretsV3) GetCreated() time.Time { + return u.Spec.Created +} + +// GetOTPKey returns OTP Key +func (u *ResetPasswordTokenSecretsV3) GetOTPKey() string { + return u.Spec.OTPKey +} + +// GetQRCode returns QRCode +func (u *ResetPasswordTokenSecretsV3) GetQRCode() []byte { + return []byte(u.Spec.QRCode) +} + +// Expiry returns object expiry setting +func (u *ResetPasswordTokenSecretsV3) Expiry() time.Time { + return u.Metadata.Expiry() +} + +// SetExpiry sets object expiry +func (u *ResetPasswordTokenSecretsV3) SetExpiry(t time.Time) { + u.Metadata.SetExpiry(t) +} + +// SetTTL sets Expires header using current clock +func (u *ResetPasswordTokenSecretsV3) SetTTL(clock clockwork.Clock, ttl time.Duration) { + u.Metadata.SetTTL(clock, ttl) +} + +// GetMetadata returns object metadata +func (u *ResetPasswordTokenSecretsV3) GetMetadata() Metadata { + return u.Metadata +} + +// GetVersion returns resource version +func (u *ResetPasswordTokenSecretsV3) GetVersion() string { + return u.Version +} + +// GetKind returns resource kind +func (u *ResetPasswordTokenSecretsV3) GetKind() string { + return u.Kind +} + +// SetName sets the name of the resource +func (u *ResetPasswordTokenSecretsV3) SetName(name string) { + u.Metadata.Name = name +} + +// GetResourceID returns resource ID +func (u *ResetPasswordTokenSecretsV3) GetResourceID() int64 { + return u.Metadata.ID +} + +// SetResourceID sets resource ID +func (u *ResetPasswordTokenSecretsV3) SetResourceID(id int64) { + u.Metadata.ID = id +} + +// GetSubKind returns resource sub kind +func (u *ResetPasswordTokenSecretsV3) GetSubKind() string { + return u.SubKind +} + +// SetSubKind sets resource subkind +func (u *ResetPasswordTokenSecretsV3) SetSubKind(s string) { + u.SubKind = s +} + +// CheckAndSetDefaults checks and set default values for any missing fields. +func (u ResetPasswordTokenSecretsV3) CheckAndSetDefaults() error { + return u.Metadata.CheckAndSetDefaults() +} + +// // String represents a human readable version of the token secrets +func (u *ResetPasswordTokenSecretsV3) String() string { + return fmt.Sprintf("ResetPasswordTokenSecretsV3(tokenID=%v, opt_key=%v, qr_code=%v)", u.GetName(), u.Spec.OTPKey, u.Spec.QRCode) +} + +// NewResetPasswordTokenSecrets creates an instance of ResetPasswordTokenSecrets +func NewResetPasswordTokenSecrets(tokenID string) (ResetPasswordTokenSecretsV3, error) { + secrets := ResetPasswordTokenSecretsV3{ + Kind: KindResetPasswordTokenSecrets, + Version: V3, + Metadata: Metadata{ + Name: tokenID, + }, + } + + err := secrets.CheckAndSetDefaults() + if err != nil { + return ResetPasswordTokenSecretsV3{}, trace.Wrap(err) + } + + return secrets, nil +} + +// ResetPasswordTokenSecretsSpecV3Template is a template for V3 ResetPasswordTokenSecrets JSON schema +const ResetPasswordTokenSecretsSpecV3Template = `{ + "type": "object", + "additionalProperties": false, + "properties": { + "opt_key": { + "type": ["string"] + }, + "qr_code": { + "type": ["string"] + }, + "created": { + "type": ["string"] + } + } +}` + +// UnmarshalResetPasswordTokenSecrets unmarshals ResetPasswordTokenSecrets +func UnmarshalResetPasswordTokenSecrets(bytes []byte) (ResetPasswordTokenSecrets, error) { + if len(bytes) == 0 { + return nil, trace.BadParameter("missing resource data") + } + + schema := fmt.Sprintf(V2SchemaTemplate, MetadataSchema, ResetPasswordTokenSecretsSpecV3Template, DefaultDefinitions) + + var secrets ResetPasswordTokenSecretsV3 + err := utils.UnmarshalWithSchema(schema, &secrets, bytes) + if err != nil { + return nil, trace.BadParameter(err.Error()) + } + + return &secrets, nil +} + +// MarshalResetPasswordTokenSecrets marshals role to JSON or YAML. +func MarshalResetPasswordTokenSecrets(secrets ResetPasswordTokenSecrets, opts ...MarshalOption) ([]byte, error) { + return utils.FastMarshal(secrets) +} + +type TeleportResetPasswordTokenSecretsMarshaler struct{} + +// ResetPasswordTokenSecretsMarshaler implements marshal/unmarshal of ResetPasswordTokenSecrets implementations +// mostly adds support for extended versions +type ResetPasswordTokenSecretsMarshaler interface { + // Marshal marshals token to binary representation + Marshal(t ResetPasswordTokenSecrets, opts ...MarshalOption) ([]byte, error) + // Unmarshal unmarshals token from binary representation + Unmarshal(bytes []byte, opts ...MarshalOption) (ResetPasswordTokenSecrets, error) +} + +var resetPasswordTokenSecretsMarshaler ResetPasswordTokenSecretsMarshaler = &TeleportResetPasswordTokenSecretsMarshaler{} + +// SetResetTokenSecretsMarshaler sets global ResetPasswordTokenSecrets marshaler +func SetResetTokenSecretsMarshaler(m ResetPasswordTokenSecretsMarshaler) { + marshalerMutex.Lock() + defer marshalerMutex.Unlock() + resetPasswordTokenSecretsMarshaler = m +} + +// GetResetPasswordTokenSecretsMarshaler returns ResetPasswordTokenSecrets marshaler +func GetResetPasswordTokenSecretsMarshaler() ResetPasswordTokenSecretsMarshaler { + marshalerMutex.Lock() + defer marshalerMutex.Unlock() + return resetPasswordTokenSecretsMarshaler +} + +// Unmarshal unmarshals ResetPasswordTokenSecrets +func (t *TeleportResetPasswordTokenSecretsMarshaler) Unmarshal(bytes []byte, opts ...MarshalOption) (ResetPasswordTokenSecrets, error) { + if len(bytes) == 0 { + return nil, trace.BadParameter("missing resource data") + } + + var secrets ResetPasswordTokenSecretsV3 + schema := fmt.Sprintf(V2SchemaTemplate, MetadataSchema, ResetPasswordTokenSecretsSpecV3Template, DefaultDefinitions) + err := utils.UnmarshalWithSchema(schema, &secrets, bytes) + if err != nil { + return nil, trace.BadParameter(err.Error()) + } + + return &secrets, nil +} + +// Marshal marshals role to JSON or YAML. +func (t *TeleportResetPasswordTokenSecretsMarshaler) Marshal(secrets ResetPasswordTokenSecrets, opts ...MarshalOption) ([]byte, error) { + return utils.FastMarshal(secrets) +} diff --git a/lib/services/resource.go b/lib/services/resource.go index 5254e957421..ff5f57d6327 100644 --- a/lib/services/resource.go +++ b/lib/services/resource.go @@ -165,8 +165,11 @@ const ( // to proxy KindRemoteCluster = "remote_cluster" - // KindInviteToken is a local user invite token - KindInviteToken = "invite_token" + // KindResetPasswordToken is a token used to change user passwords + KindResetPasswordToken = "user_token" + + // KindResetPasswordTokenSecrets is reset password token secrets + KindResetPasswordTokenSecrets = "reset_password_token_secrets" // KindIdentity is local on disk identity resource KindIdentity = "identity" diff --git a/lib/services/server.go b/lib/services/server.go index 0921c7d57b7..3576999e2dd 100644 --- a/lib/services/server.go +++ b/lib/services/server.go @@ -23,6 +23,7 @@ import ( "strings" "time" + "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/trace" @@ -34,6 +35,8 @@ import ( type Server interface { // Resource provides common resource headers Resource + // GetTeleportVersion returns the teleport version the server is running on + GetTeleportVersion() string // GetAddr return server address GetAddr() string // GetHostname returns server hostname @@ -91,6 +94,11 @@ func (s *ServerV2) GetVersion() string { return s.Version } +// GetTeleportVersion returns the teleport version the server is running on +func (s *ServerV2) GetTeleportVersion() string { + return s.Spec.Version +} + // GetKind returns resource kind func (s *ServerV2) GetKind() string { return s.Kind @@ -307,7 +315,7 @@ const ( Equal = iota // OnlyTimestampsDifferent is true when only timestamps are different OnlyTimestampsDifferent = iota - // Differnt means that some fields are different + // Different means that some fields are different Different = iota ) @@ -345,6 +353,9 @@ func CompareServers(a, b Server) int { if !a.Expiry().Equal(b.Expiry()) { return OnlyTimestampsDifferent } + if a.GetTeleportVersion() != b.GetTeleportVersion() { + return Different + } return Equal } @@ -371,6 +382,7 @@ const ServerSpecV2Schema = `{ "type": "object", "additionalProperties": false, "properties": { + "version": {"type": "string"}, "addr": {"type": "string"}, "public_addr": {"type": "string"}, "hostname": {"type": "string"}, @@ -761,3 +773,28 @@ func (s SortedReverseTunnels) Less(i, j int) bool { func (s SortedReverseTunnels) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// GuessProxyHostAndVersion tries to find the first proxy with a public +// address configured and return that public addr and version. +// If no proxies are configured, it will return a guessed value by concatenating +// the first proxy's hostname with default port number, and the first proxy's +// version will also be returned. +// +// Returns empty value if there are no proxies. +func GuessProxyHostAndVersion(proxies []Server) (string, string) { + if len(proxies) < 1 { + return "", "" + } + + // find the first proxy with a public address set + for _, proxy := range proxies { + proxyHost := proxy.GetPublicAddr() + if proxyHost != "" { + return proxyHost, proxy.GetTeleportVersion() + } + } + + guessProxyHost := fmt.Sprintf("%v:%v", proxies[0].GetHostname(), defaults.HTTPListenPort) + + return guessProxyHost, proxies[0].GetTeleportVersion() +} diff --git a/lib/services/servers_test.go b/lib/services/servers_test.go index 79d84ec510b..825aebbf30a 100644 --- a/lib/services/servers_test.go +++ b/lib/services/servers_test.go @@ -51,6 +51,7 @@ func (s *ServerSuite) TestServersCompare(c *check.C) { Spec: ServerSpecV2{ Addr: "localhost:3022", CmdLabels: map[string]CommandLabelV2{"a": CommandLabelV2{Period: Duration(time.Minute), Command: []string{"ls", "-l"}}}, + Version: "4.0.0", }, } node.SetExpiry(time.Date(2018, 1, 2, 3, 4, 5, 6, time.UTC)) @@ -87,6 +88,11 @@ func (s *ServerSuite) TestServersCompare(c *check.C) { node2.Spec.Hostname = "luna2" c.Assert(CompareServers(node, &node2), check.Equals, Different) + // TeleportVersion has changed + node2 = *node + node2.Spec.Version = "5.0.0" + c.Assert(CompareServers(node, &node2), check.Equals, Different) + // Rotation has changed node2 = *node node2.Spec.Rotation = Rotation{ @@ -104,3 +110,28 @@ func (s *ServerSuite) TestServersCompare(c *check.C) { } c.Assert(CompareServers(node, &node2), check.Equals, Different) } + +func (s *ServerSuite) TestGuessProxyHostAndVersion(c *check.C) { + // nil proxies + host, version := GuessProxyHostAndVersion(nil) + c.Assert(host, check.Equals, "") + c.Assert(version, check.Equals, "") + + // no public addr set + proxyA := ServerV2{} + proxyA.Spec.Hostname = "test-A" + proxyA.Spec.Version = "test-A" + + host, version = GuessProxyHostAndVersion([]Server{&proxyA}) + c.Assert(host, check.Equals, fmt.Sprintf("%v:%v", proxyA.Spec.Hostname, defaults.HTTPListenPort)) + c.Assert(version, check.Equals, proxyA.Spec.Version) + + // with a proxy with public addr set + proxyB := ServerV2{} + proxyB.Spec.PublicAddr = "test-B" + proxyB.Spec.Version = "test-B" + + host, version = GuessProxyHostAndVersion([]Server{&proxyA, &proxyB}) + c.Assert(host, check.Equals, proxyB.Spec.PublicAddr) + c.Assert(version, check.Equals, proxyB.Spec.Version) +} diff --git a/lib/services/types.pb.go b/lib/services/types.pb.go index acfdcdecbec..73990013d60 100644 --- a/lib/services/types.pb.go +++ b/lib/services/types.pb.go @@ -64,7 +64,7 @@ func (x RequestState) String() string { return proto.EnumName(RequestState_name, int32(x)) } func (RequestState) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{0} + return fileDescriptor_types_6fca1a07e7522128, []int{0} } type KeepAlive struct { @@ -85,7 +85,7 @@ func (m *KeepAlive) Reset() { *m = KeepAlive{} } func (m *KeepAlive) String() string { return proto.CompactTextString(m) } func (*KeepAlive) ProtoMessage() {} func (*KeepAlive) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{0} + return fileDescriptor_types_6fca1a07e7522128, []int{0} } func (m *KeepAlive) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -125,7 +125,8 @@ type Metadata struct { Description string `protobuf:"bytes,3,opt,name=Description,proto3" json:"description,omitempty"` // Labels is a set of labels Labels map[string]string `protobuf:"bytes,5,rep,name=Labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Expires is a global expiry time header can be set on any resource in the system. + // Expires is a global expiry time header can be set on any resource in the + // system. Expires *time.Time `protobuf:"bytes,6,opt,name=Expires,stdtime" json:"expires,omitempty"` // ID is a record ID ID int64 `protobuf:"varint,7,opt,name=ID,proto3" json:"id,omitempty"` @@ -138,7 +139,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{1} + return fileDescriptor_types_6fca1a07e7522128, []int{1} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -197,7 +198,7 @@ type Rotation struct { func (m *Rotation) Reset() { *m = Rotation{} } func (*Rotation) ProtoMessage() {} func (*Rotation) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{2} + return fileDescriptor_types_6fca1a07e7522128, []int{2} } func (m *Rotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -244,7 +245,7 @@ func (m *RotationSchedule) Reset() { *m = RotationSchedule{} } func (m *RotationSchedule) String() string { return proto.CompactTextString(m) } func (*RotationSchedule) ProtoMessage() {} func (*RotationSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{3} + return fileDescriptor_types_6fca1a07e7522128, []int{3} } func (m *RotationSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -293,7 +294,7 @@ func (m *ResourceHeader) Reset() { *m = ResourceHeader{} } func (m *ResourceHeader) String() string { return proto.CompactTextString(m) } func (*ResourceHeader) ProtoMessage() {} func (*ResourceHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{4} + return fileDescriptor_types_6fca1a07e7522128, []int{4} } func (m *ResourceHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -342,7 +343,7 @@ type ServerV2 struct { func (m *ServerV2) Reset() { *m = ServerV2{} } func (*ServerV2) ProtoMessage() {} func (*ServerV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{5} + return fileDescriptor_types_6fca1a07e7522128, []int{5} } func (m *ServerV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -385,7 +386,9 @@ type ServerSpecV2 struct { Rotation Rotation `protobuf:"bytes,5,opt,name=Rotation" json:"rotation,omitempty"` // UseTunnel indicates that connections to this server should occur over a // reverse tunnel. - UseTunnel bool `protobuf:"varint,6,opt,name=UseTunnel,proto3" json:"use_tunnel,omitempty"` + UseTunnel bool `protobuf:"varint,6,opt,name=UseTunnel,proto3" json:"use_tunnel,omitempty"` + // TeleportVersion is the teleport version that the server is running on + Version string `protobuf:"bytes,7,opt,name=Version,proto3" json:"version"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -395,7 +398,7 @@ func (m *ServerSpecV2) Reset() { *m = ServerSpecV2{} } func (m *ServerSpecV2) String() string { return proto.CompactTextString(m) } func (*ServerSpecV2) ProtoMessage() {} func (*ServerSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{6} + return fileDescriptor_types_6fca1a07e7522128, []int{6} } func (m *ServerSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -442,7 +445,7 @@ func (m *CommandLabelV2) Reset() { *m = CommandLabelV2{} } func (m *CommandLabelV2) String() string { return proto.CompactTextString(m) } func (*CommandLabelV2) ProtoMessage() {} func (*CommandLabelV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{7} + return fileDescriptor_types_6fca1a07e7522128, []int{7} } func (m *CommandLabelV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -486,7 +489,7 @@ func (m *TLSKeyPair) Reset() { *m = TLSKeyPair{} } func (m *TLSKeyPair) String() string { return proto.CompactTextString(m) } func (*TLSKeyPair) ProtoMessage() {} func (*TLSKeyPair) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{8} + return fileDescriptor_types_6fca1a07e7522128, []int{8} } func (m *TLSKeyPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -535,7 +538,7 @@ type CertAuthorityV2 struct { func (m *CertAuthorityV2) Reset() { *m = CertAuthorityV2{} } func (*CertAuthorityV2) ProtoMessage() {} func (*CertAuthorityV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{9} + return fileDescriptor_types_6fca1a07e7522128, []int{9} } func (m *CertAuthorityV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -598,7 +601,7 @@ func (m *CertAuthoritySpecV2) Reset() { *m = CertAuthoritySpecV2{} } func (m *CertAuthoritySpecV2) String() string { return proto.CompactTextString(m) } func (*CertAuthoritySpecV2) ProtoMessage() {} func (*CertAuthoritySpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{10} + return fileDescriptor_types_6fca1a07e7522128, []int{10} } func (m *CertAuthoritySpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -643,7 +646,7 @@ func (m *RoleMapping) Reset() { *m = RoleMapping{} } func (m *RoleMapping) String() string { return proto.CompactTextString(m) } func (*RoleMapping) ProtoMessage() {} func (*RoleMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{11} + return fileDescriptor_types_6fca1a07e7522128, []int{11} } func (m *RoleMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -678,7 +681,8 @@ type ProvisionTokenV1 struct { // that will be converted to metadata in the SSH and X509 // certificates issued to the user of the token Roles []github_com_gravitational_teleport.Role `protobuf:"bytes,1,rep,name=Roles,casttype=github.com/gravitational/teleport.Role" json:"roles"` - // Expires is a global expiry time header can be set on any resource in the system. + // Expires is a global expiry time header can be set on any resource in the + // system. Expires time.Time `protobuf:"bytes,2,opt,name=Expires,stdtime" json:"expires,omitempty"` // Token is a token name Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"token"` @@ -690,7 +694,7 @@ type ProvisionTokenV1 struct { func (m *ProvisionTokenV1) Reset() { *m = ProvisionTokenV1{} } func (*ProvisionTokenV1) ProtoMessage() {} func (*ProvisionTokenV1) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{12} + return fileDescriptor_types_6fca1a07e7522128, []int{12} } func (m *ProvisionTokenV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -739,7 +743,7 @@ type ProvisionTokenV2 struct { func (m *ProvisionTokenV2) Reset() { *m = ProvisionTokenV2{} } func (*ProvisionTokenV2) ProtoMessage() {} func (*ProvisionTokenV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{13} + return fileDescriptor_types_6fca1a07e7522128, []int{13} } func (m *ProvisionTokenV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -783,7 +787,7 @@ func (m *ProvisionTokenSpecV2) Reset() { *m = ProvisionTokenSpecV2{} } func (m *ProvisionTokenSpecV2) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenSpecV2) ProtoMessage() {} func (*ProvisionTokenSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{14} + return fileDescriptor_types_6fca1a07e7522128, []int{14} } func (m *ProvisionTokenSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -832,7 +836,7 @@ type StaticTokensV2 struct { func (m *StaticTokensV2) Reset() { *m = StaticTokensV2{} } func (*StaticTokensV2) ProtoMessage() {} func (*StaticTokensV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{15} + return fileDescriptor_types_6fca1a07e7522128, []int{15} } func (m *StaticTokensV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -875,7 +879,7 @@ func (m *StaticTokensSpecV2) Reset() { *m = StaticTokensSpecV2{} } func (m *StaticTokensSpecV2) String() string { return proto.CompactTextString(m) } func (*StaticTokensSpecV2) ProtoMessage() {} func (*StaticTokensSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{16} + return fileDescriptor_types_6fca1a07e7522128, []int{16} } func (m *StaticTokensSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -924,7 +928,7 @@ type ClusterNameV2 struct { func (m *ClusterNameV2) Reset() { *m = ClusterNameV2{} } func (*ClusterNameV2) ProtoMessage() {} func (*ClusterNameV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{17} + return fileDescriptor_types_6fca1a07e7522128, []int{17} } func (m *ClusterNameV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -967,7 +971,7 @@ func (m *ClusterNameSpecV2) Reset() { *m = ClusterNameSpecV2{} } func (m *ClusterNameSpecV2) String() string { return proto.CompactTextString(m) } func (*ClusterNameSpecV2) ProtoMessage() {} func (*ClusterNameSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{18} + return fileDescriptor_types_6fca1a07e7522128, []int{18} } func (m *ClusterNameSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1016,7 +1020,7 @@ type ClusterConfigV3 struct { func (m *ClusterConfigV3) Reset() { *m = ClusterConfigV3{} } func (*ClusterConfigV3) ProtoMessage() {} func (*ClusterConfigV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{19} + return fileDescriptor_types_6fca1a07e7522128, []int{19} } func (m *ClusterConfigV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1057,7 +1061,8 @@ type ClusterConfigSpecV3 struct { ProxyChecksHostKeys string `protobuf:"bytes,3,opt,name=ProxyChecksHostKeys,proto3" json:"proxy_checks_host_keys"` // Audit is a section with audit config Audit AuditConfig `protobuf:"bytes,4,opt,name=Audit" json:"audit"` - // ClientIdleTimeout sets global cluster default setting for client idle timeouts + // ClientIdleTimeout sets global cluster default setting for client idle + // timeouts ClientIdleTimeout Duration `protobuf:"varint,5,opt,name=ClientIdleTimeout,proto3,casttype=Duration" json:"client_idle_timeout"` // DisconnectExpiredCert provides disconnect expired certificate setting - // if true, connections with expired client certificates will get disconnected @@ -1065,7 +1070,8 @@ type ClusterConfigSpecV3 struct { // KeepAliveInterval is the interval the server sends keep-alive messsages // to the client at. KeepAliveInterval Duration `protobuf:"varint,7,opt,name=KeepAliveInterval,proto3,casttype=Duration" json:"keep_alive_interval"` - // KeepAliveCountMax is the number of keep-alive messages that can be missed before + // KeepAliveCountMax is the number of keep-alive messages that can be missed + // before // the server disconnects the connection to the client. KeepAliveCountMax int64 `protobuf:"varint,8,opt,name=KeepAliveCountMax,proto3" json:"keep_alive_count_max"` // LocalAuth is true if local authentication is enabled. @@ -1079,7 +1085,7 @@ func (m *ClusterConfigSpecV3) Reset() { *m = ClusterConfigSpecV3{} } func (m *ClusterConfigSpecV3) String() string { return proto.CompactTextString(m) } func (*ClusterConfigSpecV3) ProtoMessage() {} func (*ClusterConfigSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{20} + return fileDescriptor_types_6fca1a07e7522128, []int{20} } func (m *ClusterConfigSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1132,7 +1138,7 @@ func (m *AuditConfig) Reset() { *m = AuditConfig{} } func (m *AuditConfig) String() string { return proto.CompactTextString(m) } func (*AuditConfig) ProtoMessage() {} func (*AuditConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{21} + return fileDescriptor_types_6fca1a07e7522128, []int{21} } func (m *AuditConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1182,7 +1188,7 @@ func (m *Namespace) Reset() { *m = Namespace{} } func (m *Namespace) String() string { return proto.CompactTextString(m) } func (*Namespace) ProtoMessage() {} func (*Namespace) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{22} + return fileDescriptor_types_6fca1a07e7522128, []int{22} } func (m *Namespace) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1222,7 +1228,7 @@ func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } func (m *NamespaceSpec) String() string { return proto.CompactTextString(m) } func (*NamespaceSpec) ProtoMessage() {} func (*NamespaceSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{23} + return fileDescriptor_types_6fca1a07e7522128, []int{23} } func (m *NamespaceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1251,6 +1257,192 @@ func (m *NamespaceSpec) XXX_DiscardUnknown() { var xxx_messageInfo_NamespaceSpec proto.InternalMessageInfo +type ResetPasswordTokenV3 struct { + // Kind is a resource kind + Kind string `protobuf:"bytes,1,opt,name=Kind,proto3" json:"kind"` + // SubKind is an optional resource sub kind, used in some resources + SubKind string `protobuf:"bytes,2,opt,name=SubKind,proto3" json:"sub_kind,omitempty"` + // Version is version + Version string `protobuf:"bytes,3,opt,name=Version,proto3" json:"version"` + // Metadata is ResetPasswordToken metadata + Metadata Metadata `protobuf:"bytes,4,opt,name=Metadata" json:"metadata"` + // Spec is an ResetPasswordToken specification + Spec ResetPasswordTokenSpecV3 `protobuf:"bytes,5,opt,name=Spec" json:"spec"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResetPasswordTokenV3) Reset() { *m = ResetPasswordTokenV3{} } +func (*ResetPasswordTokenV3) ProtoMessage() {} +func (*ResetPasswordTokenV3) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6fca1a07e7522128, []int{24} +} +func (m *ResetPasswordTokenV3) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResetPasswordTokenV3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResetPasswordTokenV3.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *ResetPasswordTokenV3) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResetPasswordTokenV3.Merge(dst, src) +} +func (m *ResetPasswordTokenV3) XXX_Size() int { + return m.Size() +} +func (m *ResetPasswordTokenV3) XXX_DiscardUnknown() { + xxx_messageInfo_ResetPasswordTokenV3.DiscardUnknown(m) +} + +var xxx_messageInfo_ResetPasswordTokenV3 proto.InternalMessageInfo + +type ResetPasswordTokenSpecV3 struct { + // User is user name associated with this token + User string `protobuf:"bytes,1,opt,name=User,proto3" json:"user"` + // URL is this token URL + URL string `protobuf:"bytes,2,opt,name=URL,proto3" json:"url"` + // Created holds information about when the token was created + Created time.Time `protobuf:"bytes,4,opt,name=Created,stdtime" json:"created,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResetPasswordTokenSpecV3) Reset() { *m = ResetPasswordTokenSpecV3{} } +func (m *ResetPasswordTokenSpecV3) String() string { return proto.CompactTextString(m) } +func (*ResetPasswordTokenSpecV3) ProtoMessage() {} +func (*ResetPasswordTokenSpecV3) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6fca1a07e7522128, []int{25} +} +func (m *ResetPasswordTokenSpecV3) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResetPasswordTokenSpecV3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResetPasswordTokenSpecV3.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *ResetPasswordTokenSpecV3) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResetPasswordTokenSpecV3.Merge(dst, src) +} +func (m *ResetPasswordTokenSpecV3) XXX_Size() int { + return m.Size() +} +func (m *ResetPasswordTokenSpecV3) XXX_DiscardUnknown() { + xxx_messageInfo_ResetPasswordTokenSpecV3.DiscardUnknown(m) +} + +var xxx_messageInfo_ResetPasswordTokenSpecV3 proto.InternalMessageInfo + +type ResetPasswordTokenSecretsV3 struct { + // Kind is a resource kind + Kind string `protobuf:"bytes,1,opt,name=Kind,proto3" json:"kind"` + // SubKind is an optional resource sub kind, used in some resources + SubKind string `protobuf:"bytes,2,opt,name=SubKind,proto3" json:"sub_kind,omitempty"` + // Version is version + Version string `protobuf:"bytes,3,opt,name=Version,proto3" json:"version"` + // Metadata is ResetPasswordTokenSecrets metadata + Metadata Metadata `protobuf:"bytes,4,opt,name=Metadata" json:"metadata"` + // Spec is an ResetPasswordTokenSecrets specification + Spec ResetPasswordTokenSecretsSpecV3 `protobuf:"bytes,5,opt,name=Spec" json:"spec"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResetPasswordTokenSecretsV3) Reset() { *m = ResetPasswordTokenSecretsV3{} } +func (*ResetPasswordTokenSecretsV3) ProtoMessage() {} +func (*ResetPasswordTokenSecretsV3) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6fca1a07e7522128, []int{26} +} +func (m *ResetPasswordTokenSecretsV3) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResetPasswordTokenSecretsV3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResetPasswordTokenSecretsV3.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *ResetPasswordTokenSecretsV3) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResetPasswordTokenSecretsV3.Merge(dst, src) +} +func (m *ResetPasswordTokenSecretsV3) XXX_Size() int { + return m.Size() +} +func (m *ResetPasswordTokenSecretsV3) XXX_DiscardUnknown() { + xxx_messageInfo_ResetPasswordTokenSecretsV3.DiscardUnknown(m) +} + +var xxx_messageInfo_ResetPasswordTokenSecretsV3 proto.InternalMessageInfo + +type ResetPasswordTokenSecretsSpecV3 struct { + // OTPKey is is a secret value of one time password secret generator + OTPKey string `protobuf:"bytes,1,opt,name=OTPKey,proto3" json:"opt_key"` + // OTPKey is is a secret value of one time password secret generator + QRCode string `protobuf:"bytes,2,opt,name=QRCode,proto3" json:"qr_code,omitempty"` + // Created holds information about when the token was created + Created time.Time `protobuf:"bytes,3,opt,name=Created,stdtime" json:"created,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResetPasswordTokenSecretsSpecV3) Reset() { *m = ResetPasswordTokenSecretsSpecV3{} } +func (m *ResetPasswordTokenSecretsSpecV3) String() string { return proto.CompactTextString(m) } +func (*ResetPasswordTokenSecretsSpecV3) ProtoMessage() {} +func (*ResetPasswordTokenSecretsSpecV3) Descriptor() ([]byte, []int) { + return fileDescriptor_types_6fca1a07e7522128, []int{27} +} +func (m *ResetPasswordTokenSecretsSpecV3) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResetPasswordTokenSecretsSpecV3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ResetPasswordTokenSecretsSpecV3.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (dst *ResetPasswordTokenSecretsSpecV3) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResetPasswordTokenSecretsSpecV3.Merge(dst, src) +} +func (m *ResetPasswordTokenSecretsSpecV3) XXX_Size() int { + return m.Size() +} +func (m *ResetPasswordTokenSecretsSpecV3) XXX_DiscardUnknown() { + xxx_messageInfo_ResetPasswordTokenSecretsSpecV3.DiscardUnknown(m) +} + +var xxx_messageInfo_ResetPasswordTokenSecretsSpecV3 proto.InternalMessageInfo + // AccessRequest represents an access request resource specification type AccessRequestV3 struct { // Kind is a resource kind @@ -1271,7 +1463,7 @@ type AccessRequestV3 struct { func (m *AccessRequestV3) Reset() { *m = AccessRequestV3{} } func (*AccessRequestV3) ProtoMessage() {} func (*AccessRequestV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{24} + return fileDescriptor_types_6fca1a07e7522128, []int{28} } func (m *AccessRequestV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1308,9 +1500,11 @@ type AccessRequestSpecV3 struct { Roles []string `protobuf:"bytes,2,rep,name=Roles" json:"roles"` // State is the current state of this access request. State RequestState `protobuf:"varint,3,opt,name=State,proto3,enum=services.RequestState" json:"state,omitempty"` - // Created encodes the time at which the request was registered with the auth server. + // Created encodes the time at which the request was registered with the auth + // server. Created time.Time `protobuf:"bytes,4,opt,name=Created,stdtime" json:"created,omitempty"` - // Expires constrains the maximum lifetime of any login session for which this request is active. + // Expires constrains the maximum lifetime of any login session for which this + // request is active. Expires time.Time `protobuf:"bytes,5,opt,name=Expires,stdtime" json:"expires,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1321,7 +1515,7 @@ func (m *AccessRequestSpecV3) Reset() { *m = AccessRequestSpecV3{} } func (m *AccessRequestSpecV3) String() string { return proto.CompactTextString(m) } func (*AccessRequestSpecV3) ProtoMessage() {} func (*AccessRequestSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{25} + return fileDescriptor_types_6fca1a07e7522128, []int{29} } func (m *AccessRequestSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1367,7 +1561,7 @@ func (m *AccessRequestFilter) Reset() { *m = AccessRequestFilter{} } func (m *AccessRequestFilter) String() string { return proto.CompactTextString(m) } func (*AccessRequestFilter) ProtoMessage() {} func (*AccessRequestFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{26} + return fileDescriptor_types_6fca1a07e7522128, []int{30} } func (m *AccessRequestFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1416,7 +1610,7 @@ type PluginDataV3 struct { func (m *PluginDataV3) Reset() { *m = PluginDataV3{} } func (*PluginDataV3) ProtoMessage() {} func (*PluginDataV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{27} + return fileDescriptor_types_6fca1a07e7522128, []int{31} } func (m *PluginDataV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1459,7 +1653,7 @@ func (m *PluginDataEntry) Reset() { *m = PluginDataEntry{} } func (m *PluginDataEntry) String() string { return proto.CompactTextString(m) } func (*PluginDataEntry) ProtoMessage() {} func (*PluginDataEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{28} + return fileDescriptor_types_6fca1a07e7522128, []int{32} } func (m *PluginDataEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1501,7 +1695,7 @@ func (m *PluginDataSpecV3) Reset() { *m = PluginDataSpecV3{} } func (m *PluginDataSpecV3) String() string { return proto.CompactTextString(m) } func (*PluginDataSpecV3) ProtoMessage() {} func (*PluginDataSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{29} + return fileDescriptor_types_6fca1a07e7522128, []int{33} } func (m *PluginDataSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1548,7 +1742,7 @@ func (m *PluginDataFilter) Reset() { *m = PluginDataFilter{} } func (m *PluginDataFilter) String() string { return proto.CompactTextString(m) } func (*PluginDataFilter) ProtoMessage() {} func (*PluginDataFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{30} + return fileDescriptor_types_6fca1a07e7522128, []int{34} } func (m *PluginDataFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1599,7 +1793,7 @@ func (m *PluginDataUpdateParams) Reset() { *m = PluginDataUpdateParams{} func (m *PluginDataUpdateParams) String() string { return proto.CompactTextString(m) } func (*PluginDataUpdateParams) ProtoMessage() {} func (*PluginDataUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{31} + return fileDescriptor_types_6fca1a07e7522128, []int{35} } func (m *PluginDataUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1648,7 +1842,7 @@ type RoleV3 struct { func (m *RoleV3) Reset() { *m = RoleV3{} } func (*RoleV3) ProtoMessage() {} func (*RoleV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{32} + return fileDescriptor_types_6fca1a07e7522128, []int{36} } func (m *RoleV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1683,7 +1877,8 @@ type RoleSpecV3 struct { Options RoleOptions `protobuf:"bytes,1,opt,name=Options" json:"options,omitempty"` // Allow is the set of conditions evaluated to grant access. Allow RoleConditions `protobuf:"bytes,2,opt,name=Allow" json:"allow,omitempty"` - // Deny is the set of conditions evaluated to deny access. Deny takes priority over allow. + // Deny is the set of conditions evaluated to deny access. Deny takes priority + // over allow. Deny RoleConditions `protobuf:"bytes,3,opt,name=Deny" json:"deny,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1694,7 +1889,7 @@ func (m *RoleSpecV3) Reset() { *m = RoleSpecV3{} } func (m *RoleSpecV3) String() string { return proto.CompactTextString(m) } func (*RoleSpecV3) ProtoMessage() {} func (*RoleSpecV3) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{33} + return fileDescriptor_types_6fca1a07e7522128, []int{37} } func (m *RoleSpecV3) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1729,7 +1924,8 @@ type RoleOptions struct { ForwardAgent Bool `protobuf:"varint,1,opt,name=ForwardAgent,proto3,casttype=Bool" json:"forward_agent"` // MaxSessionTTL defines how long a SSH session can last for. MaxSessionTTL Duration `protobuf:"varint,2,opt,name=MaxSessionTTL,proto3,casttype=Duration" json:"max_session_ttl,omitempty"` - // PortForwarding defines if the certificate will have "permit-port-forwarding" + // PortForwarding defines if the certificate will have + // "permit-port-forwarding" // in the certificate. PortForwarding is "yes" if not set, // that's why this is a pointer PortForwarding *BoolOption `protobuf:"bytes,3,opt,name=PortForwarding,customtype=BoolOption" json:"port_forwarding,omitempty"` @@ -1753,7 +1949,7 @@ func (m *RoleOptions) Reset() { *m = RoleOptions{} } func (m *RoleOptions) String() string { return proto.CompactTextString(m) } func (*RoleOptions) ProtoMessage() {} func (*RoleOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{34} + return fileDescriptor_types_6fca1a07e7522128, []int{38} } func (m *RoleOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1790,7 +1986,8 @@ type RoleConditions struct { // Namespaces is a list of namespaces (used to partition a cluster). The // field should be called "namespaces" when it returns in Teleport 2.4. Namespaces []string `protobuf:"bytes,2,rep,name=Namespaces" json:"-"` - // NodeLabels is a map of node labels (used to dynamically grant access to nodes). + // NodeLabels is a map of node labels (used to dynamically grant access to + // nodes). NodeLabels Labels `protobuf:"bytes,3,opt,name=NodeLabels,customtype=Labels" json:"node_labels,omitempty"` // Rules is a list of rules and their access levels. Rules are a high level // construct used for access control. @@ -1798,7 +1995,7 @@ type RoleConditions struct { // KubeGroups is a list of kubernetes groups KubeGroups []string `protobuf:"bytes,5,rep,name=KubeGroups" json:"kubernetes_groups,omitempty"` Request *AccessRequestConditions `protobuf:"bytes,6,opt,name=Request" json:"request,omitempty"` - // KubeUsers is an optional kuberentes users to impersonate + // KubeUsers is an optional kubernetes users to impersonate KubeUsers []string `protobuf:"bytes,7,rep,name=KubeUsers" json:"kubernetes_users,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1809,7 +2006,7 @@ func (m *RoleConditions) Reset() { *m = RoleConditions{} } func (m *RoleConditions) String() string { return proto.CompactTextString(m) } func (*RoleConditions) ProtoMessage() {} func (*RoleConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{35} + return fileDescriptor_types_6fca1a07e7522128, []int{39} } func (m *RoleConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1838,7 +2035,8 @@ func (m *RoleConditions) XXX_DiscardUnknown() { var xxx_messageInfo_RoleConditions proto.InternalMessageInfo -// AccessRequestConditions is a matcher for allow/deny restrictions on access-requests. +// AccessRequestConditions is a matcher for allow/deny restrictions on +// access-requests. type AccessRequestConditions struct { // Roles is the name of roles which will match the request rule. Roles []string `protobuf:"bytes,1,rep,name=Roles" json:"roles,omitempty"` @@ -1851,7 +2049,7 @@ func (m *AccessRequestConditions) Reset() { *m = AccessRequestConditions func (m *AccessRequestConditions) String() string { return proto.CompactTextString(m) } func (*AccessRequestConditions) ProtoMessage() {} func (*AccessRequestConditions) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{36} + return fileDescriptor_types_6fca1a07e7522128, []int{40} } func (m *AccessRequestConditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1900,7 +2098,7 @@ func (m *Rule) Reset() { *m = Rule{} } func (m *Rule) String() string { return proto.CompactTextString(m) } func (*Rule) ProtoMessage() {} func (*Rule) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{37} + return fileDescriptor_types_6fca1a07e7522128, []int{41} } func (m *Rule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1942,7 +2140,7 @@ func (m *BoolValue) Reset() { *m = BoolValue{} } func (m *BoolValue) String() string { return proto.CompactTextString(m) } func (*BoolValue) ProtoMessage() {} func (*BoolValue) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{38} + return fileDescriptor_types_6fca1a07e7522128, []int{42} } func (m *BoolValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1991,7 +2189,7 @@ type UserV2 struct { func (m *UserV2) Reset() { *m = UserV2{} } func (*UserV2) ProtoMessage() {} func (*UserV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{39} + return fileDescriptor_types_6fca1a07e7522128, []int{43} } func (m *UserV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2043,7 +2241,8 @@ type UserSpecV2 struct { Expires time.Time `protobuf:"bytes,7,opt,name=Expires,stdtime" json:"expires"` // CreatedBy holds information about agent or person created this user CreatedBy CreatedBy `protobuf:"bytes,8,opt,name=CreatedBy" json:"created_by,omitempty"` - // LocalAuths hold sensitive data necessary for performing local authentication + // LocalAuths hold sensitive data necessary for performing local + // authentication LocalAuth *LocalAuthSecrets `protobuf:"bytes,9,opt,name=LocalAuth" json:"local_auth,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2054,7 +2253,7 @@ func (m *UserSpecV2) Reset() { *m = UserSpecV2{} } func (m *UserSpecV2) String() string { return proto.CompactTextString(m) } func (*UserSpecV2) ProtoMessage() {} func (*UserSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{40} + return fileDescriptor_types_6fca1a07e7522128, []int{44} } func (m *UserSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2099,7 +2298,7 @@ type ExternalIdentity struct { func (m *ExternalIdentity) Reset() { *m = ExternalIdentity{} } func (*ExternalIdentity) ProtoMessage() {} func (*ExternalIdentity) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{41} + return fileDescriptor_types_6fca1a07e7522128, []int{45} } func (m *ExternalIdentity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2147,7 +2346,7 @@ func (m *LoginStatus) Reset() { *m = LoginStatus{} } func (m *LoginStatus) String() string { return proto.CompactTextString(m) } func (*LoginStatus) ProtoMessage() {} func (*LoginStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{42} + return fileDescriptor_types_6fca1a07e7522128, []int{46} } func (m *LoginStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2192,7 +2391,7 @@ type CreatedBy struct { func (m *CreatedBy) Reset() { *m = CreatedBy{} } func (*CreatedBy) ProtoMessage() {} func (*CreatedBy) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{43} + return fileDescriptor_types_6fca1a07e7522128, []int{47} } func (m *CreatedBy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2238,7 +2437,7 @@ func (m *U2FRegistrationData) Reset() { *m = U2FRegistrationData{} } func (m *U2FRegistrationData) String() string { return proto.CompactTextString(m) } func (*U2FRegistrationData) ProtoMessage() {} func (*U2FRegistrationData) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{44} + return fileDescriptor_types_6fca1a07e7522128, []int{48} } func (m *U2FRegistrationData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2275,7 +2474,8 @@ type LocalAuthSecrets struct { TOTPKey string `protobuf:"bytes,2,opt,name=TOTPKey,proto3" json:"totp_key,omitempty"` // U2FRegistration holds Universal Second Factor registration info. U2FRegistration *U2FRegistrationData `protobuf:"bytes,3,opt,name=U2FRegistration" json:"u2f_registration,omitempty"` - // U2FCounter holds the highest seen Universal Second Factor registration count. + // U2FCounter holds the highest seen Universal Second Factor registration + // count. U2FCounter uint32 `protobuf:"varint,4,opt,name=U2FCounter,proto3" json:"u2f_counter,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -2286,7 +2486,7 @@ func (m *LocalAuthSecrets) Reset() { *m = LocalAuthSecrets{} } func (m *LocalAuthSecrets) String() string { return proto.CompactTextString(m) } func (*LocalAuthSecrets) ProtoMessage() {} func (*LocalAuthSecrets) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{45} + return fileDescriptor_types_6fca1a07e7522128, []int{49} } func (m *LocalAuthSecrets) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2332,7 +2532,7 @@ func (m *ConnectorRef) Reset() { *m = ConnectorRef{} } func (m *ConnectorRef) String() string { return proto.CompactTextString(m) } func (*ConnectorRef) ProtoMessage() {} func (*ConnectorRef) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{46} + return fileDescriptor_types_6fca1a07e7522128, []int{50} } func (m *ConnectorRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2374,7 +2574,7 @@ func (m *UserRef) Reset() { *m = UserRef{} } func (m *UserRef) String() string { return proto.CompactTextString(m) } func (*UserRef) ProtoMessage() {} func (*UserRef) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{47} + return fileDescriptor_types_6fca1a07e7522128, []int{51} } func (m *UserRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2424,7 +2624,7 @@ func (m *ReverseTunnelV2) Reset() { *m = ReverseTunnelV2{} } func (m *ReverseTunnelV2) String() string { return proto.CompactTextString(m) } func (*ReverseTunnelV2) ProtoMessage() {} func (*ReverseTunnelV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{48} + return fileDescriptor_types_6fca1a07e7522128, []int{52} } func (m *ReverseTunnelV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2471,7 +2671,7 @@ func (m *ReverseTunnelSpecV2) Reset() { *m = ReverseTunnelSpecV2{} } func (m *ReverseTunnelSpecV2) String() string { return proto.CompactTextString(m) } func (*ReverseTunnelSpecV2) ProtoMessage() {} func (*ReverseTunnelSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{49} + return fileDescriptor_types_6fca1a07e7522128, []int{53} } func (m *ReverseTunnelSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2520,7 +2720,7 @@ type TunnelConnectionV2 struct { func (m *TunnelConnectionV2) Reset() { *m = TunnelConnectionV2{} } func (*TunnelConnectionV2) ProtoMessage() {} func (*TunnelConnectionV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{50} + return fileDescriptor_types_6fca1a07e7522128, []int{54} } func (m *TunnelConnectionV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2568,7 +2768,7 @@ func (m *TunnelConnectionSpecV2) Reset() { *m = TunnelConnectionSpecV2{} func (m *TunnelConnectionSpecV2) String() string { return proto.CompactTextString(m) } func (*TunnelConnectionSpecV2) ProtoMessage() {} func (*TunnelConnectionSpecV2) Descriptor() ([]byte, []int) { - return fileDescriptor_types_bfe64a187d8e57e3, []int{51} + return fileDescriptor_types_6fca1a07e7522128, []int{55} } func (m *TunnelConnectionSpecV2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2624,6 +2824,10 @@ func init() { proto.RegisterType((*AuditConfig)(nil), "services.AuditConfig") proto.RegisterType((*Namespace)(nil), "services.Namespace") proto.RegisterType((*NamespaceSpec)(nil), "services.NamespaceSpec") + proto.RegisterType((*ResetPasswordTokenV3)(nil), "services.ResetPasswordTokenV3") + proto.RegisterType((*ResetPasswordTokenSpecV3)(nil), "services.ResetPasswordTokenSpecV3") + proto.RegisterType((*ResetPasswordTokenSecretsV3)(nil), "services.ResetPasswordTokenSecretsV3") + proto.RegisterType((*ResetPasswordTokenSecretsSpecV3)(nil), "services.ResetPasswordTokenSecretsSpecV3") proto.RegisterType((*AccessRequestV3)(nil), "services.AccessRequestV3") proto.RegisterType((*AccessRequestSpecV3)(nil), "services.AccessRequestSpecV3") proto.RegisterType((*AccessRequestFilter)(nil), "services.AccessRequestFilter") @@ -3073,6 +3277,12 @@ func (m *ServerSpecV2) MarshalTo(dAtA []byte) (int, error) { } i++ } + if len(m.Version) > 0 { + dAtA[i] = 0x3a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Version))) + i += copy(dAtA[i:], m.Version) + } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -3931,7 +4141,7 @@ func (m *NamespaceSpec) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *AccessRequestV3) Marshal() (dAtA []byte, err error) { +func (m *ResetPasswordTokenV3) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -3941,7 +4151,7 @@ func (m *AccessRequestV3) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AccessRequestV3) MarshalTo(dAtA []byte) (int, error) { +func (m *ResetPasswordTokenV3) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -3986,6 +4196,198 @@ func (m *AccessRequestV3) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *ResetPasswordTokenSpecV3) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResetPasswordTokenSpecV3) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.User) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.User))) + i += copy(dAtA[i:], m.User) + } + if len(m.URL) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.URL))) + i += copy(dAtA[i:], m.URL) + } + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Created))) + n32, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i:]) + if err != nil { + return 0, err + } + i += n32 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *ResetPasswordTokenSecretsV3) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResetPasswordTokenSecretsV3) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Kind) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Kind))) + i += copy(dAtA[i:], m.Kind) + } + if len(m.SubKind) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.SubKind))) + i += copy(dAtA[i:], m.SubKind) + } + if len(m.Version) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Version))) + i += copy(dAtA[i:], m.Version) + } + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) + n33, err := m.Metadata.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n33 + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) + n34, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n34 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *ResetPasswordTokenSecretsSpecV3) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResetPasswordTokenSecretsSpecV3) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.OTPKey) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.OTPKey))) + i += copy(dAtA[i:], m.OTPKey) + } + if len(m.QRCode) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.QRCode))) + i += copy(dAtA[i:], m.QRCode) + } + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Created))) + n35, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i:]) + if err != nil { + return 0, err + } + i += n35 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *AccessRequestV3) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AccessRequestV3) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Kind) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Kind))) + i += copy(dAtA[i:], m.Kind) + } + if len(m.SubKind) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.SubKind))) + i += copy(dAtA[i:], m.SubKind) + } + if len(m.Version) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintTypes(dAtA, i, uint64(len(m.Version))) + i += copy(dAtA[i:], m.Version) + } + dAtA[i] = 0x22 + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) + n36, err := m.Metadata.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n36 + dAtA[i] = 0x2a + i++ + i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) + n37, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n37 + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + func (m *AccessRequestSpecV3) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4030,19 +4432,19 @@ func (m *AccessRequestSpecV3) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Created))) - n32, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i:]) + n38, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Created, dAtA[i:]) if err != nil { return 0, err } - i += n32 + i += n38 dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires))) - n33, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i:]) + n39, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i:]) if err != nil { return 0, err } - i += n33 + i += n39 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -4123,19 +4525,19 @@ func (m *PluginDataV3) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) - n34, err := m.Metadata.MarshalTo(dAtA[i:]) + n40, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n40 dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) - n35, err := m.Spec.MarshalTo(dAtA[i:]) + n41, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n41 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -4215,11 +4617,11 @@ func (m *PluginDataSpecV3) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(v.Size())) - n36, err := v.MarshalTo(dAtA[i:]) + n42, err := v.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n42 } } } @@ -4377,19 +4779,19 @@ func (m *RoleV3) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) - n37, err := m.Metadata.MarshalTo(dAtA[i:]) + n43, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n37 + i += n43 dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) - n38, err := m.Spec.MarshalTo(dAtA[i:]) + n44, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n44 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -4414,27 +4816,27 @@ func (m *RoleSpecV3) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Options.Size())) - n39, err := m.Options.MarshalTo(dAtA[i:]) + n45, err := m.Options.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n45 dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Allow.Size())) - n40, err := m.Allow.MarshalTo(dAtA[i:]) + n46, err := m.Allow.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n46 dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Deny.Size())) - n41, err := m.Deny.MarshalTo(dAtA[i:]) + n47, err := m.Deny.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n47 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -4475,11 +4877,11 @@ func (m *RoleOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.PortForwarding.Size())) - n42, err := m.PortForwarding.MarshalTo(dAtA[i:]) + n48, err := m.PortForwarding.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n48 } if len(m.CertificateFormat) > 0 { dAtA[i] = 0x22 @@ -4571,11 +4973,11 @@ func (m *RoleConditions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.NodeLabels.Size())) - n43, err := m.NodeLabels.MarshalTo(dAtA[i:]) + n49, err := m.NodeLabels.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n43 + i += n49 if len(m.Rules) > 0 { for _, msg := range m.Rules { dAtA[i] = 0x22 @@ -4607,11 +5009,11 @@ func (m *RoleConditions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Request.Size())) - n44, err := m.Request.MarshalTo(dAtA[i:]) + n50, err := m.Request.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n44 + i += n50 } if len(m.KubeUsers) > 0 { for _, s := range m.KubeUsers { @@ -4809,19 +5211,19 @@ func (m *UserV2) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) - n45, err := m.Metadata.MarshalTo(dAtA[i:]) + n51, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n45 + i += n51 dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) - n46, err := m.Spec.MarshalTo(dAtA[i:]) + n52, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n46 + i += n52 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -4897,44 +5299,44 @@ func (m *UserSpecV2) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Traits.Size())) - n47, err := m.Traits.MarshalTo(dAtA[i:]) + n53, err := m.Traits.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n47 + i += n53 dAtA[i] = 0x32 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Status.Size())) - n48, err := m.Status.MarshalTo(dAtA[i:]) + n54, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n48 + i += n54 dAtA[i] = 0x3a i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires))) - n49, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i:]) + n55, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i:]) if err != nil { return 0, err } - i += n49 + i += n55 dAtA[i] = 0x42 i++ i = encodeVarintTypes(dAtA, i, uint64(m.CreatedBy.Size())) - n50, err := m.CreatedBy.MarshalTo(dAtA[i:]) + n56, err := m.CreatedBy.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n56 if m.LocalAuth != nil { dAtA[i] = 0x4a i++ i = encodeVarintTypes(dAtA, i, uint64(m.LocalAuth.Size())) - n51, err := m.LocalAuth.MarshalTo(dAtA[i:]) + n57, err := m.LocalAuth.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n57 } if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) @@ -5009,19 +5411,19 @@ func (m *LoginStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.LockedTime))) - n52, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockedTime, dAtA[i:]) + n58, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockedTime, dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n58 dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.LockExpires))) - n53, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockExpires, dAtA[i:]) + n59, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LockExpires, dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n59 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -5047,28 +5449,28 @@ func (m *CreatedBy) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintTypes(dAtA, i, uint64(m.Connector.Size())) - n54, err := m.Connector.MarshalTo(dAtA[i:]) + n60, err := m.Connector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n60 } dAtA[i] = 0x12 i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Time))) - n55, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i:]) + n61, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n61 dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.User.Size())) - n56, err := m.User.MarshalTo(dAtA[i:]) + n62, err := m.User.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n62 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -5145,11 +5547,11 @@ func (m *LocalAuthSecrets) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(m.U2FRegistration.Size())) - n57, err := m.U2FRegistration.MarshalTo(dAtA[i:]) + n63, err := m.U2FRegistration.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n63 } if m.U2FCounter != 0 { dAtA[i] = 0x20 @@ -5264,19 +5666,19 @@ func (m *ReverseTunnelV2) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) - n58, err := m.Metadata.MarshalTo(dAtA[i:]) + n64, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n64 dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) - n59, err := m.Spec.MarshalTo(dAtA[i:]) + n65, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n65 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -5367,19 +5769,19 @@ func (m *TunnelConnectionV2) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintTypes(dAtA, i, uint64(m.Metadata.Size())) - n60, err := m.Metadata.MarshalTo(dAtA[i:]) + n66, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n66 dAtA[i] = 0x2a i++ i = encodeVarintTypes(dAtA, i, uint64(m.Spec.Size())) - n61, err := m.Spec.MarshalTo(dAtA[i:]) + n67, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n67 if m.XXX_unrecognized != nil { i += copy(dAtA[i:], m.XXX_unrecognized) } @@ -5416,11 +5818,11 @@ func (m *TunnelConnectionSpecV2) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintTypes(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.LastHeartbeat))) - n62, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i:]) + n68, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastHeartbeat, dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n68 if len(m.Type) > 0 { dAtA[i] = 0x22 i++ @@ -5626,6 +6028,10 @@ func (m *ServerSpecV2) Size() (n int) { if m.UseTunnel { n += 2 } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -6029,6 +6435,94 @@ func (m *NamespaceSpec) Size() (n int) { return n } +func (m *ResetPasswordTokenV3) Size() (n int) { + var l int + _ = l + l = len(m.Kind) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.SubKind) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Metadata.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ResetPasswordTokenSpecV3) Size() (n int) { + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.URL) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) + n += 1 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ResetPasswordTokenSecretsV3) Size() (n int) { + var l int + _ = l + l = len(m.Kind) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.SubKind) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = m.Metadata.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ResetPasswordTokenSecretsSpecV3) Size() (n int) { + var l int + _ = l + l = len(m.OTPKey) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.QRCode) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Created) + n += 1 + l + sovTypes(uint64(l)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *AccessRequestV3) Size() (n int) { var l int _ = l @@ -8250,6 +8744,35 @@ func (m *ServerSpecV2) Unmarshal(dAtA []byte) error { } } m.UseTunnel = bool(v != 0) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -10995,6 +11518,680 @@ func (m *NamespaceSpec) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResetPasswordTokenV3) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResetPasswordTokenV3: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResetPasswordTokenV3: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubKind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubKind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResetPasswordTokenSpecV3) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResetPasswordTokenSpecV3: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResetPasswordTokenSpecV3: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResetPasswordTokenSecretsV3) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResetPasswordTokenSecretsV3: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResetPasswordTokenSecretsV3: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubKind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubKind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResetPasswordTokenSecretsSpecV3) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResetPasswordTokenSecretsSpecV3: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResetPasswordTokenSecretsSpecV3: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OTPKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OTPKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QRCode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QRCode = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Created, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AccessRequestV3) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -15969,259 +17166,267 @@ var ( ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("types.proto", fileDescriptor_types_bfe64a187d8e57e3) } +func init() { proto.RegisterFile("types.proto", fileDescriptor_types_6fca1a07e7522128) } -var fileDescriptor_types_bfe64a187d8e57e3 = []byte{ - // 4005 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3b, 0x4d, 0x6f, 0x1c, 0xc9, - 0x75, 0x9a, 0x0f, 0x92, 0x33, 0x6f, 0x48, 0x8a, 0x2a, 0xea, 0x63, 0x44, 0x69, 0xd5, 0xdc, 0x51, - 0x76, 0x57, 0xeb, 0xc8, 0x64, 0x4c, 0x65, 0x65, 0x6b, 0xb3, 0xca, 0x2e, 0x87, 0x43, 0x49, 0x34, - 0x29, 0x8a, 0xdb, 0xa4, 0x68, 0x38, 0x5f, 0x9d, 0x66, 0x77, 0x71, 0xd8, 0x60, 0x4f, 0xf7, 0xa4, - 0xbb, 0x9a, 0xd2, 0xdc, 0x8c, 0x24, 0x40, 0x90, 0x18, 0xb0, 0x13, 0x04, 0x86, 0x17, 0x88, 0x0f, - 0x01, 0x72, 0xca, 0x21, 0xb9, 0x06, 0x39, 0xe4, 0x10, 0xc0, 0x07, 0x5d, 0x02, 0xf8, 0x6c, 0x38, - 0xed, 0x64, 0x73, 0x30, 0x30, 0x3f, 0x61, 0x2f, 0x09, 0xea, 0x55, 0x75, 0x77, 0xf5, 0xcc, 0x50, - 0x1c, 0x6d, 0x7c, 0xe1, 0x9e, 0xd8, 0xf3, 0xea, 0xbd, 0x57, 0xef, 0xbd, 0x7a, 0xf5, 0xea, 0xbd, - 0x57, 0x45, 0xa8, 0xb1, 0x5e, 0x97, 0x86, 0x4b, 0xdd, 0xc0, 0x67, 0x3e, 0xa9, 0x84, 0x34, 0x38, - 0x71, 0x2c, 0x1a, 0x2e, 0x5c, 0x6e, 0xfb, 0x6d, 0x1f, 0x81, 0xcb, 0xfc, 0x4b, 0x8c, 0x2f, 0x68, - 0x6d, 0xdf, 0x6f, 0xbb, 0x74, 0x19, 0x7f, 0x1d, 0x44, 0x87, 0xcb, 0xcc, 0xe9, 0xd0, 0x90, 0x99, - 0x9d, 0xae, 0x44, 0x78, 0xd8, 0x76, 0xd8, 0x51, 0x74, 0xb0, 0x64, 0xf9, 0x9d, 0xe5, 0x76, 0x60, - 0x9e, 0x38, 0xcc, 0x64, 0x8e, 0xef, 0x99, 0xee, 0x32, 0xa3, 0x2e, 0xed, 0xfa, 0x01, 0x5b, 0x76, - 0x9d, 0x83, 0xe5, 0x17, 0x81, 0xd9, 0xed, 0xd2, 0x20, 0x4c, 0x3f, 0x04, 0x79, 0xe3, 0x17, 0x05, - 0xa8, 0x6e, 0x52, 0xda, 0x5d, 0x75, 0x9d, 0x13, 0x4a, 0x96, 0x01, 0x76, 0x69, 0x70, 0x42, 0x83, - 0x6d, 0xb3, 0x43, 0xeb, 0x85, 0xc5, 0xc2, 0x9d, 0x6a, 0xf3, 0x62, 0x3f, 0xd6, 0x6a, 0x21, 0x42, - 0x0d, 0xcf, 0xec, 0x50, 0x5d, 0x41, 0x21, 0xbf, 0x09, 0x55, 0xfe, 0x37, 0xec, 0x9a, 0x16, 0xad, - 0x17, 0x11, 0x7f, 0xa6, 0x1f, 0x6b, 0x55, 0x2f, 0x01, 0xea, 0xd9, 0x38, 0x79, 0x17, 0xa6, 0xb6, - 0xa8, 0x19, 0xd2, 0x8d, 0x56, 0xbd, 0xb4, 0x58, 0xb8, 0x53, 0x6a, 0x4e, 0xf7, 0x63, 0xad, 0xe2, - 0x72, 0x90, 0xe1, 0xd8, 0x7a, 0x32, 0x48, 0x36, 0x60, 0x6a, 0xfd, 0x65, 0xd7, 0x09, 0x68, 0x58, - 0x2f, 0x2f, 0x16, 0xee, 0xd4, 0x56, 0x16, 0x96, 0x84, 0x15, 0x96, 0x12, 0x2b, 0x2c, 0xed, 0x25, - 0x56, 0x68, 0xce, 0xbf, 0x8a, 0xb5, 0x0b, 0xfd, 0x58, 0x9b, 0xa2, 0x82, 0xe4, 0xaf, 0x7f, 0xa9, - 0x15, 0xf4, 0x84, 0xbe, 0xf1, 0x57, 0x25, 0xa8, 0x3c, 0xa5, 0xcc, 0xb4, 0x4d, 0x66, 0x92, 0x9b, - 0x50, 0x56, 0xf4, 0xaa, 0xf4, 0x63, 0xad, 0x8c, 0x0a, 0x21, 0x94, 0xdc, 0x1e, 0x56, 0x65, 0xa2, - 0x1f, 0x6b, 0x85, 0xaf, 0xab, 0x2a, 0xfc, 0x0e, 0xd4, 0x5a, 0x34, 0xb4, 0x02, 0xa7, 0xcb, 0x8d, - 0x8c, 0x6a, 0x54, 0x9b, 0xd7, 0xfb, 0xb1, 0x76, 0xc5, 0xce, 0xc0, 0x77, 0xfd, 0x8e, 0xc3, 0x68, - 0xa7, 0xcb, 0x7a, 0xba, 0x8a, 0x4d, 0xb6, 0x60, 0x72, 0xcb, 0x3c, 0xa0, 0x6e, 0x58, 0x9f, 0x58, - 0x2c, 0xdd, 0xa9, 0xad, 0xdc, 0x5a, 0x4a, 0x16, 0x7f, 0x29, 0x91, 0x71, 0x49, 0x20, 0xac, 0x7b, - 0x2c, 0xe8, 0x35, 0x2f, 0xf7, 0x63, 0x6d, 0xce, 0x45, 0x80, 0xc2, 0x52, 0xf2, 0x20, 0xbb, 0x99, - 0x95, 0x26, 0xcf, 0xb4, 0xd2, 0x5b, 0xaf, 0x62, 0xad, 0xd0, 0x8f, 0xb5, 0x4b, 0xd2, 0x4a, 0x19, - 0xbf, 0x9c, 0xbd, 0xc8, 0x22, 0x14, 0x37, 0x5a, 0xf5, 0x29, 0x5c, 0x9d, 0xb9, 0x7e, 0xac, 0x4d, - 0x3b, 0xb6, 0x32, 0x75, 0x71, 0xa3, 0xb5, 0xf0, 0x00, 0x6a, 0x8a, 0x8c, 0x64, 0x0e, 0x4a, 0xc7, - 0xb4, 0x27, 0x4c, 0xaa, 0xf3, 0x4f, 0x72, 0x19, 0x26, 0x4e, 0x4c, 0x37, 0x92, 0x36, 0xd4, 0xc5, - 0x8f, 0x0f, 0x8b, 0xdf, 0x2a, 0x34, 0x7e, 0x54, 0x86, 0x8a, 0xee, 0x0b, 0xff, 0x24, 0xef, 0xc3, - 0xc4, 0x2e, 0x33, 0x59, 0xb2, 0x1a, 0xf3, 0xfd, 0x58, 0xbb, 0x18, 0x72, 0x80, 0x32, 0x9f, 0xc0, - 0xe0, 0xa8, 0x3b, 0x47, 0x66, 0x98, 0xac, 0x0a, 0xa2, 0x76, 0x39, 0x40, 0x45, 0x45, 0x0c, 0xf2, - 0x2e, 0x94, 0x9f, 0xfa, 0x36, 0x95, 0x0b, 0x43, 0xfa, 0xb1, 0x36, 0xdb, 0xf1, 0x6d, 0x15, 0x11, - 0xc7, 0xc9, 0x5d, 0xa8, 0xae, 0x45, 0x41, 0x40, 0x3d, 0xb6, 0xd1, 0x42, 0x27, 0xab, 0x36, 0x67, - 0xfb, 0xb1, 0x06, 0x96, 0x00, 0x72, 0x77, 0xcc, 0x10, 0xb8, 0xa9, 0x77, 0x99, 0x19, 0x30, 0x6a, - 0xd7, 0x27, 0xc6, 0x32, 0x35, 0x77, 0xc8, 0x4b, 0xa1, 0x20, 0x19, 0x34, 0xb5, 0xe4, 0x44, 0x9e, - 0x40, 0xed, 0x71, 0x60, 0x5a, 0x74, 0x87, 0x06, 0x8e, 0x6f, 0xe3, 0x1a, 0x96, 0x9a, 0xef, 0xf6, - 0x63, 0xed, 0x6a, 0x9b, 0x83, 0x8d, 0x2e, 0xc2, 0x33, 0xea, 0x2f, 0x62, 0xad, 0xd2, 0x8a, 0x02, - 0xb4, 0x9e, 0xae, 0x92, 0x92, 0x3f, 0xe6, 0x4b, 0x12, 0x32, 0x34, 0x2d, 0xb5, 0x71, 0xf5, 0x5e, - 0x2f, 0x62, 0x43, 0x8a, 0x78, 0xd5, 0x35, 0x43, 0x66, 0x04, 0x82, 0x6e, 0x40, 0x4e, 0x95, 0x25, - 0xd1, 0xa1, 0xb2, 0x6b, 0x1d, 0x51, 0x3b, 0x72, 0x69, 0xbd, 0x22, 0xd9, 0xa7, 0xbe, 0x9b, 0x2c, - 0x69, 0x82, 0xd1, 0x5c, 0x90, 0xec, 0x49, 0x28, 0x21, 0x8a, 0xf9, 0x53, 0x3e, 0x1f, 0x56, 0x3e, - 0xfb, 0x7b, 0xed, 0xc2, 0xf7, 0x7e, 0xb1, 0x78, 0xa1, 0xf1, 0x2f, 0x45, 0x98, 0x1b, 0x64, 0x42, - 0x0e, 0x61, 0xe6, 0x79, 0xd7, 0x36, 0x19, 0x5d, 0x73, 0x1d, 0xea, 0xb1, 0x10, 0xfd, 0xe4, 0xf5, - 0x6a, 0xfd, 0x86, 0x9c, 0xb7, 0x1e, 0x21, 0xa1, 0x61, 0x09, 0xca, 0x01, 0xc5, 0xf2, 0x6c, 0xb3, - 0x79, 0x44, 0x54, 0x0b, 0xd1, 0xc9, 0xde, 0x6c, 0x1e, 0x11, 0x1c, 0x4f, 0x99, 0x47, 0xb2, 0x95, - 0x3e, 0xe4, 0xd9, 0x07, 0x3d, 0x74, 0xce, 0xf1, 0x7d, 0x88, 0x93, 0x8c, 0xf0, 0x21, 0x0e, 0x6e, - 0xfc, 0xaa, 0x00, 0xb3, 0x3a, 0x0d, 0xfd, 0x28, 0xb0, 0xe8, 0x13, 0x6a, 0xda, 0x34, 0xe0, 0x3b, - 0x60, 0xd3, 0xf1, 0x6c, 0xb9, 0xad, 0x70, 0x07, 0x1c, 0x3b, 0x9e, 0xba, 0x8b, 0x71, 0x9c, 0xfc, - 0x16, 0x4c, 0xed, 0x46, 0x07, 0x88, 0x2a, 0xb6, 0xd5, 0x55, 0x5c, 0xb1, 0xe8, 0xc0, 0x18, 0x40, - 0x4f, 0xd0, 0xc8, 0x32, 0x4c, 0xed, 0xd3, 0x20, 0xcc, 0xe2, 0xde, 0x15, 0x2e, 0xe1, 0x89, 0x00, - 0xa9, 0x04, 0x12, 0x8b, 0x7c, 0x3b, 0x8b, 0xbd, 0x32, 0x90, 0x93, 0xe1, 0x88, 0x97, 0x79, 0x4b, - 0x47, 0x42, 0x54, 0x6f, 0x49, 0xb0, 0x1a, 0x7f, 0x51, 0x84, 0x8a, 0x30, 0xe5, 0xfe, 0x0a, 0x0f, - 0xe4, 0x8a, 0x8e, 0x18, 0xc8, 0xb9, 0xd0, 0x5f, 0x5a, 0xb3, 0x77, 0x06, 0x35, 0xab, 0xf1, 0x03, - 0x45, 0x6a, 0x96, 0xe9, 0xf3, 0xc9, 0x58, 0xfa, 0xcc, 0x49, 0x7d, 0x2a, 0x89, 0x3e, 0x99, 0x16, - 0xe4, 0x5b, 0x50, 0xde, 0xed, 0x52, 0x4b, 0x46, 0x91, 0xab, 0x19, 0xb5, 0x50, 0x8d, 0x8f, 0xed, - 0xaf, 0x34, 0xa7, 0x25, 0x87, 0x72, 0xd8, 0xa5, 0x96, 0x8e, 0x14, 0xca, 0x6e, 0xf9, 0x59, 0x09, - 0xa6, 0x55, 0x74, 0x6e, 0x8d, 0x55, 0xdb, 0x0e, 0x54, 0x6b, 0x98, 0xb6, 0x1d, 0xe8, 0x08, 0x25, - 0x0f, 0x00, 0x76, 0xa2, 0x03, 0xd7, 0xb1, 0x10, 0xa7, 0x98, 0x1d, 0x58, 0x5d, 0x84, 0x1a, 0x1c, - 0x55, 0xb1, 0x89, 0x82, 0x4c, 0xee, 0x40, 0xe5, 0x89, 0x1f, 0x32, 0x7e, 0x46, 0x4a, 0xbb, 0xe0, - 0x81, 0x7d, 0x24, 0x61, 0x7a, 0x3a, 0x4a, 0x4c, 0xa8, 0xae, 0x75, 0x6c, 0x79, 0xb8, 0x95, 0xf1, - 0x70, 0x7b, 0x67, 0xb4, 0x72, 0x4b, 0x29, 0x9e, 0x38, 0xe3, 0x6e, 0x4a, 0x5d, 0x2f, 0x5b, 0x1d, - 0xdb, 0x18, 0x3a, 0xeb, 0x32, 0xae, 0xdc, 0x99, 0x92, 0x18, 0x21, 0xcd, 0x47, 0x86, 0x43, 0x50, - 0xe6, 0x4c, 0x81, 0x84, 0xa8, 0xce, 0x94, 0x9e, 0x3d, 0xf7, 0xa1, 0xfa, 0x3c, 0xa4, 0x7b, 0x91, - 0xe7, 0x51, 0x17, 0x03, 0x6f, 0xa5, 0x59, 0xe7, 0x32, 0x44, 0x21, 0x35, 0x18, 0x42, 0x55, 0x19, - 0x52, 0xd4, 0x85, 0x7d, 0x98, 0xcd, 0x8b, 0x3f, 0xe2, 0xf8, 0x5b, 0x52, 0x8f, 0xbf, 0xda, 0x4a, - 0x3d, 0x13, 0x72, 0xcd, 0xef, 0x74, 0x4c, 0x4f, 0x90, 0xef, 0xaf, 0xa8, 0x07, 0xe3, 0xf7, 0x0b, - 0x30, 0x9b, 0x1f, 0x25, 0x4b, 0x30, 0x29, 0x0f, 0x86, 0x02, 0x1e, 0x0c, 0xdc, 0x87, 0x27, 0xc5, - 0x91, 0x90, 0x3b, 0x08, 0x24, 0x16, 0x77, 0x61, 0xc9, 0xa1, 0x5e, 0x5c, 0x2c, 0x25, 0x2e, 0x6c, - 0x09, 0x90, 0x9e, 0x8c, 0x91, 0x06, 0x4c, 0xea, 0x34, 0x8c, 0x5c, 0x26, 0x17, 0x14, 0x38, 0xdb, - 0x00, 0x21, 0xba, 0x1c, 0x69, 0x7c, 0x17, 0x60, 0x6f, 0x6b, 0x77, 0x93, 0xf6, 0x76, 0x4c, 0x07, - 0xe3, 0xc9, 0x1a, 0x0d, 0x18, 0x8a, 0x31, 0x2d, 0xe2, 0x89, 0x45, 0x03, 0xa6, 0xc6, 0x13, 0x3e, - 0x4e, 0x6e, 0x43, 0x69, 0x93, 0xf6, 0x50, 0xeb, 0xe9, 0xe6, 0xa5, 0x7e, 0xac, 0xcd, 0x1c, 0x53, - 0x25, 0x6e, 0xe9, 0x7c, 0xb4, 0xf1, 0xa3, 0x22, 0x5c, 0xe4, 0xd8, 0xab, 0x11, 0x3b, 0xf2, 0x03, - 0x87, 0xf5, 0xce, 0xf3, 0x66, 0xfe, 0x38, 0xb7, 0x99, 0xdf, 0x52, 0x16, 0x5a, 0xd5, 0x70, 0xac, - 0x3d, 0xfd, 0x97, 0x65, 0x98, 0x1f, 0x41, 0x45, 0xee, 0x42, 0x79, 0xaf, 0xd7, 0x4d, 0x72, 0x24, - 0xee, 0xa3, 0x65, 0x5e, 0x3c, 0x7c, 0x11, 0x6b, 0xd3, 0x09, 0x3a, 0x1f, 0xd7, 0x11, 0x8b, 0xac, - 0x40, 0x6d, 0xcd, 0x8d, 0x42, 0x26, 0xd3, 0x77, 0x61, 0x2f, 0xcc, 0xe2, 0x2c, 0x01, 0x16, 0xf9, - 0xbb, 0x8a, 0x44, 0x3e, 0x80, 0xe9, 0xb5, 0x23, 0x6a, 0x1d, 0x3b, 0x5e, 0x7b, 0x93, 0xf6, 0xc2, - 0x7a, 0x69, 0xb1, 0x94, 0xac, 0x9f, 0x25, 0xe1, 0xc6, 0x31, 0xed, 0x85, 0x7a, 0x0e, 0x8d, 0x7c, - 0x04, 0xb5, 0x5d, 0xa7, 0xed, 0x25, 0x54, 0x65, 0xa4, 0x5a, 0xe0, 0x29, 0x45, 0x28, 0xc0, 0x48, - 0xa4, 0x26, 0xc2, 0x0a, 0x3a, 0x4f, 0xe8, 0x74, 0xdf, 0xa5, 0x22, 0x0f, 0x96, 0x09, 0x5d, 0xc0, - 0x01, 0x6a, 0x42, 0x87, 0x18, 0x64, 0x13, 0xa6, 0xf8, 0xc7, 0x53, 0xb3, 0x5b, 0x9f, 0xc4, 0xb8, - 0x72, 0x45, 0xdd, 0xf5, 0x38, 0xd0, 0x75, 0xbc, 0xb6, 0xba, 0xf1, 0x5d, 0x6a, 0x74, 0xcc, 0xae, - 0xea, 0x1a, 0x12, 0x91, 0x7c, 0x07, 0x6a, 0x99, 0x67, 0x87, 0xf5, 0x29, 0x64, 0x78, 0x39, 0x63, - 0x98, 0x0d, 0x36, 0x35, 0xc9, 0xef, 0x1a, 0x73, 0x43, 0xae, 0x8b, 0xd1, 0xe5, 0x24, 0xaa, 0x42, - 0x0a, 0xa7, 0x5c, 0x70, 0xaa, 0xbc, 0x36, 0x38, 0x15, 0xce, 0x0a, 0x4e, 0x0d, 0x1d, 0x6a, 0x8a, - 0x62, 0x62, 0xc7, 0x76, 0xfc, 0x34, 0x51, 0x96, 0x3b, 0x96, 0x43, 0x74, 0x39, 0x42, 0x34, 0x98, - 0xd8, 0xf2, 0x2d, 0xd3, 0x95, 0x5b, 0xbf, 0xda, 0x8f, 0xb5, 0x09, 0x97, 0x03, 0x74, 0x01, 0x6f, - 0xfc, 0x67, 0x01, 0xe6, 0x76, 0x02, 0xff, 0xc4, 0xe1, 0xae, 0xbf, 0xe7, 0x1f, 0x53, 0x6f, 0xff, - 0x1b, 0x64, 0x23, 0x59, 0x85, 0x02, 0x52, 0xdd, 0xe3, 0x54, 0xb8, 0x0a, 0x5f, 0xc4, 0xda, 0xbb, - 0x67, 0x56, 0x95, 0x68, 0xfd, 0x64, 0x95, 0x94, 0x5a, 0xa4, 0x38, 0x7e, 0x72, 0x73, 0x46, 0x2d, - 0xa2, 0xc1, 0x04, 0x8a, 0x2a, 0xb7, 0x31, 0x6a, 0xc5, 0x38, 0x40, 0x17, 0x70, 0x65, 0xff, 0xfc, - 0xb8, 0x38, 0xa4, 0xdf, 0x39, 0x0e, 0x2c, 0x9f, 0xe4, 0x02, 0x8b, 0x52, 0x25, 0xe6, 0x55, 0x1c, - 0x2b, 0xb2, 0x98, 0x70, 0x79, 0x14, 0xd5, 0xaf, 0x71, 0xf1, 0x1b, 0x7f, 0x5b, 0x84, 0x59, 0x5e, - 0xa8, 0x39, 0x16, 0x4e, 0x10, 0x9e, 0x67, 0xd3, 0xff, 0x6e, 0xce, 0xf4, 0x37, 0x95, 0x1c, 0x46, - 0x51, 0x70, 0x2c, 0xc3, 0x1f, 0x03, 0x19, 0xa6, 0x21, 0xcf, 0x61, 0x5a, 0x85, 0xa2, 0xf5, 0x73, - 0xc5, 0xd4, 0xe0, 0x2e, 0x6d, 0x5e, 0x91, 0xb3, 0xcc, 0x84, 0x48, 0x67, 0xe0, 0x0e, 0x08, 0xf5, - 0x1c, 0x9b, 0xc6, 0xdf, 0x14, 0x61, 0x46, 0x89, 0xea, 0xe7, 0x79, 0x05, 0x1e, 0xe6, 0x56, 0xe0, - 0x86, 0x72, 0xaa, 0x66, 0xfa, 0x8d, 0xb5, 0x00, 0x8f, 0xe1, 0xd2, 0x10, 0xc9, 0xe0, 0x11, 0x59, - 0x18, 0xe3, 0x88, 0x14, 0x49, 0x8b, 0xf8, 0xbd, 0xe6, 0x7b, 0x87, 0x4e, 0x7b, 0xff, 0xde, 0x57, - 0x31, 0x69, 0x51, 0x35, 0x44, 0x6b, 0xdd, 0x3b, 0xc3, 0xc0, 0x3f, 0x9c, 0x80, 0xf9, 0x11, 0x54, - 0x64, 0x15, 0xe6, 0x76, 0x69, 0x88, 0x82, 0x53, 0xcb, 0x0f, 0x6c, 0xc7, 0x6b, 0x4b, 0x3b, 0x61, - 0xc1, 0x18, 0x8a, 0x31, 0x23, 0x48, 0x06, 0xf5, 0x21, 0x74, 0x6c, 0xcf, 0x08, 0xce, 0x1b, 0x2d, - 0x69, 0x42, 0xd1, 0x9e, 0x91, 0x8b, 0x84, 0xed, 0x99, 0x04, 0x81, 0x6c, 0xc1, 0xfc, 0x4e, 0xe0, - 0xbf, 0xec, 0x61, 0x86, 0x12, 0xf2, 0xa2, 0x44, 0xa6, 0x32, 0x9c, 0x0e, 0x93, 0x92, 0x2e, 0x1f, - 0x36, 0x30, 0xa1, 0x09, 0x0d, 0x5e, 0xbf, 0x88, 0x9c, 0x66, 0x14, 0x19, 0xf9, 0x10, 0x26, 0x56, - 0x23, 0xdb, 0x61, 0xd2, 0xc0, 0x4a, 0xbe, 0x81, 0x60, 0xa1, 0x6a, 0x73, 0x46, 0x9a, 0x66, 0xc2, - 0xe4, 0x40, 0x5d, 0x90, 0x90, 0x4f, 0xb9, 0xcf, 0x39, 0xd4, 0x63, 0x1b, 0xb6, 0x4b, 0xf9, 0x89, - 0xe7, 0x47, 0x0c, 0x4d, 0x5d, 0x6a, 0xde, 0xee, 0xc7, 0xda, 0xbc, 0xe8, 0x48, 0x18, 0x8e, 0xed, - 0x52, 0x83, 0x89, 0xe1, 0x5c, 0x36, 0x3f, 0x4c, 0x4d, 0xbe, 0x0b, 0x57, 0x5a, 0x4e, 0x68, 0xf9, - 0x9e, 0x47, 0x2d, 0x26, 0x8e, 0x46, 0x1b, 0x13, 0x72, 0x51, 0xb7, 0x70, 0xb6, 0xd7, 0xec, 0x14, - 0xc1, 0x10, 0x67, 0xaa, 0x6d, 0xf0, 0x1c, 0xfd, 0x8b, 0x58, 0x2b, 0x37, 0x7d, 0xdf, 0xd5, 0x47, - 0x73, 0xe0, 0xd2, 0xa6, 0xad, 0xdf, 0x0d, 0x8f, 0xd1, 0xe0, 0xc4, 0x74, 0x65, 0xef, 0x0f, 0xa5, - 0x3d, 0xa6, 0xb4, 0x6b, 0x98, 0x7c, 0xd4, 0x70, 0xe4, 0x70, 0x5e, 0xda, 0x21, 0x6a, 0xf2, 0x48, - 0x61, 0xb9, 0xe6, 0x47, 0x1e, 0x7b, 0x6a, 0xbe, 0xc4, 0x8c, 0xa8, 0x24, 0x2a, 0x2c, 0x85, 0xa5, - 0xc5, 0x87, 0x8d, 0x8e, 0xf9, 0x52, 0x1f, 0x26, 0x21, 0xbf, 0x0d, 0x55, 0xcc, 0x5c, 0x78, 0x86, - 0x5b, 0xaf, 0xa2, 0xa6, 0x7c, 0x0f, 0x01, 0x66, 0x35, 0x86, 0x19, 0xb1, 0xa3, 0x54, 0xb9, 0x0c, - 0xb1, 0xf1, 0x59, 0x09, 0x6a, 0xca, 0x22, 0xf1, 0xda, 0x45, 0x49, 0x9f, 0xb1, 0x76, 0xe1, 0xe9, - 0xb3, 0x5a, 0xbb, 0x60, 0xe2, 0x7c, 0x97, 0xe7, 0x58, 0x6d, 0xbe, 0xf9, 0x84, 0xaf, 0x61, 0xe3, - 0x35, 0x40, 0x88, 0xda, 0x78, 0x15, 0x38, 0x64, 0x0b, 0xe6, 0x70, 0x12, 0xe9, 0xb5, 0xe1, 0x73, - 0x7d, 0x43, 0xfa, 0xda, 0x62, 0x3f, 0xd6, 0x6e, 0xa2, 0x43, 0x18, 0xd2, 0xcb, 0x43, 0x23, 0x0a, - 0x1c, 0x85, 0xc7, 0x10, 0x25, 0xf9, 0x49, 0x01, 0x66, 0x11, 0xb8, 0x7e, 0x42, 0x3d, 0x86, 0xcc, - 0xca, 0xb2, 0x3b, 0x90, 0xb6, 0xea, 0x77, 0x59, 0xe0, 0x78, 0xed, 0x7d, 0x5e, 0x2f, 0x86, 0xcd, - 0x3f, 0xe0, 0x9e, 0xf7, 0xf3, 0x58, 0xbb, 0xff, 0x66, 0x8d, 0x7f, 0xc9, 0x24, 0xec, 0xc7, 0xda, - 0x82, 0x10, 0x91, 0xe2, 0x84, 0x03, 0x02, 0x0e, 0xc8, 0x42, 0x1e, 0x49, 0xe9, 0xf6, 0xcc, 0x03, - 0x97, 0x62, 0xcc, 0x9c, 0x40, 0x55, 0x6f, 0x65, 0x7c, 0x18, 0x1f, 0xc2, 0xb8, 0x39, 0xc4, 0x27, - 0xa5, 0x6a, 0xfc, 0x6f, 0x41, 0x69, 0xaf, 0x9f, 0xdf, 0xf0, 0xf9, 0x20, 0x17, 0x3e, 0xaf, 0x65, - 0xd4, 0xa9, 0x6e, 0x7c, 0x78, 0x54, 0xe0, 0x6c, 0x5c, 0x84, 0x99, 0x1c, 0x12, 0x9e, 0x2b, 0xab, - 0x96, 0x45, 0xc3, 0x50, 0xa7, 0x7f, 0x12, 0xd1, 0x90, 0x7d, 0x25, 0xcf, 0x95, 0x9c, 0x86, 0x63, - 0x9d, 0x2b, 0xff, 0x5e, 0x84, 0xf9, 0x11, 0x54, 0xdc, 0x36, 0xcf, 0x43, 0x9a, 0xeb, 0x73, 0x45, - 0x21, 0x0d, 0x74, 0x84, 0xf2, 0x6a, 0x41, 0x24, 0xb4, 0x4a, 0x0d, 0x84, 0x09, 0x6d, 0x52, 0xa3, - 0xac, 0x26, 0x17, 0x0e, 0xdc, 0x10, 0xb3, 0x6a, 0xf3, 0x2d, 0x99, 0x86, 0x8f, 0xbe, 0xf6, 0x22, - 0x62, 0x17, 0xa6, 0xd6, 0x02, 0x8a, 0x4d, 0xf6, 0xf2, 0xf8, 0x65, 0x8e, 0x25, 0x48, 0x06, 0xcb, - 0x1c, 0xc9, 0x49, 0xad, 0x9d, 0x26, 0x7e, 0x5d, 0xb5, 0x53, 0xe3, 0xcf, 0x0b, 0x03, 0x36, 0x7c, - 0xe4, 0xb8, 0x8c, 0x06, 0xe4, 0x2a, 0xde, 0xef, 0x08, 0x0b, 0x4e, 0xf6, 0x63, 0xad, 0xe8, 0xd8, - 0x7a, 0x71, 0xa3, 0x95, 0xda, 0xb6, 0x38, 0xd2, 0xb6, 0xdf, 0x1c, 0xcf, 0x74, 0x68, 0x73, 0x34, - 0x9d, 0x34, 0x58, 0xe3, 0x87, 0x45, 0x98, 0xde, 0x71, 0xa3, 0xb6, 0xe3, 0xb5, 0x4c, 0x66, 0x9e, - 0x67, 0xff, 0xfe, 0x28, 0xe7, 0xdf, 0x6a, 0xc2, 0x9e, 0xaa, 0x37, 0x96, 0x73, 0xff, 0xb8, 0x00, - 0x17, 0x33, 0x12, 0xd1, 0x44, 0xdc, 0x84, 0x32, 0xff, 0x21, 0x8b, 0x81, 0xdb, 0xa3, 0x78, 0x23, - 0xe2, 0x52, 0xfa, 0x25, 0xce, 0xb2, 0x81, 0x66, 0x39, 0x32, 0x59, 0xf8, 0x26, 0x54, 0x33, 0xce, - 0x6f, 0x72, 0x3b, 0xf7, 0xaf, 0x05, 0x98, 0x1b, 0x54, 0x86, 0x6c, 0xc3, 0x14, 0xe7, 0xe4, 0xd0, - 0xa4, 0x54, 0x79, 0xef, 0x74, 0xcd, 0x97, 0x24, 0xa6, 0x90, 0x10, 0x17, 0x82, 0x0a, 0x88, 0x9e, - 0x30, 0x59, 0x78, 0x0e, 0xd3, 0x2a, 0xd6, 0x08, 0x01, 0x97, 0xf3, 0xfd, 0xd3, 0xeb, 0xa7, 0x5a, - 0x43, 0x95, 0xfd, 0x27, 0x39, 0xd9, 0xa5, 0xaf, 0x8f, 0x7b, 0x13, 0xb2, 0x02, 0x95, 0xe4, 0x0e, - 0x45, 0x75, 0xbb, 0x40, 0xc2, 0x72, 0x4d, 0x1a, 0x09, 0xe3, 0x19, 0x83, 0x98, 0x4f, 0xba, 0x1d, - 0x66, 0x0c, 0x5d, 0x84, 0xa8, 0x19, 0x83, 0xc0, 0x69, 0xfc, 0x43, 0x09, 0xae, 0x66, 0xe2, 0x89, - 0x7b, 0xa1, 0x1d, 0x33, 0x30, 0x3b, 0xe1, 0x19, 0x1b, 0xe2, 0xce, 0x90, 0x68, 0xd8, 0x81, 0x4f, - 0x44, 0x53, 0x04, 0x6a, 0x0c, 0x08, 0x84, 0x6d, 0x22, 0x21, 0x50, 0x22, 0x06, 0xd9, 0x86, 0xd2, - 0x2e, 0x65, 0xb2, 0x3f, 0xff, 0xfe, 0x28, 0xc3, 0xaa, 0xa2, 0x2d, 0xed, 0x52, 0x26, 0x96, 0x12, - 0xbb, 0x81, 0x21, 0x55, 0x7b, 0xbe, 0x9c, 0x11, 0xf9, 0x3d, 0x98, 0x5c, 0x7f, 0xd9, 0xa5, 0x16, - 0x93, 0xf7, 0xd9, 0x77, 0xcf, 0x64, 0x29, 0xd0, 0x95, 0xdb, 0x6d, 0x8a, 0x00, 0xd5, 0x64, 0x02, - 0x65, 0xe1, 0x3e, 0x54, 0x92, 0xf9, 0xdf, 0xc4, 0x8b, 0x17, 0x1e, 0x40, 0x4d, 0x99, 0xe4, 0x8d, - 0x36, 0xc0, 0x9f, 0x15, 0x61, 0x92, 0x1f, 0x15, 0xe7, 0x39, 0x4c, 0xdd, 0xcf, 0x85, 0xa9, 0xcb, - 0xf9, 0x5e, 0xe9, 0x58, 0x01, 0xea, 0x57, 0x05, 0x80, 0x0c, 0x99, 0x7c, 0x1b, 0xa6, 0x9e, 0xe1, - 0xeb, 0x85, 0xe4, 0x02, 0x76, 0xa0, 0xff, 0x2a, 0x07, 0x9b, 0xd7, 0x93, 0x83, 0xc9, 0x17, 0x00, - 0xd5, 0x0a, 0x12, 0x87, 0x3c, 0x86, 0x89, 0x55, 0xd7, 0xf5, 0x5f, 0x0c, 0x5f, 0x8d, 0x70, 0x4e, - 0x6b, 0xbe, 0x67, 0x3b, 0x82, 0xd9, 0x35, 0xc9, 0xec, 0xa2, 0xc9, 0xd1, 0xd5, 0x73, 0x18, 0xe9, - 0x49, 0x0b, 0xca, 0x2d, 0xea, 0x25, 0x17, 0xa9, 0xa7, 0xf3, 0xb9, 0x2a, 0xf9, 0xcc, 0xda, 0xd4, - 0xeb, 0xe5, 0x22, 0x25, 0xf5, 0x7a, 0x8d, 0x9f, 0x96, 0x45, 0xa7, 0x35, 0x11, 0xef, 0x21, 0x4c, - 0x3f, 0xf2, 0x83, 0x17, 0x66, 0x60, 0xaf, 0xb6, 0xa9, 0x27, 0x6e, 0x3c, 0x2a, 0x78, 0x57, 0x36, - 0x73, 0x28, 0xe0, 0x86, 0xc9, 0x07, 0xd2, 0xca, 0x23, 0x87, 0x4e, 0x9e, 0xc1, 0xcc, 0x53, 0xf3, - 0xa5, 0x4c, 0xed, 0xf7, 0xf6, 0xb6, 0x50, 0xcb, 0x52, 0xf3, 0xfd, 0x7e, 0xac, 0x5d, 0xef, 0x98, - 0x2f, 0x93, 0x8a, 0xc0, 0x60, 0xcc, 0x3d, 0xe5, 0x52, 0x3f, 0x4f, 0x4f, 0x5c, 0x98, 0xdd, 0xf1, - 0x03, 0x26, 0x27, 0xe1, 0x55, 0xb4, 0xd0, 0x77, 0x3e, 0xd3, 0x97, 0x8b, 0x81, 0x65, 0x41, 0x73, - 0xf9, 0x55, 0xac, 0x15, 0x7e, 0x1e, 0x6b, 0xc0, 0x41, 0x42, 0x23, 0x3e, 0x31, 0x2f, 0x03, 0x8c, - 0xc3, 0x94, 0x83, 0x9a, 0xa0, 0xe7, 0x79, 0x93, 0x87, 0x70, 0x89, 0x17, 0x85, 0xce, 0xa1, 0x63, - 0x99, 0x8c, 0x3e, 0xf2, 0x83, 0x8e, 0xc9, 0xe4, 0xcb, 0x08, 0x7c, 0x01, 0xc4, 0x0b, 0x4a, 0xce, - 0xa9, 0x63, 0x32, 0x7d, 0x18, 0x93, 0xfc, 0xfe, 0xe9, 0x95, 0xef, 0xd7, 0xfb, 0xb1, 0xf6, 0xd6, - 0x88, 0xca, 0xf7, 0x14, 0x2b, 0x8c, 0xa8, 0x81, 0xdb, 0xaf, 0xaf, 0x81, 0xbf, 0x21, 0xfb, 0xea, - 0x6f, 0x9f, 0x52, 0x07, 0xe7, 0x26, 0x7a, 0x6d, 0x45, 0xbc, 0x02, 0xa5, 0xe6, 0xce, 0x23, 0xbc, - 0x18, 0x90, 0xd5, 0x1c, 0xf5, 0x8e, 0x4c, 0xcf, 0xa2, 0x76, 0xd6, 0xae, 0x50, 0xa3, 0x60, 0x73, - 0xe7, 0x51, 0xe3, 0x3f, 0x4a, 0x30, 0x9b, 0xf7, 0x3b, 0x1e, 0x8c, 0xb7, 0xfc, 0xb6, 0xe3, 0x25, - 0xdd, 0x55, 0x0c, 0xc6, 0x2e, 0x42, 0x74, 0x39, 0x42, 0xde, 0x01, 0x48, 0xcb, 0x81, 0x24, 0x69, - 0x95, 0xef, 0x8d, 0x94, 0x01, 0xf2, 0x47, 0x00, 0xdb, 0xbe, 0x4d, 0xe5, 0xd5, 0x6a, 0x49, 0x6e, - 0xc1, 0xb4, 0xa8, 0x13, 0xd7, 0x85, 0xa2, 0x30, 0x7c, 0x4f, 0x16, 0x86, 0xf2, 0x81, 0x50, 0x3f, - 0xd6, 0xae, 0x78, 0xbe, 0x4d, 0x87, 0x6f, 0x55, 0x15, 0x8e, 0xe4, 0x21, 0x4c, 0xe8, 0x91, 0x4b, - 0x93, 0x5b, 0xdb, 0x59, 0x65, 0x2f, 0x45, 0x2e, 0xcd, 0x76, 0x62, 0x10, 0x0d, 0x5e, 0xcf, 0x70, - 0x00, 0xf9, 0x18, 0x60, 0x33, 0x3a, 0xa0, 0x8f, 0x03, 0x3f, 0xea, 0x26, 0xd7, 0x39, 0x5a, 0x3f, - 0xd6, 0x6e, 0x1c, 0x47, 0x07, 0x34, 0xf0, 0x28, 0xa3, 0xa1, 0xd1, 0xc6, 0x41, 0x75, 0xfe, 0x8c, - 0x84, 0xe8, 0x30, 0x25, 0x73, 0x48, 0xf9, 0x8a, 0xe9, 0xed, 0x53, 0x4a, 0x07, 0x65, 0x5b, 0x63, - 0x1b, 0x29, 0x10, 0xe0, 0xdc, 0x35, 0x8f, 0x00, 0x91, 0x8f, 0xa0, 0xca, 0x67, 0xe0, 0xa9, 0x6b, - 0x28, 0xd7, 0x12, 0xcb, 0x55, 0x45, 0x26, 0x9e, 0xdc, 0xe6, 0x2e, 0x9a, 0x53, 0x82, 0x46, 0x0b, - 0xae, 0x9d, 0x32, 0x71, 0x76, 0x6f, 0x55, 0x38, 0xeb, 0xde, 0xaa, 0xf1, 0xd3, 0x02, 0x94, 0xb9, - 0x89, 0xc8, 0x07, 0x50, 0x4d, 0x0e, 0xe9, 0x84, 0xee, 0x5a, 0x3f, 0xd6, 0xe6, 0x93, 0x33, 0x3c, - 0x27, 0x45, 0x8a, 0xc9, 0xa7, 0xda, 0xa7, 0xc1, 0x41, 0xe2, 0x19, 0x38, 0xd5, 0x09, 0x07, 0xa8, - 0x53, 0x21, 0x06, 0x47, 0xfd, 0xce, 0x11, 0x0d, 0x92, 0x3b, 0x7a, 0x44, 0x7d, 0xc1, 0x01, 0x2a, - 0x2a, 0x62, 0x90, 0x65, 0x98, 0x5a, 0xb5, 0x44, 0x34, 0x2f, 0x23, 0x5f, 0x34, 0xa5, 0x69, 0x0d, - 0x85, 0x6c, 0x89, 0xd5, 0x78, 0x1b, 0xaa, 0x69, 0x8c, 0xe1, 0x47, 0x27, 0x7e, 0x88, 0xc8, 0xa8, - 0x8b, 0x1f, 0x78, 0x6c, 0x72, 0xcb, 0x9d, 0xe7, 0xa6, 0xf3, 0xa9, 0xc7, 0x26, 0x57, 0x6c, 0xac, - 0x6e, 0xf3, 0x3f, 0x4f, 0x02, 0x64, 0xc8, 0x84, 0xc2, 0xec, 0xb3, 0x8d, 0xd6, 0xda, 0x86, 0x4d, - 0x3d, 0xe6, 0xb0, 0x2c, 0x7d, 0x56, 0x0a, 0x87, 0xf5, 0x97, 0x8c, 0x06, 0x9e, 0xe9, 0x4a, 0x9c, - 0x5e, 0xf3, 0x6d, 0x39, 0xc1, 0x75, 0xdf, 0xb1, 0x2d, 0xc3, 0x49, 0x49, 0xd5, 0xa0, 0x9d, 0x67, - 0xca, 0xa7, 0xd9, 0x5d, 0x7d, 0xba, 0xa5, 0x4c, 0x53, 0x1c, 0x7f, 0x9a, 0xd0, 0xec, 0xb8, 0xa7, - 0x4c, 0x93, 0x67, 0x4a, 0x8e, 0x61, 0xee, 0x31, 0x36, 0x9b, 0x94, 0x89, 0x4a, 0x67, 0x4e, 0x74, - 0x5b, 0x4e, 0x74, 0x43, 0x34, 0xaa, 0x46, 0x4f, 0x35, 0xc4, 0x38, 0xdb, 0x64, 0xe5, 0x33, 0x2f, - 0x87, 0xbf, 0x57, 0x80, 0xc9, 0xbd, 0xc0, 0x74, 0x58, 0x52, 0x3a, 0x9f, 0x12, 0x19, 0x3f, 0x95, - 0x91, 0xf1, 0x83, 0x37, 0x6c, 0x99, 0x09, 0xde, 0x3c, 0x4f, 0x65, 0xf8, 0xa5, 0xe6, 0xa9, 0x62, - 0x8c, 0x3c, 0x86, 0x49, 0x5e, 0xea, 0x46, 0xc9, 0x23, 0x4c, 0x25, 0x3d, 0xc2, 0x40, 0x2f, 0x06, - 0x9b, 0x75, 0x69, 0x8b, 0xb9, 0x10, 0x7f, 0xab, 0x8c, 0x04, 0x86, 0xfa, 0xe8, 0x75, 0xea, 0xff, - 0xf7, 0xe8, 0x95, 0x3c, 0x83, 0xaa, 0x6c, 0x2e, 0x34, 0x7b, 0xf2, 0x3a, 0x5a, 0xc9, 0x19, 0xd2, - 0x21, 0xe5, 0xed, 0x8d, 0x00, 0x19, 0xea, 0x43, 0x33, 0x3d, 0xe3, 0x41, 0xf4, 0xc1, 0x6e, 0x6c, - 0x6e, 0xe1, 0xd3, 0xa1, 0x5d, 0x6a, 0x05, 0x94, 0x85, 0xa2, 0xd3, 0x9b, 0x75, 0x6a, 0x55, 0x9e, - 0x59, 0xaf, 0xf6, 0x07, 0x05, 0x98, 0x1b, 0x74, 0x19, 0xf2, 0x11, 0xd4, 0xd6, 0xc4, 0xa9, 0xec, - 0x07, 0x69, 0x9f, 0x02, 0x3b, 0xf8, 0x56, 0x02, 0x36, 0x72, 0x2f, 0x52, 0x55, 0x74, 0x5e, 0xc8, - 0xf1, 0x2d, 0xe8, 0x65, 0x8f, 0x1f, 0x30, 0xc2, 0x44, 0x12, 0xa6, 0x16, 0x72, 0x09, 0x9e, 0xb2, - 0x83, 0xff, 0xad, 0x08, 0x35, 0x65, 0xc9, 0xc8, 0xfb, 0x50, 0xd9, 0x08, 0xb7, 0x7c, 0xeb, 0x98, - 0xda, 0x32, 0x15, 0xc4, 0x97, 0xcd, 0x4e, 0x68, 0xb8, 0x08, 0xd4, 0xd3, 0x61, 0xd2, 0x84, 0x19, - 0xf1, 0xf5, 0x94, 0x86, 0xa1, 0xd9, 0x4e, 0x66, 0xbf, 0xd9, 0x8f, 0xb5, 0xba, 0x40, 0x36, 0x3a, - 0x62, 0x44, 0x91, 0x21, 0x4f, 0x42, 0xfe, 0x10, 0x40, 0x00, 0xf8, 0x2a, 0x8f, 0xf1, 0x44, 0x30, - 0xd9, 0xc6, 0x57, 0xe4, 0x04, 0x3c, 0xa9, 0x1a, 0xe8, 0x06, 0x29, 0x0c, 0xf1, 0x8d, 0xa8, 0x6f, - 0x1d, 0x8f, 0xff, 0xae, 0x3a, 0x7b, 0x23, 0xea, 0x5b, 0xc7, 0xc6, 0xe8, 0x76, 0x93, 0xca, 0xb2, - 0xf1, 0xcb, 0x82, 0xe2, 0x76, 0xe4, 0x53, 0xa8, 0xa6, 0x4b, 0x23, 0x2b, 0x87, 0xab, 0xea, 0x53, - 0x28, 0x39, 0xa4, 0xd3, 0xc3, 0xe6, 0x0d, 0x99, 0xbe, 0xcd, 0xa7, 0x6b, 0x9c, 0xf3, 0xc2, 0x04, - 0x48, 0x3e, 0x81, 0x32, 0xda, 0xe6, 0xec, 0x17, 0x06, 0x49, 0xa8, 0x2f, 0x73, 0xa3, 0xa0, 0xa4, - 0x48, 0x49, 0xee, 0xc9, 0x2e, 0x97, 0xb0, 0xee, 0xa5, 0x7c, 0x98, 0xe7, 0xa2, 0xa4, 0x31, 0x3e, - 0x6b, 0x7e, 0x29, 0x1e, 0xf2, 0xa7, 0x05, 0x98, 0x7f, 0xbe, 0xf2, 0x48, 0xa7, 0x6d, 0x27, 0x64, - 0x22, 0x5b, 0xe5, 0x15, 0x2e, 0xb9, 0x0e, 0x25, 0xdd, 0x7c, 0x21, 0x5f, 0x48, 0x4d, 0xf5, 0x63, - 0xad, 0x14, 0x98, 0x2f, 0x74, 0x0e, 0x23, 0x77, 0xa1, 0xba, 0x49, 0x7b, 0x4f, 0x4c, 0xcf, 0x76, - 0xa9, 0x7c, 0x1b, 0x85, 0x17, 0x59, 0xc7, 0xb4, 0x67, 0x1c, 0x21, 0x54, 0xcf, 0x10, 0xb0, 0x88, - 0x8f, 0x0e, 0x36, 0xa9, 0xa8, 0x6c, 0xa6, 0x65, 0x11, 0x1f, 0x1d, 0x1c, 0xd3, 0x9e, 0x2e, 0x47, - 0x1a, 0xff, 0x58, 0x84, 0xb9, 0xc1, 0x1d, 0x47, 0x3e, 0x86, 0xe9, 0x1d, 0x33, 0x0c, 0x5f, 0xf8, - 0x81, 0xfd, 0xc4, 0x0c, 0x8f, 0xa4, 0x28, 0x37, 0xfa, 0xb1, 0x76, 0xad, 0x2b, 0xe1, 0xc6, 0x91, - 0x19, 0xaa, 0x5b, 0x31, 0x47, 0xc0, 0xcf, 0xe6, 0xbd, 0x67, 0x7b, 0x3b, 0xc9, 0x0b, 0x2e, 0xb9, - 0x73, 0x98, 0xcf, 0xba, 0x46, 0xfe, 0x19, 0x57, 0x82, 0x46, 0xda, 0x70, 0x71, 0xc0, 0x16, 0xd2, - 0xac, 0x4a, 0xef, 0x77, 0x84, 0xb1, 0x44, 0x26, 0x16, 0xad, 0x1c, 0x1a, 0x81, 0x32, 0xa2, 0x4c, - 0x30, 0xc8, 0x95, 0x3c, 0x00, 0x78, 0xbe, 0xf2, 0x08, 0x6f, 0x86, 0x68, 0x80, 0x8e, 0x3b, 0x23, - 0x1e, 0x30, 0x72, 0x26, 0x96, 0x00, 0xab, 0xc9, 0x65, 0x86, 0xdc, 0xf0, 0x60, 0x5a, 0xf5, 0x34, - 0x9e, 0x9f, 0x28, 0xf7, 0x41, 0x95, 0xe4, 0x39, 0x95, 0xbc, 0x05, 0x12, 0xbd, 0xd1, 0xe2, 0x50, - 0x6f, 0xf4, 0x0e, 0x54, 0x92, 0x00, 0xa5, 0x3e, 0x83, 0x94, 0xc7, 0x59, 0x4f, 0x4f, 0x47, 0x1b, - 0xef, 0xc1, 0x94, 0xf4, 0xa4, 0xd7, 0xff, 0xaf, 0x41, 0xe3, 0xfb, 0x45, 0xb8, 0xa8, 0x53, 0x9e, - 0xc8, 0xc8, 0xa7, 0x85, 0x5f, 0xc9, 0x77, 0x70, 0x39, 0x0d, 0x4f, 0xcf, 0xa2, 0x1a, 0xff, 0x54, - 0x80, 0xf9, 0x11, 0xb8, 0x5f, 0xe6, 0xb2, 0x9e, 0xdc, 0x87, 0x6a, 0xcb, 0x31, 0xdd, 0x55, 0xdb, - 0x0e, 0x92, 0xdc, 0x19, 0x8f, 0x23, 0xdb, 0xe1, 0xa7, 0x11, 0x87, 0xaa, 0xc1, 0x25, 0x45, 0x25, - 0x5f, 0x93, 0xae, 0x51, 0x4a, 0x8d, 0x9b, 0xbc, 0xb4, 0x03, 0x21, 0x53, 0xf6, 0xce, 0xae, 0xf1, - 0x77, 0x45, 0x20, 0x02, 0x28, 0xbd, 0xcb, 0xf1, 0xcf, 0xf5, 0x7b, 0xa3, 0x66, 0x6e, 0x01, 0x17, - 0x95, 0xf7, 0x70, 0x03, 0x4a, 0x8e, 0x95, 0x09, 0xff, 0xa0, 0x08, 0x57, 0x47, 0x13, 0x7e, 0xa9, - 0x05, 0xbd, 0x0b, 0x55, 0xbc, 0xa5, 0x57, 0x9e, 0x34, 0x62, 0x04, 0x15, 0x57, 0xfa, 0x88, 0x9f, - 0x21, 0x90, 0x43, 0x98, 0xd9, 0x32, 0x43, 0xf6, 0x84, 0x9a, 0x01, 0x3b, 0xa0, 0x26, 0x1b, 0xe3, - 0x20, 0x4d, 0x5f, 0xf3, 0xe3, 0x3f, 0x43, 0x1c, 0x25, 0x94, 0x83, 0xaf, 0xf9, 0x73, 0x6c, 0x53, - 0x77, 0x29, 0x9f, 0xed, 0x2e, 0x5f, 0xfb, 0x18, 0xa6, 0xd5, 0x6b, 0x12, 0x52, 0x81, 0xf2, 0xf6, - 0xb3, 0xed, 0xf5, 0xb9, 0x0b, 0xa4, 0x06, 0x53, 0x3b, 0xeb, 0xdb, 0xad, 0x8d, 0xed, 0xc7, 0x73, - 0x05, 0x32, 0x0d, 0x95, 0xd5, 0x9d, 0x1d, 0xfd, 0xd9, 0xfe, 0x7a, 0x6b, 0xae, 0x48, 0x00, 0x26, - 0x5b, 0xeb, 0xdb, 0x1b, 0xeb, 0xad, 0xb9, 0x52, 0xf3, 0xf2, 0xab, 0xff, 0xbe, 0x75, 0xe1, 0xd5, - 0xe7, 0xb7, 0x0a, 0x3f, 0xfb, 0xfc, 0x56, 0xe1, 0xbf, 0x3e, 0xbf, 0x55, 0xf8, 0xec, 0x7f, 0x6e, - 0x5d, 0x38, 0x98, 0x44, 0x5d, 0xee, 0xfd, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x04, 0x2f, - 0x6b, 0x4f, 0x36, 0x00, 0x00, +var fileDescriptor_types_6fca1a07e7522128 = []byte{ + // 4144 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3b, 0x5d, 0x6f, 0x1c, 0xc9, + 0x71, 0x9a, 0xdd, 0x25, 0xb9, 0x5b, 0x4b, 0x52, 0x54, 0x53, 0x1f, 0x2b, 0x4a, 0xa7, 0xe1, 0x8d, + 0x72, 0x77, 0x92, 0xa3, 0x23, 0x63, 0x2a, 0x27, 0x5b, 0x97, 0x53, 0xee, 0xb8, 0x5c, 0x4a, 0xa2, + 0x49, 0x49, 0xbc, 0x21, 0x45, 0xc3, 0xf9, 0x9a, 0x0c, 0x67, 0x5a, 0xcb, 0x01, 0x67, 0x67, 0xd6, + 0xf3, 0x41, 0x69, 0xdf, 0x8c, 0x24, 0x40, 0x90, 0x18, 0xb0, 0x13, 0x04, 0x86, 0x0f, 0x88, 0x81, + 0x04, 0xc8, 0x4b, 0xf2, 0xe0, 0xbc, 0x06, 0x79, 0xc8, 0x43, 0x00, 0x3f, 0x08, 0x01, 0x02, 0xe4, + 0xd9, 0x70, 0xc6, 0xc9, 0xe5, 0xe1, 0x80, 0xfd, 0x03, 0x01, 0xee, 0x25, 0x41, 0x57, 0xf7, 0xcc, + 0xf4, 0xec, 0x2e, 0xc5, 0xd5, 0xe5, 0xf2, 0xc0, 0x7b, 0xe2, 0xb0, 0xba, 0xaa, 0xba, 0xab, 0xba, + 0xba, 0xba, 0xaa, 0xba, 0x16, 0xea, 0x51, 0xaf, 0x4b, 0xc3, 0xa5, 0x6e, 0xe0, 0x47, 0x3e, 0xa9, + 0x86, 0x34, 0x38, 0x72, 0x2c, 0x1a, 0x2e, 0x9c, 0x6f, 0xfb, 0x6d, 0x1f, 0x81, 0xcb, 0xec, 0x8b, + 0x8f, 0x2f, 0xa8, 0x6d, 0xdf, 0x6f, 0xbb, 0x74, 0x19, 0xff, 0xdb, 0x8f, 0x9f, 0x2d, 0x47, 0x4e, + 0x87, 0x86, 0x91, 0xd9, 0xe9, 0x0a, 0x84, 0x7b, 0x6d, 0x27, 0x3a, 0x88, 0xf7, 0x97, 0x2c, 0xbf, + 0xb3, 0xdc, 0x0e, 0xcc, 0x23, 0x27, 0x32, 0x23, 0xc7, 0xf7, 0x4c, 0x77, 0x39, 0xa2, 0x2e, 0xed, + 0xfa, 0x41, 0xb4, 0xec, 0x3a, 0xfb, 0xcb, 0xcf, 0x03, 0xb3, 0xdb, 0xa5, 0x41, 0x98, 0x7d, 0x70, + 0x72, 0xed, 0x17, 0x0a, 0xd4, 0x36, 0x29, 0xed, 0xae, 0xba, 0xce, 0x11, 0x25, 0xcb, 0x00, 0x3b, + 0x34, 0x38, 0xa2, 0xc1, 0x63, 0xb3, 0x43, 0x1b, 0xca, 0xa2, 0x72, 0xa3, 0xd6, 0x3c, 0xdb, 0x4f, + 0xd4, 0x7a, 0x88, 0x50, 0xc3, 0x33, 0x3b, 0x54, 0x97, 0x50, 0xc8, 0xaf, 0x42, 0x8d, 0xfd, 0x0d, + 0xbb, 0xa6, 0x45, 0x1b, 0x25, 0xc4, 0x9f, 0xe9, 0x27, 0x6a, 0xcd, 0x4b, 0x81, 0x7a, 0x3e, 0x4e, + 0xde, 0x86, 0xa9, 0x2d, 0x6a, 0x86, 0x74, 0xa3, 0xd5, 0x28, 0x2f, 0x2a, 0x37, 0xca, 0xcd, 0xe9, + 0x7e, 0xa2, 0x56, 0x5d, 0x06, 0x32, 0x1c, 0x5b, 0x4f, 0x07, 0xc9, 0x06, 0x4c, 0xad, 0xbf, 0xe8, + 0x3a, 0x01, 0x0d, 0x1b, 0x95, 0x45, 0xe5, 0x46, 0x7d, 0x65, 0x61, 0x89, 0x6b, 0x61, 0x29, 0xd5, + 0xc2, 0xd2, 0x6e, 0xaa, 0x85, 0xe6, 0xfc, 0xcb, 0x44, 0x3d, 0xd3, 0x4f, 0xd4, 0x29, 0xca, 0x49, + 0xfe, 0xec, 0x97, 0xaa, 0xa2, 0xa7, 0xf4, 0xda, 0x9f, 0x96, 0xa1, 0xfa, 0x88, 0x46, 0xa6, 0x6d, + 0x46, 0x26, 0xb9, 0x0a, 0x15, 0x49, 0xae, 0x6a, 0x3f, 0x51, 0x2b, 0x28, 0x10, 0x42, 0xc9, 0xf5, + 0x61, 0x51, 0x26, 0xfa, 0x89, 0xaa, 0xbc, 0x2b, 0x8b, 0xf0, 0x1b, 0x50, 0x6f, 0xd1, 0xd0, 0x0a, + 0x9c, 0x2e, 0x53, 0x32, 0x8a, 0x51, 0x6b, 0x5e, 0xee, 0x27, 0xea, 0x05, 0x3b, 0x07, 0xdf, 0xf2, + 0x3b, 0x4e, 0x44, 0x3b, 0xdd, 0xa8, 0xa7, 0xcb, 0xd8, 0x64, 0x0b, 0x26, 0xb7, 0xcc, 0x7d, 0xea, + 0x86, 0x8d, 0x89, 0xc5, 0xf2, 0x8d, 0xfa, 0xca, 0xb5, 0xa5, 0x74, 0xf3, 0x97, 0xd2, 0x35, 0x2e, + 0x71, 0x84, 0x75, 0x2f, 0x0a, 0x7a, 0xcd, 0xf3, 0xfd, 0x44, 0x9d, 0x73, 0x11, 0x20, 0xb1, 0x14, + 0x3c, 0xc8, 0x4e, 0xae, 0xa5, 0xc9, 0x13, 0xb5, 0xf4, 0xc6, 0xcb, 0x44, 0x55, 0xfa, 0x89, 0x7a, + 0x4e, 0x68, 0x29, 0xe7, 0x57, 0xd0, 0x17, 0x59, 0x84, 0xd2, 0x46, 0xab, 0x31, 0x85, 0xbb, 0x33, + 0xd7, 0x4f, 0xd4, 0x69, 0xc7, 0x96, 0xa6, 0x2e, 0x6d, 0xb4, 0x16, 0xee, 0x42, 0x5d, 0x5a, 0x23, + 0x99, 0x83, 0xf2, 0x21, 0xed, 0x71, 0x95, 0xea, 0xec, 0x93, 0x9c, 0x87, 0x89, 0x23, 0xd3, 0x8d, + 0x85, 0x0e, 0x75, 0xfe, 0xcf, 0xfb, 0xa5, 0x6f, 0x2a, 0xda, 0x8f, 0x2a, 0x50, 0xd5, 0x7d, 0x6e, + 0x9f, 0xe4, 0x26, 0x4c, 0xec, 0x44, 0x66, 0x94, 0xee, 0xc6, 0x7c, 0x3f, 0x51, 0xcf, 0x86, 0x0c, + 0x20, 0xcd, 0xc7, 0x31, 0x18, 0xea, 0xf6, 0x81, 0x19, 0xa6, 0xbb, 0x82, 0xa8, 0x5d, 0x06, 0x90, + 0x51, 0x11, 0x83, 0xbc, 0x0d, 0x95, 0x47, 0xbe, 0x4d, 0xc5, 0xc6, 0x90, 0x7e, 0xa2, 0xce, 0x76, + 0x7c, 0x5b, 0x46, 0xc4, 0x71, 0x72, 0x0b, 0x6a, 0x6b, 0x71, 0x10, 0x50, 0x2f, 0xda, 0x68, 0xa1, + 0x91, 0xd5, 0x9a, 0xb3, 0xfd, 0x44, 0x05, 0x8b, 0x03, 0x99, 0x39, 0xe6, 0x08, 0x4c, 0xd5, 0x3b, + 0x91, 0x19, 0x44, 0xd4, 0x6e, 0x4c, 0x8c, 0xa5, 0x6a, 0x66, 0x90, 0xe7, 0x42, 0x4e, 0x32, 0xa8, + 0x6a, 0xc1, 0x89, 0x3c, 0x84, 0xfa, 0x83, 0xc0, 0xb4, 0xe8, 0x36, 0x0d, 0x1c, 0xdf, 0xc6, 0x3d, + 0x2c, 0x37, 0xdf, 0xee, 0x27, 0xea, 0xc5, 0x36, 0x03, 0x1b, 0x5d, 0x84, 0xe7, 0xd4, 0x9f, 0x27, + 0x6a, 0xb5, 0x15, 0x07, 0xa8, 0x3d, 0x5d, 0x26, 0x25, 0xbf, 0xcf, 0xb6, 0x24, 0x8c, 0x50, 0xb5, + 0xd4, 0xc6, 0xdd, 0x7b, 0xf5, 0x12, 0x35, 0xb1, 0xc4, 0x8b, 0xae, 0x19, 0x46, 0x46, 0xc0, 0xe9, + 0x06, 0xd6, 0x29, 0xb3, 0x24, 0x3a, 0x54, 0x77, 0xac, 0x03, 0x6a, 0xc7, 0x2e, 0x6d, 0x54, 0x05, + 0xfb, 0xcc, 0x76, 0xd3, 0x2d, 0x4d, 0x31, 0x9a, 0x0b, 0x82, 0x3d, 0x09, 0x05, 0x44, 0x52, 0x7f, + 0xc6, 0xe7, 0xfd, 0xea, 0x27, 0x7f, 0xad, 0x9e, 0xf9, 0xde, 0x2f, 0x16, 0xcf, 0x68, 0xff, 0x50, + 0x82, 0xb9, 0x41, 0x26, 0xe4, 0x19, 0xcc, 0x3c, 0xed, 0xda, 0x66, 0x44, 0xd7, 0x5c, 0x87, 0x7a, + 0x51, 0x88, 0x76, 0xf2, 0x6a, 0xb1, 0x7e, 0x45, 0xcc, 0xdb, 0x88, 0x91, 0xd0, 0xb0, 0x38, 0xe5, + 0x80, 0x60, 0x45, 0xb6, 0xf9, 0x3c, 0xdc, 0xab, 0x85, 0x68, 0x64, 0xaf, 0x37, 0x0f, 0x77, 0x8e, + 0xc7, 0xcc, 0x23, 0xd8, 0x0a, 0x1b, 0xf2, 0xec, 0xfd, 0x1e, 0x1a, 0xe7, 0xf8, 0x36, 0xc4, 0x48, + 0x46, 0xd8, 0x10, 0x03, 0x6b, 0x9f, 0x29, 0x30, 0xab, 0xd3, 0xd0, 0x8f, 0x03, 0x8b, 0x3e, 0xa4, + 0xa6, 0x4d, 0x03, 0x76, 0x02, 0x36, 0x1d, 0xcf, 0x16, 0xc7, 0x0a, 0x4f, 0xc0, 0xa1, 0xe3, 0xc9, + 0xa7, 0x18, 0xc7, 0xc9, 0xaf, 0xc1, 0xd4, 0x4e, 0xbc, 0x8f, 0xa8, 0xfc, 0x58, 0x5d, 0xc4, 0x1d, + 0x8b, 0xf7, 0x8d, 0x01, 0xf4, 0x14, 0x8d, 0x2c, 0xc3, 0xd4, 0x1e, 0x0d, 0xc2, 0xdc, 0xef, 0x5d, + 0x60, 0x2b, 0x3c, 0xe2, 0x20, 0x99, 0x40, 0x60, 0x91, 0x6f, 0xe5, 0xbe, 0x57, 0x38, 0x72, 0x32, + 0xec, 0xf1, 0x72, 0x6b, 0xe9, 0x08, 0x88, 0x6c, 0x2d, 0x29, 0x96, 0xf6, 0xc7, 0x25, 0xa8, 0x72, + 0x55, 0xee, 0xad, 0x30, 0x47, 0x2e, 0xc9, 0x88, 0x8e, 0x9c, 0x2d, 0xfa, 0x0b, 0x4b, 0xf6, 0xd6, + 0xa0, 0x64, 0x75, 0x76, 0xa1, 0x08, 0xc9, 0x72, 0x79, 0x3e, 0x1a, 0x4b, 0x9e, 0x39, 0x21, 0x4f, + 0x35, 0x95, 0x27, 0x97, 0x82, 0x7c, 0x13, 0x2a, 0x3b, 0x5d, 0x6a, 0x09, 0x2f, 0x72, 0x31, 0xa7, + 0xe6, 0xa2, 0xb1, 0xb1, 0xbd, 0x95, 0xe6, 0xb4, 0xe0, 0x50, 0x09, 0xbb, 0xd4, 0xd2, 0x91, 0x42, + 0x3a, 0x2d, 0xff, 0x5d, 0x86, 0x69, 0x19, 0x9d, 0x69, 0x63, 0xd5, 0xb6, 0x03, 0x59, 0x1b, 0xa6, + 0x6d, 0x07, 0x3a, 0x42, 0xc9, 0x5d, 0x80, 0xed, 0x78, 0xdf, 0x75, 0x2c, 0xc4, 0x29, 0xe5, 0x17, + 0x56, 0x17, 0xa1, 0x06, 0x43, 0x95, 0x74, 0x22, 0x21, 0x93, 0x1b, 0x50, 0x7d, 0xe8, 0x87, 0x11, + 0xbb, 0x23, 0x85, 0x5e, 0xf0, 0xc2, 0x3e, 0x10, 0x30, 0x3d, 0x1b, 0x25, 0x26, 0xd4, 0xd6, 0x3a, + 0xb6, 0xb8, 0xdc, 0x2a, 0x78, 0xb9, 0xbd, 0x35, 0x5a, 0xb8, 0xa5, 0x0c, 0x8f, 0xdf, 0x71, 0x57, + 0x85, 0xac, 0xe7, 0xad, 0x8e, 0x6d, 0x0c, 0xdd, 0x75, 0x39, 0x57, 0x66, 0x4c, 0xa9, 0x8f, 0x10, + 0xea, 0x23, 0xc3, 0x2e, 0x28, 0x37, 0xa6, 0x40, 0x40, 0x64, 0x63, 0xca, 0xee, 0x9e, 0x3b, 0x50, + 0x7b, 0x1a, 0xd2, 0xdd, 0xd8, 0xf3, 0xa8, 0x8b, 0x8e, 0xb7, 0xda, 0x6c, 0xb0, 0x35, 0xc4, 0x21, + 0x35, 0x22, 0x84, 0xca, 0x6b, 0xc8, 0x50, 0x65, 0x3b, 0x99, 0x3a, 0xde, 0x4e, 0x16, 0xf6, 0x60, + 0xb6, 0x28, 0xe5, 0x88, 0x5b, 0x72, 0x49, 0xbe, 0x25, 0xeb, 0x2b, 0x8d, 0x5c, 0x96, 0x35, 0xbf, + 0xd3, 0x31, 0x3d, 0x4e, 0xbe, 0xb7, 0x22, 0xdf, 0x9f, 0xdf, 0x57, 0x60, 0xb6, 0x38, 0x4a, 0x96, + 0x60, 0x52, 0xdc, 0x1f, 0x0a, 0xde, 0x1f, 0xcc, 0xd4, 0x27, 0xf9, 0xcd, 0x51, 0xb8, 0x2f, 0x04, + 0x16, 0x93, 0x40, 0x70, 0x68, 0x94, 0x16, 0xcb, 0xa9, 0x04, 0x16, 0x07, 0xe9, 0xe9, 0x18, 0xd1, + 0x60, 0x52, 0xa7, 0x61, 0xec, 0x46, 0x62, 0xdf, 0x81, 0xb1, 0x0d, 0x10, 0xa2, 0x8b, 0x11, 0xed, + 0x3b, 0x00, 0xbb, 0x5b, 0x3b, 0x9b, 0xb4, 0xb7, 0x6d, 0x3a, 0xe8, 0x76, 0xd6, 0x68, 0x10, 0xe1, + 0x32, 0xa6, 0xb9, 0xdb, 0xb1, 0x68, 0x10, 0xc9, 0x6e, 0x87, 0x8d, 0x93, 0xeb, 0x50, 0xde, 0xa4, + 0x3d, 0x94, 0x7a, 0xba, 0x79, 0xae, 0x9f, 0xa8, 0x33, 0x87, 0x54, 0x72, 0x6f, 0x3a, 0x1b, 0xd5, + 0x7e, 0x54, 0x82, 0xb3, 0x0c, 0x7b, 0x35, 0x8e, 0x0e, 0xfc, 0xc0, 0x89, 0x7a, 0xa7, 0xf9, 0xcc, + 0x7f, 0x58, 0x38, 0xf3, 0x6f, 0x48, 0x1b, 0x2d, 0x4b, 0x38, 0xd6, 0xd1, 0xff, 0x93, 0x0a, 0xcc, + 0x8f, 0xa0, 0x22, 0xb7, 0xa0, 0xb2, 0xdb, 0xeb, 0xa6, 0xa1, 0x14, 0x33, 0xe5, 0x0a, 0xcb, 0x31, + 0x3e, 0x4f, 0xd4, 0xe9, 0x14, 0x9d, 0x8d, 0xeb, 0x88, 0x45, 0x56, 0xa0, 0xbe, 0xe6, 0xc6, 0x61, + 0x24, 0xa2, 0x7c, 0xae, 0x2f, 0x0c, 0xf6, 0x2c, 0x0e, 0xe6, 0x61, 0xbe, 0x8c, 0x44, 0xde, 0x83, + 0xe9, 0xb5, 0x03, 0x6a, 0x1d, 0x3a, 0x5e, 0x7b, 0x93, 0xf6, 0xc2, 0x46, 0x79, 0xb1, 0x9c, 0xee, + 0x9f, 0x25, 0xe0, 0xc6, 0x21, 0xed, 0x85, 0x7a, 0x01, 0x8d, 0x7c, 0x00, 0xf5, 0x1d, 0xa7, 0xed, + 0xa5, 0x54, 0x15, 0xa4, 0x5a, 0x60, 0x91, 0x47, 0xc8, 0xc1, 0x48, 0x24, 0xc7, 0xcb, 0x12, 0x3a, + 0x8b, 0xfb, 0x74, 0xdf, 0xa5, 0x3c, 0x5c, 0x16, 0x71, 0x5f, 0xc0, 0x00, 0x72, 0xdc, 0x87, 0x18, + 0x64, 0x13, 0xa6, 0xd8, 0xc7, 0x23, 0xb3, 0xdb, 0x98, 0x44, 0xf7, 0x73, 0x41, 0x76, 0x0e, 0x38, + 0xd0, 0x75, 0xbc, 0xb6, 0xec, 0x1f, 0x5c, 0x6a, 0x74, 0xcc, 0xae, 0x6c, 0x1a, 0x02, 0x91, 0x7c, + 0x1b, 0xea, 0xb9, 0x65, 0x87, 0x8d, 0x29, 0x64, 0x78, 0x3e, 0x67, 0x98, 0x0f, 0x36, 0x55, 0xc1, + 0xef, 0x52, 0xe4, 0x86, 0x4c, 0x16, 0xa3, 0xcb, 0x48, 0x64, 0x81, 0x24, 0x4e, 0x05, 0x1f, 0x56, + 0x7d, 0xa5, 0x0f, 0x53, 0x4e, 0xf2, 0x61, 0x9a, 0x0e, 0x75, 0x49, 0x30, 0x7e, 0x62, 0x3b, 0x7e, + 0x16, 0x4f, 0x8b, 0x13, 0xcb, 0x20, 0xba, 0x18, 0x21, 0x2a, 0x4c, 0x6c, 0xf9, 0x96, 0xe9, 0x8a, + 0xa3, 0x5f, 0xeb, 0x27, 0xea, 0x84, 0xcb, 0x00, 0x3a, 0x87, 0x6b, 0xff, 0xae, 0xc0, 0xdc, 0x76, + 0xe0, 0x1f, 0x39, 0xcc, 0xf4, 0x77, 0xfd, 0x43, 0xea, 0xed, 0x7d, 0x9d, 0x6c, 0xa4, 0xbb, 0xa0, + 0x20, 0xd5, 0x6d, 0x46, 0x85, 0xbb, 0xf0, 0x79, 0xa2, 0xbe, 0x7d, 0x62, 0xf2, 0x89, 0xda, 0x4f, + 0x77, 0x49, 0x4a, 0x59, 0x4a, 0xe3, 0xc7, 0x40, 0x27, 0xa4, 0x2c, 0x2a, 0x4c, 0xe0, 0x52, 0xc5, + 0x31, 0x46, 0xa9, 0x22, 0x06, 0xd0, 0x39, 0x5c, 0x3a, 0x3f, 0x3f, 0x2e, 0x0d, 0xc9, 0x77, 0x8a, + 0x1d, 0xcb, 0x47, 0x05, 0xc7, 0x22, 0x25, 0x93, 0x45, 0x11, 0xc7, 0xf2, 0x2c, 0x26, 0x9c, 0x1f, + 0x45, 0xf5, 0x25, 0x6e, 0xbe, 0xf6, 0x17, 0x25, 0x98, 0x65, 0xf9, 0x9c, 0x63, 0xe1, 0x04, 0xe1, + 0x69, 0x56, 0xfd, 0x6f, 0x16, 0x54, 0x7f, 0x55, 0x0a, 0x75, 0x24, 0x01, 0xc7, 0x52, 0xfc, 0x21, + 0x90, 0x61, 0x1a, 0xf2, 0x14, 0xa6, 0x65, 0x28, 0x6a, 0xbf, 0x90, 0x73, 0x0d, 0x9e, 0xd2, 0xe6, + 0x05, 0x31, 0xcb, 0x4c, 0x88, 0x74, 0x06, 0x9e, 0x80, 0x50, 0x2f, 0xb0, 0xd1, 0xfe, 0xbc, 0x04, + 0x33, 0x92, 0x57, 0x3f, 0xcd, 0x3b, 0x70, 0xaf, 0xb0, 0x03, 0x57, 0xa4, 0x5b, 0x35, 0x97, 0x6f, + 0xac, 0x0d, 0x78, 0x00, 0xe7, 0x86, 0x48, 0x06, 0xaf, 0x48, 0x65, 0x8c, 0x2b, 0x92, 0x07, 0x2d, + 0xfc, 0xff, 0x35, 0xdf, 0x7b, 0xe6, 0xb4, 0xf7, 0x6e, 0x7f, 0x15, 0x83, 0x16, 0x59, 0x42, 0xd4, + 0xd6, 0xed, 0x13, 0x14, 0xfc, 0xc3, 0x09, 0x98, 0x1f, 0x41, 0x45, 0x56, 0x61, 0x6e, 0x87, 0x86, + 0xb8, 0x70, 0x6a, 0xf9, 0x81, 0xed, 0x78, 0x6d, 0xa1, 0x27, 0xcc, 0x2b, 0x43, 0x3e, 0x66, 0x04, + 0xe9, 0xa0, 0x3e, 0x84, 0x8e, 0x55, 0x1c, 0xce, 0x79, 0xa3, 0x25, 0x54, 0xc8, 0xab, 0x38, 0x62, + 0x93, 0xb0, 0x8a, 0x93, 0x22, 0x90, 0x2d, 0x98, 0xdf, 0x0e, 0xfc, 0x17, 0x3d, 0x8c, 0x50, 0x42, + 0x96, 0xbb, 0x88, 0x50, 0x86, 0xd1, 0x61, 0x50, 0xd2, 0x65, 0xc3, 0x06, 0x06, 0x34, 0xa1, 0xc1, + 0xd2, 0x1c, 0x1e, 0xd3, 0x8c, 0x22, 0x23, 0xef, 0xc3, 0xc4, 0x6a, 0x6c, 0x3b, 0x91, 0x50, 0xb0, + 0x14, 0x6f, 0x20, 0x98, 0x8b, 0xda, 0x9c, 0x11, 0xaa, 0x99, 0x30, 0x19, 0x50, 0xe7, 0x24, 0xe4, + 0x63, 0x66, 0x73, 0x0e, 0xf5, 0xa2, 0x0d, 0xdb, 0xa5, 0xec, 0xc6, 0xf3, 0xe3, 0x08, 0x55, 0x5d, + 0x6e, 0x5e, 0xef, 0x27, 0xea, 0x3c, 0x2f, 0x5c, 0x18, 0x8e, 0xed, 0x52, 0x23, 0xe2, 0xc3, 0x85, + 0x68, 0x7e, 0x98, 0x9a, 0x7c, 0x07, 0x2e, 0xb4, 0x9c, 0xd0, 0xf2, 0x3d, 0x8f, 0x5a, 0x11, 0xbf, + 0x1a, 0x6d, 0x0c, 0xc8, 0x79, 0x7a, 0xc3, 0xd8, 0x5e, 0xb2, 0x33, 0x04, 0x83, 0xdf, 0xa9, 0xb6, + 0xc1, 0x62, 0xf4, 0xcf, 0x13, 0xb5, 0xd2, 0xf4, 0x7d, 0x57, 0x1f, 0xcd, 0x81, 0xad, 0x36, 0xab, + 0x10, 0x6f, 0x78, 0x11, 0x0d, 0x8e, 0x4c, 0x57, 0x94, 0x08, 0x71, 0xb5, 0x87, 0x94, 0x76, 0x0d, + 0x93, 0x8d, 0x1a, 0x8e, 0x18, 0x2e, 0xae, 0x76, 0x88, 0x9a, 0xdc, 0x97, 0x58, 0xae, 0xf9, 0xb1, + 0x17, 0x3d, 0x32, 0x5f, 0x60, 0x44, 0x54, 0xe6, 0x89, 0x98, 0xc4, 0xd2, 0x62, 0xc3, 0x46, 0xc7, + 0x7c, 0xa1, 0x0f, 0x93, 0x90, 0x5f, 0x87, 0x1a, 0x46, 0x2e, 0x2c, 0xc2, 0x6d, 0xd4, 0x50, 0x52, + 0x76, 0x86, 0x00, 0xa3, 0x1a, 0xc3, 0x8c, 0xa3, 0x83, 0x4c, 0xb8, 0x1c, 0x51, 0xfb, 0xa4, 0x0c, + 0x75, 0x69, 0x93, 0x58, 0xee, 0x22, 0x85, 0xcf, 0x98, 0xbb, 0xb0, 0xf0, 0x59, 0xce, 0x5d, 0x30, + 0x70, 0xbe, 0xc5, 0x62, 0xac, 0x36, 0x3b, 0x7c, 0xdc, 0xd6, 0xb0, 0x3e, 0x1b, 0x20, 0x44, 0xae, + 0xcf, 0x72, 0x1c, 0xb2, 0x05, 0x73, 0x38, 0x89, 0xb0, 0xda, 0xf0, 0xa9, 0xbe, 0x21, 0x6c, 0x6d, + 0xb1, 0x9f, 0xa8, 0x57, 0xd1, 0x20, 0x0c, 0x61, 0xe5, 0xa1, 0x11, 0x07, 0x8e, 0xc4, 0x63, 0x88, + 0x92, 0xfc, 0x44, 0x81, 0x59, 0x04, 0xae, 0x1f, 0x51, 0x2f, 0x42, 0x66, 0x15, 0x51, 0x44, 0xc8, + 0x2a, 0xfa, 0x3b, 0x51, 0xe0, 0x78, 0xed, 0x3d, 0x96, 0x2f, 0x86, 0xcd, 0xdf, 0x61, 0x96, 0xf7, + 0xf3, 0x44, 0xbd, 0xf3, 0x7a, 0xef, 0x03, 0x82, 0x49, 0xd8, 0x4f, 0xd4, 0x05, 0xbe, 0x44, 0x8a, + 0x13, 0x0e, 0x2c, 0x70, 0x60, 0x2d, 0xe4, 0xbe, 0x58, 0xdd, 0xae, 0xb9, 0xef, 0x52, 0xf4, 0x99, + 0x13, 0x28, 0xea, 0xb5, 0x9c, 0x4f, 0xc4, 0x86, 0xd0, 0x6f, 0x0e, 0xf1, 0xc9, 0xa8, 0xb4, 0xff, + 0x51, 0xa4, 0x2a, 0xfc, 0xe9, 0x75, 0x9f, 0x77, 0x0b, 0xee, 0xf3, 0x52, 0x4e, 0x9d, 0xc9, 0xc6, + 0x86, 0x47, 0x39, 0x4e, 0xed, 0x2c, 0xcc, 0x14, 0x90, 0xb4, 0xbf, 0x2a, 0xc1, 0x79, 0x9d, 0x86, + 0x34, 0xda, 0x36, 0xc3, 0xf0, 0xb9, 0x1f, 0xd8, 0xfc, 0xca, 0x3f, 0xc5, 0x97, 0x4b, 0xab, 0xa0, + 0x1d, 0x4d, 0x4a, 0x81, 0x86, 0xc4, 0x1c, 0xeb, 0x86, 0xf9, 0x5b, 0x05, 0x1a, 0xc7, 0x91, 0x32, + 0x2d, 0x3d, 0x0d, 0x69, 0xa1, 0x3a, 0x16, 0x87, 0x34, 0xd0, 0x11, 0x4a, 0x2e, 0x43, 0xf9, 0xa9, + 0xbe, 0x25, 0x34, 0x34, 0xd5, 0x4f, 0xd4, 0x72, 0x1c, 0xb8, 0x3a, 0x83, 0xb1, 0x64, 0x65, 0x2d, + 0xa0, 0x58, 0x51, 0xaf, 0x8c, 0x9f, 0xac, 0x58, 0x9c, 0x64, 0x30, 0x59, 0x11, 0x9c, 0xb4, 0x9f, + 0x96, 0xe0, 0xca, 0x88, 0xa5, 0x52, 0x2b, 0xa0, 0x51, 0x78, 0x9a, 0xf7, 0x74, 0xb3, 0xb0, 0xa7, + 0x37, 0x5f, 0xb9, 0xa7, 0x5c, 0xda, 0xb1, 0xb6, 0xf6, 0x5f, 0x14, 0x50, 0x4f, 0xe0, 0x40, 0xae, + 0xc3, 0xe4, 0x93, 0xdd, 0xed, 0xcd, 0xb4, 0xbe, 0xc6, 0x45, 0xf4, 0xbb, 0x78, 0x79, 0xeb, 0x62, + 0x88, 0xbc, 0x0b, 0x93, 0x1f, 0xeb, 0x6b, 0xbe, 0x9d, 0xd6, 0x3b, 0x30, 0xc6, 0xf8, 0x6e, 0x60, + 0x58, 0xc5, 0xd7, 0x21, 0x81, 0x24, 0x6f, 0x7e, 0xf9, 0x4b, 0xdb, 0x7c, 0x16, 0x21, 0xae, 0x5a, + 0x16, 0x0d, 0x43, 0x9d, 0x7e, 0x37, 0xa6, 0x61, 0xf4, 0x95, 0x8c, 0x10, 0x0b, 0x12, 0x8e, 0xb5, + 0xc9, 0xff, 0x5c, 0x82, 0xf9, 0x11, 0x54, 0x27, 0x1c, 0x5d, 0x35, 0x4d, 0x4d, 0xa5, 0x6a, 0x06, + 0xa6, 0xa6, 0x69, 0xb5, 0x61, 0x35, 0x7d, 0x61, 0x64, 0x8a, 0x98, 0x95, 0xab, 0xed, 0xe9, 0x34, + 0x6c, 0xf4, 0x95, 0x2f, 0x8f, 0xff, 0x1f, 0x3e, 0x40, 0xae, 0x82, 0x4c, 0x7c, 0x59, 0x55, 0x10, + 0xed, 0x8f, 0x94, 0x01, 0x1d, 0xde, 0x77, 0xdc, 0x88, 0x06, 0xe4, 0x22, 0x3e, 0xe8, 0x72, 0x0d, + 0x4e, 0xf6, 0x13, 0xb5, 0xe4, 0xd8, 0x7a, 0x69, 0xa3, 0x95, 0xe9, 0xb6, 0x34, 0x52, 0xb7, 0xdf, + 0x18, 0x4f, 0x75, 0xa8, 0x73, 0x54, 0x9d, 0x50, 0x98, 0xf6, 0xc3, 0x12, 0x4c, 0x6f, 0xbb, 0x71, + 0xdb, 0xf1, 0x5a, 0x66, 0x64, 0x9e, 0x66, 0xfb, 0xfe, 0xa0, 0x60, 0xdf, 0x72, 0xea, 0x9d, 0x89, + 0x37, 0x96, 0x71, 0xff, 0x58, 0x81, 0xb3, 0x39, 0x09, 0x7f, 0x0e, 0xd8, 0x84, 0x0a, 0xfb, 0x47, + 0xa4, 0xf5, 0xd7, 0x47, 0xf1, 0x46, 0xc4, 0xa5, 0xec, 0x8b, 0x47, 0xa5, 0x03, 0xaf, 0x63, 0xc8, + 0x64, 0xe1, 0x1b, 0x50, 0xcb, 0x39, 0xbf, 0xce, 0x73, 0xfc, 0x3f, 0x2a, 0x30, 0x37, 0x28, 0x0c, + 0x79, 0x0c, 0x53, 0x8c, 0x93, 0x43, 0xd3, 0xa2, 0xc3, 0x3b, 0xc7, 0x4b, 0xbe, 0x24, 0x30, 0xf9, + 0x0a, 0x71, 0x23, 0x28, 0x87, 0xe8, 0x29, 0x93, 0x85, 0xa7, 0x30, 0x2d, 0x63, 0x8d, 0x58, 0xe0, + 0x72, 0xf1, 0x25, 0xe4, 0xf2, 0xb1, 0xda, 0x90, 0xd7, 0xfe, 0x93, 0xc2, 0xda, 0x85, 0xad, 0x8f, + 0xfb, 0xf4, 0xb9, 0x02, 0xd5, 0xf4, 0xd1, 0x54, 0x36, 0xbb, 0x40, 0xc0, 0x0a, 0xe5, 0x56, 0x01, + 0x63, 0xb1, 0x3f, 0x9f, 0x4f, 0x98, 0x1d, 0xc6, 0xfe, 0x5d, 0x84, 0xc8, 0xd7, 0x07, 0xc7, 0xd1, + 0xfe, 0xa6, 0x0c, 0x17, 0xf3, 0xe5, 0xf1, 0x87, 0xe0, 0x6d, 0x33, 0x30, 0x3b, 0xe1, 0x09, 0x07, + 0xe2, 0xc6, 0xd0, 0xd2, 0xf0, 0xc9, 0x2d, 0x5d, 0x9a, 0xb4, 0x20, 0x6d, 0x60, 0x41, 0x58, 0xf0, + 0xe5, 0x0b, 0x4a, 0x97, 0x41, 0x1e, 0x43, 0x79, 0x87, 0x46, 0xe2, 0x41, 0xee, 0xe6, 0x28, 0xc5, + 0xca, 0x4b, 0x5b, 0xda, 0xa1, 0x11, 0xdf, 0x4a, 0xac, 0xeb, 0x87, 0x54, 0x7e, 0xbd, 0x61, 0x8c, + 0xc8, 0x6f, 0xc1, 0xe4, 0xfa, 0x8b, 0x2e, 0xb5, 0x22, 0xd1, 0xc0, 0x72, 0xeb, 0x44, 0x96, 0x1c, + 0x5d, 0x6a, 0x67, 0xa1, 0x08, 0x90, 0x55, 0xc6, 0x51, 0x16, 0xee, 0x40, 0x35, 0x9d, 0xff, 0x75, + 0xac, 0x78, 0xe1, 0x2e, 0xd4, 0xa5, 0x49, 0x5e, 0xeb, 0x00, 0xfc, 0x61, 0x09, 0x26, 0xd9, 0x55, + 0x71, 0x9a, 0xdd, 0xd4, 0x9d, 0x82, 0x9b, 0x3a, 0x5f, 0x7c, 0xf5, 0x18, 0xcb, 0x41, 0x7d, 0xa6, + 0x00, 0xe4, 0xc8, 0xe4, 0x5b, 0x30, 0xf5, 0x04, 0xdb, 0x95, 0xd2, 0x8e, 0x8b, 0x81, 0x97, 0x14, + 0x31, 0xd8, 0xbc, 0x9c, 0x5e, 0x4c, 0x3e, 0x07, 0xc8, 0x5a, 0x10, 0x38, 0xe4, 0x01, 0x4c, 0xac, + 0xba, 0xae, 0xff, 0x7c, 0xf8, 0x91, 0x93, 0x71, 0x5a, 0xf3, 0x3d, 0xdb, 0xe1, 0xcc, 0x2e, 0x09, + 0x66, 0x67, 0x4d, 0x86, 0x2e, 0xdf, 0xc3, 0x48, 0xcf, 0x32, 0x86, 0x16, 0xf5, 0xd2, 0xce, 0x89, + 0xe3, 0xf9, 0x5c, 0x14, 0x7c, 0x66, 0x6d, 0xea, 0xf5, 0x0a, 0x9e, 0x92, 0x7a, 0x3d, 0xed, 0x67, + 0x15, 0xfe, 0x66, 0x92, 0x2e, 0xef, 0x1e, 0x4c, 0xdf, 0xf7, 0x83, 0xe7, 0x66, 0x60, 0xaf, 0xb6, + 0xa9, 0xc7, 0xdf, 0x2e, 0xab, 0xf8, 0x38, 0x3e, 0xf3, 0x8c, 0xc3, 0x0d, 0x93, 0x0d, 0x64, 0x35, + 0x84, 0x02, 0x3a, 0x79, 0x02, 0x33, 0x8f, 0xcc, 0x17, 0x22, 0x49, 0xdf, 0xdd, 0xe5, 0x59, 0x44, + 0xb9, 0x79, 0xb3, 0x9f, 0xa8, 0x97, 0x3b, 0xe6, 0x8b, 0x34, 0xb7, 0x37, 0xa2, 0xc8, 0x3d, 0xa6, + 0x8b, 0xa7, 0x48, 0x4f, 0x5c, 0x98, 0xdd, 0xf6, 0x83, 0x48, 0x4c, 0xe2, 0x78, 0x6d, 0x21, 0xef, + 0x7c, 0x2e, 0x2f, 0x5b, 0x06, 0x26, 0xf8, 0xcd, 0xe5, 0x97, 0x89, 0xaa, 0xfc, 0x3c, 0x51, 0x81, + 0x81, 0xb8, 0x44, 0x6c, 0x62, 0x96, 0xd0, 0x1b, 0xcf, 0x32, 0x0e, 0x72, 0xaa, 0x5d, 0xe4, 0x4d, + 0xee, 0xc1, 0xb9, 0x35, 0x1a, 0x44, 0xce, 0x33, 0xc7, 0x32, 0x23, 0x7a, 0xdf, 0x0f, 0x3a, 0x66, + 0x24, 0x5a, 0xa1, 0xb0, 0xe5, 0xcf, 0xa2, 0x9c, 0x53, 0xc7, 0x8c, 0xf4, 0x61, 0x4c, 0xf2, 0xdb, + 0xc7, 0xd7, 0xb0, 0xde, 0xed, 0x27, 0xea, 0x1b, 0x23, 0x6a, 0x58, 0xc7, 0x68, 0x61, 0x44, 0x35, + 0xab, 0xfd, 0xea, 0x6a, 0xd6, 0xd7, 0xc5, 0x0b, 0xd9, 0x9b, 0xc7, 0x54, 0xb4, 0x0a, 0x13, 0xbd, + 0xb2, 0xb6, 0xb5, 0x02, 0xe5, 0xe6, 0xf6, 0x7d, 0x7c, 0xe2, 0x13, 0x75, 0x19, 0xea, 0x1d, 0x98, + 0x9e, 0x45, 0xed, 0xbc, 0xf0, 0x28, 0x7b, 0xc1, 0xe6, 0xf6, 0x7d, 0xed, 0x5f, 0xcb, 0x30, 0x5b, + 0xb4, 0x3b, 0xe6, 0x8c, 0xb7, 0xfc, 0xb6, 0xe3, 0xa5, 0xef, 0x24, 0xe8, 0x8c, 0x5d, 0x84, 0xe8, + 0x62, 0x84, 0xbc, 0x05, 0x90, 0x25, 0xf6, 0x69, 0xd0, 0x2a, 0x1a, 0x0c, 0xa5, 0x01, 0xf2, 0x7b, + 0x00, 0x8f, 0x7d, 0x9b, 0x8a, 0x5e, 0x8a, 0xb2, 0x38, 0x82, 0x59, 0x79, 0x86, 0x3f, 0xfc, 0xf3, + 0x12, 0xcf, 0x3b, 0xa2, 0xc4, 0x23, 0x3a, 0x02, 0xfb, 0x89, 0x7a, 0xc1, 0xf3, 0x6d, 0x3a, 0xdc, + 0x46, 0x21, 0x71, 0x24, 0xf7, 0x60, 0x42, 0x8f, 0x5d, 0x9a, 0xb6, 0x69, 0xcc, 0x4a, 0x67, 0x29, + 0x76, 0x69, 0x7e, 0x12, 0x83, 0x78, 0xf0, 0xa1, 0x95, 0x01, 0xc8, 0x87, 0x00, 0x9b, 0xf1, 0x3e, + 0x7d, 0x10, 0xf8, 0x71, 0x37, 0x7d, 0x98, 0x55, 0xfb, 0x89, 0x7a, 0xe5, 0x30, 0xde, 0xa7, 0x81, + 0x47, 0x23, 0x1a, 0x1a, 0x6d, 0x1c, 0x94, 0xe7, 0xcf, 0x49, 0x88, 0x0e, 0x53, 0x22, 0x86, 0x14, + 0x6d, 0x8b, 0x6f, 0x1e, 0x93, 0x3a, 0x48, 0xc7, 0x1a, 0x93, 0xb5, 0x80, 0x83, 0x0b, 0x0f, 0xb6, + 0x1c, 0x44, 0x3e, 0x80, 0x1a, 0x9b, 0x81, 0x85, 0xae, 0xa1, 0xd8, 0x4b, 0x2c, 0x3c, 0x49, 0x6b, + 0x62, 0xc1, 0x6d, 0xa1, 0xb3, 0x24, 0x23, 0xd0, 0x5a, 0x70, 0xe9, 0x98, 0x89, 0xf3, 0x17, 0x68, + 0xe5, 0xa4, 0x17, 0x68, 0xed, 0x67, 0x0a, 0x54, 0x98, 0x8a, 0xc8, 0x7b, 0x50, 0x4b, 0x2f, 0xe9, + 0x94, 0xee, 0x52, 0x3f, 0x51, 0xe7, 0xd3, 0x3b, 0xbc, 0xb0, 0x8a, 0x0c, 0x93, 0x4d, 0xb5, 0x47, + 0x83, 0xfd, 0xd4, 0x32, 0x70, 0xaa, 0x23, 0x06, 0x90, 0xa7, 0x42, 0x0c, 0x86, 0xfa, 0xed, 0x03, + 0x1a, 0xa4, 0x4d, 0x39, 0x88, 0xfa, 0x9c, 0x01, 0x64, 0x54, 0xc4, 0x20, 0xcb, 0x30, 0xb5, 0x6a, + 0x71, 0x6f, 0x5e, 0x41, 0xbe, 0xa8, 0x4a, 0xd3, 0x1a, 0x72, 0xd9, 0x02, 0x4b, 0x7b, 0x13, 0x6a, + 0x99, 0x8f, 0x61, 0x57, 0x27, 0x7e, 0x70, 0xcf, 0xa8, 0xf3, 0x7f, 0xf0, 0xda, 0x64, 0x9a, 0x3b, + 0xcd, 0xcf, 0x47, 0xc7, 0x5e, 0x9b, 0x4c, 0xb0, 0xb1, 0xde, 0x8d, 0xfe, 0x7e, 0x12, 0x20, 0x47, + 0x26, 0x14, 0x66, 0x9f, 0x6c, 0xb4, 0xd6, 0x36, 0x6c, 0xea, 0x45, 0x4e, 0x94, 0x87, 0xcf, 0x52, + 0xe2, 0xb0, 0xfe, 0x22, 0xa2, 0x81, 0x67, 0xba, 0x02, 0xa7, 0xd7, 0x7c, 0x53, 0x4c, 0x70, 0xd9, + 0x77, 0x6c, 0xcb, 0x70, 0x32, 0x52, 0xd9, 0x69, 0x17, 0x99, 0xb2, 0x69, 0x76, 0x56, 0x1f, 0x6d, + 0x49, 0xd3, 0x94, 0xc6, 0x9f, 0x26, 0x34, 0x3b, 0xee, 0x31, 0xd3, 0x14, 0x99, 0x92, 0x43, 0x98, + 0x7b, 0x80, 0x65, 0x63, 0x69, 0xa2, 0xf2, 0x89, 0x13, 0x5d, 0x17, 0x13, 0x5d, 0xe1, 0x25, 0xe7, + 0xd1, 0x53, 0x0d, 0x31, 0xce, 0x0f, 0x59, 0xe5, 0xc4, 0x36, 0x8f, 0xef, 0x29, 0x30, 0xb9, 0x1b, + 0x98, 0x4e, 0x94, 0xa6, 0xce, 0xc7, 0x78, 0xc6, 0x8f, 0x85, 0x67, 0x7c, 0xef, 0x35, 0x8b, 0xdf, + 0x9c, 0x37, 0x8b, 0x53, 0x23, 0xfc, 0x92, 0xe3, 0x54, 0x3e, 0x46, 0x1e, 0xc0, 0x24, 0x4b, 0x75, + 0xe3, 0xb4, 0xeb, 0x5a, 0x0a, 0x8f, 0xd0, 0xd1, 0xf3, 0xc1, 0x66, 0x43, 0xe8, 0x62, 0x2e, 0xc4, + 0xff, 0x65, 0x46, 0x1c, 0x43, 0xee, 0x72, 0x9f, 0xfa, 0xbf, 0x75, 0xb9, 0x93, 0x27, 0x50, 0x13, + 0xc5, 0x85, 0x66, 0x4f, 0x34, 0x96, 0x48, 0x31, 0x43, 0x36, 0x24, 0x35, 0xdb, 0x71, 0x90, 0x21, + 0x77, 0x96, 0xea, 0x39, 0x0f, 0xa2, 0x0f, 0xbe, 0xab, 0x14, 0x36, 0x3e, 0x1b, 0x12, 0x75, 0x38, + 0xfe, 0x66, 0x93, 0xbf, 0xb9, 0xc8, 0x3c, 0xf3, 0x57, 0x97, 0x1f, 0x28, 0x30, 0x37, 0x68, 0x32, + 0xe4, 0x03, 0xa8, 0xaf, 0xf1, 0x5b, 0xd9, 0x0f, 0xb2, 0x3a, 0x05, 0xbe, 0xc5, 0x59, 0x29, 0xd8, + 0x28, 0xb4, 0xa0, 0xcb, 0xe8, 0x2c, 0x91, 0x63, 0x47, 0xd0, 0xcb, 0xdb, 0x98, 0xd0, 0xc3, 0xc4, + 0x02, 0x26, 0x27, 0x72, 0x29, 0x9e, 0x74, 0x82, 0xff, 0xa9, 0x04, 0x75, 0x69, 0xcb, 0xc8, 0x4d, + 0xa8, 0x6e, 0x84, 0x5b, 0xbe, 0x75, 0x48, 0x6d, 0x11, 0x0a, 0xe2, 0x4f, 0x19, 0x9c, 0xd0, 0x70, + 0x11, 0xa8, 0x67, 0xc3, 0xa4, 0x09, 0x33, 0xfc, 0xeb, 0x11, 0x0d, 0x43, 0xb3, 0x9d, 0xce, 0x7e, + 0xb5, 0x9f, 0xa8, 0x0d, 0x8e, 0x6c, 0x74, 0xf8, 0x88, 0xb4, 0x86, 0x22, 0x09, 0xf9, 0x5d, 0x00, + 0x0e, 0x60, 0xbb, 0x3c, 0x46, 0x95, 0x31, 0x3d, 0xc6, 0x17, 0xc4, 0x04, 0x2c, 0xa8, 0x1a, 0xa8, + 0x06, 0x49, 0x0c, 0xb1, 0x29, 0xdc, 0xb7, 0x0e, 0xc7, 0xff, 0x21, 0x45, 0xde, 0x14, 0xee, 0x5b, + 0x87, 0xc6, 0xe8, 0x72, 0x93, 0xcc, 0x52, 0xfb, 0xa5, 0x22, 0x99, 0x1d, 0xf9, 0x18, 0x6a, 0xd9, + 0xd6, 0x88, 0xcc, 0xe1, 0xa2, 0xdc, 0xd4, 0x28, 0x86, 0x74, 0xfa, 0xac, 0x79, 0x45, 0x84, 0x6f, + 0xf3, 0xd9, 0x1e, 0x17, 0xac, 0x30, 0x05, 0x92, 0x8f, 0xa0, 0x82, 0xba, 0x39, 0xb9, 0x57, 0x28, + 0x75, 0xf5, 0x15, 0xa6, 0x14, 0x5c, 0x29, 0x52, 0x92, 0xdb, 0xa2, 0xca, 0xc5, 0xb5, 0x7b, 0xae, + 0xe8, 0xe6, 0xd9, 0x52, 0x32, 0x1f, 0x9f, 0x17, 0xbf, 0x24, 0x0b, 0xf9, 0x03, 0x05, 0xe6, 0x9f, + 0xae, 0xdc, 0xd7, 0x69, 0xdb, 0x09, 0x23, 0x1e, 0xad, 0xb2, 0x0c, 0x97, 0x5c, 0x86, 0xb2, 0x6e, + 0x3e, 0x17, 0xbd, 0x8e, 0xf8, 0x6a, 0x10, 0x98, 0xcf, 0x75, 0x06, 0x23, 0xb7, 0xa0, 0xb6, 0x49, + 0x7b, 0x0f, 0x4d, 0xcf, 0x76, 0xa9, 0xe8, 0x72, 0xc4, 0x27, 0xe9, 0x43, 0xda, 0x33, 0x0e, 0x10, + 0xaa, 0xe7, 0x08, 0x98, 0xc4, 0xc7, 0xfb, 0x9b, 0x94, 0x67, 0x36, 0xd3, 0x22, 0x89, 0x8f, 0xf7, + 0xb1, 0x72, 0xcd, 0x47, 0xb4, 0xbf, 0x2b, 0xc1, 0xdc, 0xe0, 0x89, 0x23, 0x1f, 0xc2, 0x74, 0x5a, + 0x11, 0x7f, 0x68, 0x86, 0x07, 0x62, 0x29, 0x57, 0xfa, 0x89, 0x7a, 0xa9, 0x2b, 0xe0, 0xc6, 0x81, + 0x19, 0xca, 0x47, 0xb1, 0x40, 0xc0, 0xee, 0xe6, 0x5d, 0x51, 0x35, 0x97, 0x4e, 0x4e, 0xe4, 0x47, + 0x5d, 0xa3, 0xd8, 0x90, 0x99, 0xa2, 0x91, 0x36, 0x9c, 0x1d, 0xd0, 0x85, 0x50, 0xab, 0x54, 0xfb, + 0x1d, 0xa1, 0x2c, 0x1e, 0x89, 0xc5, 0x2b, 0xcf, 0x8c, 0x40, 0x1a, 0x91, 0x26, 0x18, 0xe4, 0x4a, + 0xee, 0x02, 0x3c, 0x5d, 0xb9, 0x8f, 0x6f, 0xbc, 0x34, 0x40, 0xc3, 0x9d, 0xe1, 0x1d, 0xcb, 0x8c, + 0x89, 0xc5, 0xc1, 0x72, 0x70, 0x99, 0x23, 0x6b, 0x1e, 0x4c, 0xcb, 0x96, 0xc6, 0xe2, 0x13, 0xe9, + 0x65, 0xb7, 0x9a, 0x36, 0x46, 0x8a, 0xf7, 0x5c, 0x5e, 0x1b, 0x2d, 0x0d, 0xd5, 0x46, 0x6f, 0x40, + 0x35, 0x75, 0x50, 0x72, 0xdf, 0xb3, 0xb8, 0xce, 0x7a, 0x7a, 0x36, 0xaa, 0xbd, 0x03, 0x53, 0xc2, + 0x92, 0x5e, 0xfd, 0xe3, 0x22, 0xed, 0xfb, 0x25, 0x38, 0xab, 0x53, 0x16, 0xc8, 0x88, 0x5e, 0xe2, + 0xaf, 0x64, 0x47, 0x6b, 0x41, 0xc2, 0xe3, 0xa3, 0x28, 0xed, 0xa7, 0x0a, 0xcc, 0x8f, 0xc0, 0xfd, + 0x22, 0x6d, 0x37, 0xe4, 0x0e, 0xd4, 0x5a, 0x8e, 0xe9, 0xae, 0xda, 0x76, 0x90, 0xc6, 0xce, 0x78, + 0x1d, 0xd9, 0x0e, 0xbb, 0x8d, 0x18, 0x54, 0x76, 0x2e, 0x19, 0x2a, 0xf9, 0x9a, 0x30, 0x8d, 0x72, + 0xa6, 0xdc, 0xb4, 0x67, 0x16, 0xf8, 0x9a, 0xf2, 0x8e, 0x59, 0xed, 0x2f, 0x4b, 0x40, 0x38, 0x50, + 0x58, 0x97, 0xe3, 0x9f, 0xea, 0xce, 0xc1, 0x66, 0x61, 0x03, 0x17, 0xa5, 0xce, 0xd6, 0x01, 0x21, + 0xc7, 0x8a, 0x84, 0x7f, 0x50, 0x82, 0x8b, 0xa3, 0x09, 0xbf, 0xd0, 0x86, 0xde, 0x82, 0x1a, 0xf6, + 0xdb, 0x48, 0xcd, 0xc9, 0xe8, 0x41, 0x79, 0x73, 0x0e, 0xe2, 0xe7, 0x08, 0xe4, 0x19, 0xcc, 0x6c, + 0x99, 0x61, 0xf4, 0x90, 0x9a, 0x41, 0xb4, 0x4f, 0xcd, 0x68, 0x8c, 0x8b, 0x34, 0xfb, 0xf9, 0x0e, + 0xfe, 0xfa, 0xe9, 0x20, 0xa5, 0x1c, 0xfc, 0xf9, 0x4e, 0x81, 0x6d, 0x66, 0x2e, 0x95, 0x93, 0xcd, + 0xe5, 0x6b, 0x1f, 0xc2, 0xb4, 0xfc, 0x4c, 0x42, 0xaa, 0x50, 0x79, 0xfc, 0xe4, 0xf1, 0xfa, 0xdc, + 0x19, 0x52, 0x87, 0xa9, 0xed, 0xf5, 0xc7, 0xad, 0x8d, 0xc7, 0x0f, 0xe6, 0x14, 0x32, 0x0d, 0xd5, + 0xd5, 0xed, 0x6d, 0xfd, 0xc9, 0xde, 0x7a, 0x6b, 0xae, 0x44, 0x00, 0x26, 0x5b, 0xeb, 0x8f, 0x37, + 0xd6, 0x5b, 0x73, 0xe5, 0xe6, 0xf9, 0x97, 0xff, 0x79, 0xed, 0xcc, 0xcb, 0x4f, 0xaf, 0x29, 0xff, + 0xf6, 0xe9, 0x35, 0xe5, 0x3f, 0x3e, 0xbd, 0xa6, 0x7c, 0xf2, 0x5f, 0xd7, 0xce, 0xec, 0x4f, 0xa2, + 0x2c, 0xb7, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x87, 0x5d, 0x70, 0x40, 0x3a, 0x00, 0x00, } diff --git a/lib/services/types.proto b/lib/services/types.proto index a7216fc1367..e4e98c3272b 100644 --- a/lib/services/types.proto +++ b/lib/services/types.proto @@ -11,30 +11,39 @@ option (gogoproto.goproto_getters_all) = false; message KeepAlive { // ServerName is a server name to keep alive - string ServerName = 1 [(gogoproto.jsontag) = "server_name"]; + string ServerName = 1 [ (gogoproto.jsontag) = "server_name" ]; // Namespace is a server namespace - string Namespace = 2 [(gogoproto.jsontag) = "namespace"]; + string Namespace = 2 [ (gogoproto.jsontag) = "namespace" ]; // LeaseID is ID of the lease - int64 LeaseID = 3 [(gogoproto.jsontag) = "lease_id"]; + int64 LeaseID = 3 [ (gogoproto.jsontag) = "lease_id" ]; // Expires is set to update expiry time - google.protobuf.Timestamp Expires = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "expires"]; + google.protobuf.Timestamp Expires = 4 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "expires" + ]; } // Metadata is resource metadata message Metadata { // Name is an object name - string Name = 1 [(gogoproto.jsontag) = "name"]; - // Namespace is object namespace. The field should be called "namespace" - // when it returns in Teleport 2.4. - string Namespace = 2 [(gogoproto.jsontag) = "-"]; - // Description is object description - string Description = 3 [(gogoproto.jsontag) = "description,omitempty"]; - // Labels is a set of labels - map Labels = 5 [(gogoproto.jsontag) = "labels,omitempty"]; - // Expires is a global expiry time header can be set on any resource in the system. - google.protobuf.Timestamp Expires = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = true, (gogoproto.jsontag) = "expires,omitempty"]; + string Name = 1 [ (gogoproto.jsontag) = "name" ]; + // Namespace is object namespace. The field should be called "namespace" + // when it returns in Teleport 2.4. + string Namespace = 2 [ (gogoproto.jsontag) = "-" ]; + // Description is object description + string Description = 3 [ (gogoproto.jsontag) = "description,omitempty" ]; + // Labels is a set of labels + map Labels = 5 [ (gogoproto.jsontag) = "labels,omitempty" ]; + // Expires is a global expiry time header can be set on any resource in the + // system. + google.protobuf.Timestamp Expires = 6 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "expires,omitempty" + ]; // ID is a record ID - int64 ID = 7 [(gogoproto.jsontag) = "id,omitempty"]; + int64 ID = 7 [ (gogoproto.jsontag) = "id,omitempty" ]; }; // Rotation is a status of the rotation of the certificate authority @@ -42,50 +51,73 @@ message Rotation { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; - // State could be one of "init" or "in_progress". - string State = 1 [(gogoproto.jsontag) = "state,omitempty"]; - // Phase is the current rotation phase. - string Phase = 2 [(gogoproto.jsontag) = "phase,omitempty"]; - // Mode sets manual or automatic rotation mode. - string Mode = 3 [(gogoproto.jsontag) = "mode,omitempty"]; - // CurrentID is the ID of the rotation operation - // to differentiate between rotation attempts. - string CurrentID = 4 [(gogoproto.jsontag) = "current_id"]; - // Started is set to the time when rotation has been started - // in case if the state of the rotation is "in_progress". - google.protobuf.Timestamp Started = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.jsontag) = "started,omitempty"]; - // GracePeriod is a period during which old and new CA - // are valid for checking purposes, but only new CA is issuing certificates. - int64 GracePeriod = 6 [(gogoproto.jsontag) = "grace_period,omitempty", (gogoproto.casttype) = "Duration"]; - // LastRotated specifies the last time of the completed rotation. - google.protobuf.Timestamp LastRotated = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.jsontag) = "last_rotated,omitempty"]; - // Schedule is a rotation schedule - used in - // automatic mode to switch beetween phases. - RotationSchedule Schedule = 8 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "schedule,omitempty"]; + // State could be one of "init" or "in_progress". + string State = 1 [ (gogoproto.jsontag) = "state,omitempty" ]; + // Phase is the current rotation phase. + string Phase = 2 [ (gogoproto.jsontag) = "phase,omitempty" ]; + // Mode sets manual or automatic rotation mode. + string Mode = 3 [ (gogoproto.jsontag) = "mode,omitempty" ]; + // CurrentID is the ID of the rotation operation + // to differentiate between rotation attempts. + string CurrentID = 4 [ (gogoproto.jsontag) = "current_id" ]; + // Started is set to the time when rotation has been started + // in case if the state of the rotation is "in_progress". + google.protobuf.Timestamp Started = 5 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true, + (gogoproto.jsontag) = "started,omitempty" + ]; + // GracePeriod is a period during which old and new CA + // are valid for checking purposes, but only new CA is issuing certificates. + int64 GracePeriod = 6 + [ (gogoproto.jsontag) = "grace_period,omitempty", (gogoproto.casttype) = "Duration" ]; + // LastRotated specifies the last time of the completed rotation. + google.protobuf.Timestamp LastRotated = 7 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true, + (gogoproto.jsontag) = "last_rotated,omitempty" + ]; + // Schedule is a rotation schedule - used in + // automatic mode to switch beetween phases. + RotationSchedule Schedule = 8 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "schedule,omitempty" ]; } // RotationSchedule is a rotation schedule setting time switches // for different phases. message RotationSchedule { - // UpdateClients specifies time to switch to the "Update clients" phase - google.protobuf.Timestamp UpdateClients = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.jsontag) = "update_clients,omitempty"]; - // UpdateServers specifies time to switch to the "Update servers" phase. - google.protobuf.Timestamp UpdateServers = 2 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.jsontag) = "update_servers,omitempty"]; - // Standby specifies time to switch to the "Standby" phase. - google.protobuf.Timestamp Standby = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.jsontag) = "standby,omitempty"]; + // UpdateClients specifies time to switch to the "Update clients" phase + google.protobuf.Timestamp UpdateClients = 1 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true, + (gogoproto.jsontag) = "update_clients,omitempty" + ]; + // UpdateServers specifies time to switch to the "Update servers" phase. + google.protobuf.Timestamp UpdateServers = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true, + (gogoproto.jsontag) = "update_servers,omitempty" + ]; + // Standby specifies time to switch to the "Standby" phase. + google.protobuf.Timestamp Standby = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true, + (gogoproto.jsontag) = "standby,omitempty" + ]; } // ResorceHeader is a shared resource header // used in cases when only type and name is known message ResourceHeader { - // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind,omitempty"]; - // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version,omitempty"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata,omitempty"]; + // Kind is a resource kind + string Kind = 1 [ (gogoproto.jsontag) = "kind,omitempty" ]; + // SubKind is an optional resource sub kind, used in some resources + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version,omitempty" ]; + // Metadata is User metadata + Metadata Metadata = 4 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata,omitempty" ]; } // ServerV2 represents a Node, Proxy or Auth server in a Teleport cluster @@ -94,52 +126,55 @@ message ServerV2 { option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a server spec - ServerSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + ServerSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // ServerSpecV2 is a specification for V2 Server -message ServerSpecV2 { - // Addr is server host:port address - string Addr = 1 [(gogoproto.jsontag) = "addr"]; - // PublicAddr is the public address this cluster can be reached at. - string PublicAddr = 2 [(gogoproto.jsontag) = "public_addr,omitempty"]; - // Hostname is server hostname - string Hostname = 3 [(gogoproto.jsontag) = "hostname"]; - // CmdLabels is server dynamic labels - map CmdLabels = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "cmd_labels,omitempty"]; - // Rotation specifies server rotation - Rotation Rotation = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "rotation,omitempty"]; - // UseTunnel indicates that connections to this server should occur over a - // reverse tunnel. - bool UseTunnel = 6 [(gogoproto.jsontag) = "use_tunnel,omitempty"]; +message ServerSpecV2 { + // Addr is server host:port address + string Addr = 1 [ (gogoproto.jsontag) = "addr" ]; + // PublicAddr is the public address this cluster can be reached at. + string PublicAddr = 2 [ (gogoproto.jsontag) = "public_addr,omitempty" ]; + // Hostname is server hostname + string Hostname = 3 [ (gogoproto.jsontag) = "hostname" ]; + // CmdLabels is server dynamic labels + map CmdLabels = 4 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "cmd_labels,omitempty" ]; + // Rotation specifies server rotation + Rotation Rotation = 5 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "rotation,omitempty" ]; + // UseTunnel indicates that connections to this server should occur over a + // reverse tunnel. + bool UseTunnel = 6 [ (gogoproto.jsontag) = "use_tunnel,omitempty" ]; + // TeleportVersion is the teleport version that the server is running on + string Version = 7 [ (gogoproto.jsontag) = "version" ]; } // CommandLabelV2 is a label that has a value as a result of the // output generated by running command, e.g. hostname message CommandLabelV2 { - // Period is a time between command runs - int64 Period = 1 [(gogoproto.jsontag) = "period", (gogoproto.casttype) = "Duration"]; - // Command is a command to run - repeated string Command = 2 [(gogoproto.jsontag) = "command"]; - // Result captures standard output - string Result = 3 [(gogoproto.jsontag) = "result"]; + // Period is a time between command runs + int64 Period = 1 [ (gogoproto.jsontag) = "period", (gogoproto.casttype) = "Duration" ]; + // Command is a command to run + repeated string Command = 2 [ (gogoproto.jsontag) = "command" ]; + // Result captures standard output + string Result = 3 [ (gogoproto.jsontag) = "result" ]; } - // TLSKeyPair is a TLS key pair message TLSKeyPair { - // Cert is a PEM encoded TLS cert - bytes Cert = 1 [(gogoproto.jsontag) = "cert,omitempty"]; - // Key is a PEM encoded TLS key - bytes Key = 2 [(gogoproto.jsontag) = "key,omitempty"]; + // Cert is a PEM encoded TLS cert + bytes Cert = 1 [ (gogoproto.jsontag) = "cert,omitempty" ]; + // Key is a PEM encoded TLS key + bytes Key = 2 [ (gogoproto.jsontag) = "key,omitempty" ]; } // CertAuthorityV2 is version 2 resource spec for Cert Authority @@ -147,51 +182,54 @@ message CertAuthorityV2 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; + string Version = 3 [ (gogoproto.jsontag) = "version" ]; // Metadata is connector metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec contains cert authority specification - CertAuthoritySpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + CertAuthoritySpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // CertAuthoritySpecV2 is a host or user certificate authority that // can check and if it has private key stored as well, sign it too message CertAuthoritySpecV2 { - // Type is either user or host certificate authority - string Type = 1 [(gogoproto.jsontag) = "type", (gogoproto.casttype) = "CertAuthType"]; - // DELETE IN(2.7.0) this field is deprecated, - // as resource name matches cluster name after migrations. - // and this property is enforced by the auth server code. - // ClusterName identifies cluster name this authority serves, - // for host authorities that means base hostname of all servers, - // for user authorities that means organization name - string ClusterName = 2 [(gogoproto.jsontag) = "cluster_name"]; - // Checkers is a list of SSH public keys that can be used to check - // certificate signatures - repeated bytes CheckingKeys = 3 [(gogoproto.jsontag) = "checking_keys"]; - // SigningKeys is a list of private keys used for signing - repeated bytes SigningKeys = 4 [(gogoproto.jsontag) = "signing_keys,omitempty"]; - // Roles is a list of roles assumed by users signed by this CA - repeated string Roles = 5 [(gogoproto.jsontag) = "roles,omitempty"]; - // RoleMap specifies role mappings to remote roles - repeated RoleMapping RoleMap = 6 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "role_map,omitempty"]; - // TLS is a list of TLS key pairs - repeated TLSKeyPair TLSKeyPairs = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "tls_key_pairs,omitempty"]; - // Rotation is a status of the certificate authority rotation - Rotation Rotation = 8 [(gogoproto.nullable) = true, (gogoproto.jsontag) = "rotation,omitempty"]; + // Type is either user or host certificate authority + string Type = 1 [ (gogoproto.jsontag) = "type", (gogoproto.casttype) = "CertAuthType" ]; + // DELETE IN(2.7.0) this field is deprecated, + // as resource name matches cluster name after migrations. + // and this property is enforced by the auth server code. + // ClusterName identifies cluster name this authority serves, + // for host authorities that means base hostname of all servers, + // for user authorities that means organization name + string ClusterName = 2 [ (gogoproto.jsontag) = "cluster_name" ]; + // Checkers is a list of SSH public keys that can be used to check + // certificate signatures + repeated bytes CheckingKeys = 3 [ (gogoproto.jsontag) = "checking_keys" ]; + // SigningKeys is a list of private keys used for signing + repeated bytes SigningKeys = 4 [ (gogoproto.jsontag) = "signing_keys,omitempty" ]; + // Roles is a list of roles assumed by users signed by this CA + repeated string Roles = 5 [ (gogoproto.jsontag) = "roles,omitempty" ]; + // RoleMap specifies role mappings to remote roles + repeated RoleMapping RoleMap = 6 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "role_map,omitempty" ]; + // TLS is a list of TLS key pairs + repeated TLSKeyPair TLSKeyPairs = 7 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "tls_key_pairs,omitempty" ]; + // Rotation is a status of the certificate authority rotation + Rotation Rotation = 8 + [ (gogoproto.nullable) = true, (gogoproto.jsontag) = "rotation,omitempty" ]; } // RoleMappping provides mapping of remote roles to local roles // for trusted clusters message RoleMapping { - // Remote specifies remote role name to map from - string Remote = 1 [(gogoproto.jsontag) = "remote"]; - // Local specifies local roles to map to - repeated string Local = 2 [(gogoproto.jsontag) = "local"]; + // Remote specifies remote role name to map from + string Remote = 1 [ (gogoproto.jsontag) = "remote" ]; + // Local specifies local roles to map to + repeated string Local = 2 [ (gogoproto.jsontag) = "local" ]; } // ProvisionTokenV1 is a provisioning token V1 @@ -199,14 +237,22 @@ message ProvisionTokenV1 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; - // Roles is a list of roles associated with the token, - // that will be converted to metadata in the SSH and X509 - // certificates issued to the user of the token - repeated string Roles = 1 [(gogoproto.jsontag) = "roles", (gogoproto.casttype) = "github.com/gravitational/teleport.Role"]; - // Expires is a global expiry time header can be set on any resource in the system. - google.protobuf.Timestamp Expires = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "expires,omitempty"]; - // Token is a token name - string Token = 3 [(gogoproto.jsontag) = "token"]; + // Roles is a list of roles associated with the token, + // that will be converted to metadata in the SSH and X509 + // certificates issued to the user of the token + repeated string Roles = 1 [ + (gogoproto.jsontag) = "roles", + (gogoproto.casttype) = "github.com/gravitational/teleport.Role" + ]; + // Expires is a global expiry time header can be set on any resource in the + // system. + google.protobuf.Timestamp Expires = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "expires,omitempty" + ]; + // Token is a token name + string Token = 3 [ (gogoproto.jsontag) = "token" ]; } // ProvisionTokenV2 specifies provisioning token @@ -215,49 +261,51 @@ message ProvisionTokenV2 { option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a provisioning token V2 spec - ProvisionTokenSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + ProvisionTokenSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // ProvisionTokenSpecV2 is a specification for V2 token -message ProvisionTokenSpecV2 { - // Roles is a list of roles associated with the token, - // that will be converted to metadata in the SSH and X509 - // certificates issued to the user of the token - repeated string Roles = 1 [(gogoproto.jsontag) = "roles", (gogoproto.casttype) = "github.com/gravitational/teleport.Role"]; +message ProvisionTokenSpecV2 { + // Roles is a list of roles associated with the token, + // that will be converted to metadata in the SSH and X509 + // certificates issued to the user of the token + repeated string Roles = 1 [ + (gogoproto.jsontag) = "roles", + (gogoproto.casttype) = "github.com/gravitational/teleport.Role" + ]; } - // StaticTokensV2 implements the StaticTokens interface. message StaticTokensV2 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a provisioning token V2 spec - StaticTokensSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + StaticTokensSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } - // StaticTokensSpecV2 is the actual data we care about for StaticTokensSpecV2. -message StaticTokensSpecV2 { - // StaticTokens is a list of tokens that can be used to add nodes to the - // cluster. - repeated ProvisionTokenV1 StaticTokens = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "static_tokens"]; +message StaticTokensSpecV2 { + // StaticTokens is a list of tokens that can be used to add nodes to the + // cluster. + repeated ProvisionTokenV1 StaticTokens = 1 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "static_tokens" ]; } // ClusterNameV2 implements the ClusterName interface. @@ -266,22 +314,22 @@ message ClusterNameV2 { option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a cluster name V2 spec - ClusterNameSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + ClusterNameSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // ClusterNameSpecV2 is the actual data we care about for ClusterName. -message ClusterNameSpecV2 { - // ClusterName is the name of the cluster. Changing this value once the - // cluster is setup can and will cause catastrophic problems. - string ClusterName = 1 [(gogoproto.jsontag) = "cluster_name"]; +message ClusterNameSpecV2 { + // ClusterName is the name of the cluster. Changing this value once the + // cluster is setup can and will cause catastrophic problems. + string ClusterName = 1 [ (gogoproto.jsontag) = "cluster_name" ]; } // ClusterConfigV3 implements the ClusterConfig interface. @@ -290,102 +338,170 @@ message ClusterConfigV3 { option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a cluster config V3 spec - ClusterConfigSpecV3 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + ClusterConfigSpecV3 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // ClusterConfigSpecV3 is the actual data we care about for ClusterConfig. message ClusterConfigSpecV3 { - // SessionRecording controls where (or if) the session is recorded. - string SessionRecording = 1 [(gogoproto.jsontag) = "session_recording"]; + // SessionRecording controls where (or if) the session is recorded. + string SessionRecording = 1 [ (gogoproto.jsontag) = "session_recording" ]; // ClusterID is the unique cluster ID that is set once during the first auth - // server startup. - string ClusterID = 2 [(gogoproto.jsontag) = "cluster_id"]; + // server startup. + string ClusterID = 2 [ (gogoproto.jsontag) = "cluster_id" ]; - // ProxyChecksHostKeys is used to control if the proxy will check host keys - // when in recording mode. - string ProxyChecksHostKeys = 3 [(gogoproto.jsontag) = "proxy_checks_host_keys"]; + // ProxyChecksHostKeys is used to control if the proxy will check host keys + // when in recording mode. + string ProxyChecksHostKeys = 3 [ (gogoproto.jsontag) = "proxy_checks_host_keys" ]; - // Audit is a section with audit config - AuditConfig Audit = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "audit"]; + // Audit is a section with audit config + AuditConfig Audit = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "audit" ]; - // ClientIdleTimeout sets global cluster default setting for client idle timeouts - int64 ClientIdleTimeout = 5 [(gogoproto.jsontag) = "client_idle_timeout", (gogoproto.casttype) = "Duration"]; + // ClientIdleTimeout sets global cluster default setting for client idle + // timeouts + int64 ClientIdleTimeout = 5 + [ (gogoproto.jsontag) = "client_idle_timeout", (gogoproto.casttype) = "Duration" ]; - // DisconnectExpiredCert provides disconnect expired certificate setting - - // if true, connections with expired client certificates will get disconnected - bool DisconnectExpiredCert = 6 [(gogoproto.jsontag) = "disconnect_expired_cert", (gogoproto.casttype) = "Bool"]; + // DisconnectExpiredCert provides disconnect expired certificate setting - + // if true, connections with expired client certificates will get disconnected + bool DisconnectExpiredCert = 6 + [ (gogoproto.jsontag) = "disconnect_expired_cert", (gogoproto.casttype) = "Bool" ]; - // KeepAliveInterval is the interval the server sends keep-alive messsages - // to the client at. - int64 KeepAliveInterval = 7 [(gogoproto.jsontag) = "keep_alive_interval", (gogoproto.casttype) = "Duration"]; + // KeepAliveInterval is the interval the server sends keep-alive messsages + // to the client at. + int64 KeepAliveInterval = 7 + [ (gogoproto.jsontag) = "keep_alive_interval", (gogoproto.casttype) = "Duration" ]; - // KeepAliveCountMax is the number of keep-alive messages that can be missed before - // the server disconnects the connection to the client. - int64 KeepAliveCountMax = 8 [(gogoproto.jsontag) = "keep_alive_count_max"]; + // KeepAliveCountMax is the number of keep-alive messages that can be missed + // before + // the server disconnects the connection to the client. + int64 KeepAliveCountMax = 8 [ (gogoproto.jsontag) = "keep_alive_count_max" ]; // LocalAuth is true if local authentication is enabled. - bool LocalAuth = 9 [(gogoproto.jsontag) = "local_auth", (gogoproto.casttype) = "Bool"]; + bool LocalAuth = 9 [ (gogoproto.jsontag) = "local_auth", (gogoproto.casttype) = "Bool" ]; } // AuditConfig represents audit log settings in the cluster message AuditConfig { // Type is audit backend type - string Type = 1 [(gogoproto.jsontag) = "type,omitempty"]; + string Type = 1 [ (gogoproto.jsontag) = "type,omitempty" ]; // Region is a region setting for audit sessions used by cloud providers - string Region = 2 [(gogoproto.jsontag) = "region,omitempty"]; + string Region = 2 [ (gogoproto.jsontag) = "region,omitempty" ]; // AuditSessionsURI is a parameter where to upload sessions - string AuditSessionsURI = 3 [(gogoproto.jsontag) = "audit_sessions_uri,omitempty"]; + string AuditSessionsURI = 3 [ (gogoproto.jsontag) = "audit_sessions_uri,omitempty" ]; // AuditEventsURI is a parameter with all supported outputs // for audit events - wrappers.StringValues AuditEventsURI = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "audit_events_uri,omitempty", (gogoproto.customtype) = "github.com/gravitational/teleport/lib/wrappers.Strings"]; - // AuditTableName is a DB table name used for audits - // Deprecated in favor of AuditEventsURI - // DELETE IN (3.1.0) - string AuditTableName = 5 [(gogoproto.jsontag) = "audit_table_name,omitempty"]; + wrappers.StringValues AuditEventsURI = 4 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "audit_events_uri,omitempty", + (gogoproto.customtype) = "github.com/gravitational/teleport/lib/wrappers.Strings" + ]; + // AuditTableName is a DB table name used for audits + // Deprecated in favor of AuditEventsURI + // DELETE IN (3.1.0) + string AuditTableName = 5 [ (gogoproto.jsontag) = "audit_table_name,omitempty" ]; } // Namespace represents namespace resource specification -message Namespace { +message Namespace { // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a namespace spec - NamespaceSpec Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + NamespaceSpec Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // NamespaceSpec is a namespace specificateion -message NamespaceSpec { -} +message NamespaceSpec {} -// AccessRequest represents an access request resource specification -message AccessRequestV3 { +message ResetPasswordTokenV3 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is AccessRequest metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is ResetPasswordToken metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; + // Spec is an ResetPasswordToken specification + ResetPasswordTokenSpecV3 Spec = 5 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; +} + +message ResetPasswordTokenSpecV3 { + // User is user name associated with this token + string User = 1 [ (gogoproto.jsontag) = "user" ]; + // URL is this token URL + string URL = 2 [ (gogoproto.jsontag) = "url" ]; + // Created holds information about when the token was created + google.protobuf.Timestamp Created = 4 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "created,omitempty" + ]; +} + +message ResetPasswordTokenSecretsV3 { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; + + // Kind is a resource kind + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; + // SubKind is an optional resource sub kind, used in some resources + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is ResetPasswordTokenSecrets metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; + // Spec is an ResetPasswordTokenSecrets specification + ResetPasswordTokenSecretsSpecV3 Spec = 5 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; +} + +message ResetPasswordTokenSecretsSpecV3 { + // OTPKey is is a secret value of one time password secret generator + string OTPKey = 1 [ (gogoproto.jsontag) = "opt_key" ]; + // OTPKey is is a secret value of one time password secret generator + string QRCode = 2 [ (gogoproto.jsontag) = "qr_code,omitempty" ]; + // Created holds information about when the token was created + google.protobuf.Timestamp Created = 3 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "created,omitempty" + ]; +} + +// AccessRequest represents an access request resource specification +message AccessRequestV3 { + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; + + // Kind is a resource kind + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; + // SubKind is an optional resource sub kind, used in some resources + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is AccessRequest metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is an AccessReqeust specification - AccessRequestSpecV3 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + AccessRequestSpecV3 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // RequestState represents the state of a request for escalated privilege. @@ -406,55 +522,65 @@ enum RequestState { // AccessRequestSpec is the specification for AccessRequest message AccessRequestSpecV3 { // User is the name of the user to whom the roles will be applied. - string User = 1 [(gogoproto.jsontag) = "user"]; + string User = 1 [ (gogoproto.jsontag) = "user" ]; // Roles is the name of the roles being requested. - repeated string Roles = 2 [(gogoproto.jsontag) = "roles"]; + repeated string Roles = 2 [ (gogoproto.jsontag) = "roles" ]; // State is the current state of this access request. - RequestState State = 3 [(gogoproto.jsontag) = "state,omitempty"]; - // Created encodes the time at which the request was registered with the auth server. - google.protobuf.Timestamp Created = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "created,omitempty"]; - // Expires constrains the maximum lifetime of any login session for which this request is active. - google.protobuf.Timestamp Expires = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "expires,omitempty"]; + RequestState State = 3 [ (gogoproto.jsontag) = "state,omitempty" ]; + // Created encodes the time at which the request was registered with the auth + // server. + google.protobuf.Timestamp Created = 4 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "created,omitempty" + ]; + // Expires constrains the maximum lifetime of any login session for which this + // request is active. + google.protobuf.Timestamp Expires = 5 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "expires,omitempty" + ]; } // AccessRequestFilter encodes filter params for access requests. message AccessRequestFilter { // ID specifies a request ID if set. - string ID = 1 [(gogoproto.jsontag) = "id"]; + string ID = 1 [ (gogoproto.jsontag) = "id" ]; // User specifies a username if set. - string User = 2 [(gogoproto.jsontag) = "user"]; + string User = 2 [ (gogoproto.jsontag) = "user" ]; // RequestState filters for requests in a specific state. - RequestState State = 3 [(gogoproto.jsontag) = "state"]; + RequestState State = 3 [ (gogoproto.jsontag) = "state" ]; } // PluginData stores a collection of values associated with a specific resource. -message PluginDataV3 { +message PluginDataV3 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; + string Version = 3 [ (gogoproto.jsontag) = "version" ]; // Metadata is PluginData metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a PluginData specification - PluginDataSpecV3 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + PluginDataSpecV3 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // PluginDataEntry wraps a mapping of arbitrary string values used by // plugins to store per-resource information. message PluginDataEntry { // Data is a mapping of arbitrary string values. - map Data = 1 [(gogoproto.jsontag) = "data,omitempty"]; + map Data = 1 [ (gogoproto.jsontag) = "data,omitempty" ]; } // PluginData stores a collection of values associated with a specific resource. message PluginDataSpecV3 { // Entries is a collection of PluginData values organized by plugin name. - map Entries = 1 [(gogoproto.jsontag) = "entries"]; + map Entries = 1 [ (gogoproto.jsontag) = "entries" ]; } // NOTE: PluginDataFilter and PluginDataUpdateParams currently only target AccessRequest resources @@ -466,186 +592,221 @@ message PluginDataSpecV3 { message PluginDataFilter { // Kind is the kind of resource that the target plugin data // is associated with. - string Kind = 1 [(gogoproto.jsontag) = "kind,omitempty"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind,omitempty" ]; // Resource matches a specific resource name if set. - string Resource = 2 [(gogoproto.jsontag) = "resource,omitempty"]; + string Resource = 2 [ (gogoproto.jsontag) = "resource,omitempty" ]; // Plugin matches a specific plugin name if set. - string Plugin = 3 [(gogoproto.jsontag) = "plugin,omitempty"]; + string Plugin = 3 [ (gogoproto.jsontag) = "plugin,omitempty" ]; } // PluginDataUpdateParams encodes paramers for updating a PluginData field. message PluginDataUpdateParams { // Kind is the kind of resource that the target plugin data // is associated with. - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // Resource indicates the name of the target resource. - string Resource = 2 [(gogoproto.jsontag) = "resource"]; + string Resource = 2 [ (gogoproto.jsontag) = "resource" ]; // Plugin is the name of the plugin that owns the data. - string Plugin = 3 [(gogoproto.jsontag) = "plugin"]; + string Plugin = 3 [ (gogoproto.jsontag) = "plugin" ]; // Set indicates the fields which should be set by this operation. - map Set = 4 [(gogoproto.jsontag) = "set,omitempty"]; + map Set = 4 [ (gogoproto.jsontag) = "set,omitempty" ]; // Expect optionally indicates the expected state of fields prior to this update. - map Expect = 5 [(gogoproto.jsontag) = "expect,omitempty"]; + map Expect = 5 [ (gogoproto.jsontag) = "expect,omitempty" ]; } // RoleV3 represents role resource specification -message RoleV3 { +message RoleV3 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a role specification - RoleSpecV3 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + RoleSpecV3 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // RoleSpecV3 is role specification for RoleV3. message RoleSpecV3 { - // Options is for OpenSSH options like agent forwarding. - RoleOptions Options = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "options,omitempty"]; - // Allow is the set of conditions evaluated to grant access. - RoleConditions Allow = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "allow,omitempty"]; - // Deny is the set of conditions evaluated to deny access. Deny takes priority over allow. - RoleConditions Deny = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "deny,omitempty"]; + // Options is for OpenSSH options like agent forwarding. + RoleOptions Options = 1 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "options,omitempty" ]; + // Allow is the set of conditions evaluated to grant access. + RoleConditions Allow = 2 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "allow,omitempty" ]; + // Deny is the set of conditions evaluated to deny access. Deny takes priority + // over allow. + RoleConditions Deny = 3 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "deny,omitempty" ]; } // RoleOptions is a set of role options -message RoleOptions { +message RoleOptions { // ForwardAgent is SSH agent forwarding. - bool ForwardAgent = 1 [(gogoproto.jsontag) = "forward_agent", (gogoproto.casttype) = "Bool"]; + bool ForwardAgent = 1 [ (gogoproto.jsontag) = "forward_agent", (gogoproto.casttype) = "Bool" ]; - // MaxSessionTTL defines how long a SSH session can last for. - int64 MaxSessionTTL = 2 [(gogoproto.jsontag) = "max_session_ttl,omitempty", (gogoproto.casttype) = "Duration"]; + // MaxSessionTTL defines how long a SSH session can last for. + int64 MaxSessionTTL = 2 + [ (gogoproto.jsontag) = "max_session_ttl,omitempty", (gogoproto.casttype) = "Duration" ]; - // PortForwarding defines if the certificate will have "permit-port-forwarding" - // in the certificate. PortForwarding is "yes" if not set, - // that's why this is a pointer - BoolValue PortForwarding = 3 [(gogoproto.nullable) = true, (gogoproto.jsontag) = "port_forwarding,omitempty", (gogoproto.customtype) = "BoolOption"]; + // PortForwarding defines if the certificate will have + // "permit-port-forwarding" + // in the certificate. PortForwarding is "yes" if not set, + // that's why this is a pointer + BoolValue PortForwarding = 3 [ + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "port_forwarding,omitempty", + (gogoproto.customtype) = "BoolOption" + ]; - // CertificateFormat defines the format of the user certificate to allow - // compatibility with older versions of OpenSSH. - string CertificateFormat = 4 [(gogoproto.jsontag) = "cert_format"]; + // CertificateFormat defines the format of the user certificate to allow + // compatibility with older versions of OpenSSH. + string CertificateFormat = 4 [ (gogoproto.jsontag) = "cert_format" ]; - // ClientIdleTimeout sets disconnect clients on idle timeout behavior, - // if set to 0 means do not disconnect, otherwise is set to the idle - // duration. - int64 ClientIdleTimeout = 5 [(gogoproto.jsontag) = "client_idle_timeout,omitempty", (gogoproto.casttype) = "Duration"]; + // ClientIdleTimeout sets disconnect clients on idle timeout behavior, + // if set to 0 means do not disconnect, otherwise is set to the idle + // duration. + int64 ClientIdleTimeout = 5 [ + (gogoproto.jsontag) = "client_idle_timeout,omitempty", + (gogoproto.casttype) = "Duration" + ]; - // DisconnectExpiredCert sets disconnect clients on expired certificates. - bool DisconnectExpiredCert = 6 [(gogoproto.nullable) = true, (gogoproto.jsontag) = "disconnect_expired_cert,omitempty", (gogoproto.casttype) = "Bool"]; + // DisconnectExpiredCert sets disconnect clients on expired certificates. + bool DisconnectExpiredCert = 6 [ + (gogoproto.nullable) = true, + (gogoproto.jsontag) = "disconnect_expired_cert,omitempty", + (gogoproto.casttype) = "Bool" + ]; // BPF defines what events to record for the BPF-based session recorder. - repeated string BPF = 7 [(gogoproto.jsontag) = "enhanced_recording,omitempty"]; + repeated string BPF = 7 [ (gogoproto.jsontag) = "enhanced_recording,omitempty" ]; } - // RoleConditions is a set of conditions that must all match to be allowed or // denied access. message RoleConditions { - // Logins is a list of *nix system logins. - repeated string Logins = 1 [(gogoproto.jsontag) = "logins"]; + // Logins is a list of *nix system logins. + repeated string Logins = 1 [ (gogoproto.jsontag) = "logins" ]; - // Namespaces is a list of namespaces (used to partition a cluster). The - // field should be called "namespaces" when it returns in Teleport 2.4. - repeated string Namespaces = 2 [(gogoproto.jsontag) = "-"]; + // Namespaces is a list of namespaces (used to partition a cluster). The + // field should be called "namespaces" when it returns in Teleport 2.4. + repeated string Namespaces = 2 [ (gogoproto.jsontag) = "-" ]; - // NodeLabels is a map of node labels (used to dynamically grant access to nodes). - wrappers.LabelValues NodeLabels = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "node_labels,omitempty", (gogoproto.customtype) = "Labels"]; + // NodeLabels is a map of node labels (used to dynamically grant access to + // nodes). + wrappers.LabelValues NodeLabels = 3 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "node_labels,omitempty", + (gogoproto.customtype) = "Labels" + ]; - // Rules is a list of rules and their access levels. Rules are a high level - // construct used for access control. - repeated Rule Rules = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "rules,omitempty"]; + // Rules is a list of rules and their access levels. Rules are a high level + // construct used for access control. + repeated Rule Rules = 4 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "rules,omitempty" ]; - // KubeGroups is a list of kubernetes groups - repeated string KubeGroups = 5 [(gogoproto.jsontag) = "kubernetes_groups,omitempty"]; + // KubeGroups is a list of kubernetes groups + repeated string KubeGroups = 5 [ (gogoproto.jsontag) = "kubernetes_groups,omitempty" ]; - AccessRequestConditions Request = 6 [(gogoproto.jsontag) = "request,omitempty"]; + AccessRequestConditions Request = 6 [ (gogoproto.jsontag) = "request,omitempty" ]; - // KubeUsers is an optional kubernetes users to impersonate - repeated string KubeUsers = 7 [(gogoproto.jsontag) = "kubernetes_users,omitempty"]; + // KubeUsers is an optional kubernetes users to impersonate + repeated string KubeUsers = 7 [ (gogoproto.jsontag) = "kubernetes_users,omitempty" ]; } -// AccessRequestConditions is a matcher for allow/deny restrictions on access-requests. +// AccessRequestConditions is a matcher for allow/deny restrictions on +// access-requests. message AccessRequestConditions { // Roles is the name of roles which will match the request rule. - repeated string Roles = 1 [(gogoproto.jsontag) = "roles,omitempty"]; + repeated string Roles = 1 [ (gogoproto.jsontag) = "roles,omitempty" ]; } // Rule represents allow or deny rule that is executed to check // if user or service have access to resource -message Rule { - // Resources is a list of resources - repeated string Resources = 1 [(gogoproto.jsontag) = "resources,omitempty"]; - // Verbs is a list of verbs - repeated string Verbs = 2 [(gogoproto.jsontag) = "verbs,omitempty"]; - // Where specifies optional advanced matcher - string Where = 3 [(gogoproto.jsontag) = "where,omitempty"]; - // Actions specifies optional actions taken when this rule matches - repeated string Actions = 4 [(gogoproto.jsontag) = "actions,omitempty"]; +message Rule { + // Resources is a list of resources + repeated string Resources = 1 [ (gogoproto.jsontag) = "resources,omitempty" ]; + // Verbs is a list of verbs + repeated string Verbs = 2 [ (gogoproto.jsontag) = "verbs,omitempty" ]; + // Where specifies optional advanced matcher + string Where = 3 [ (gogoproto.jsontag) = "where,omitempty" ]; + // Actions specifies optional actions taken when this rule matches + repeated string Actions = 4 [ (gogoproto.jsontag) = "actions,omitempty" ]; } // BoolValue is a wrapper around bool, used in cases // whenever bool value can have different default value when missing -message BoolValue { - bool Value = 1; -} +message BoolValue { bool Value = 1; } // UserV2 is version 2 resource spec of the user -message UserV2 { +message UserV2 { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is User metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is User metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; // Spec is a user specification - UserSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + UserSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // UserSpecV2 is a specification for V2 user -message UserSpecV2 { - // OIDCIdentities lists associated OpenID Connect identities - // that let user log in using externally verified identity - repeated ExternalIdentity OIDCIdentities = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "oidc_identities,omitempty"]; +message UserSpecV2 { + // OIDCIdentities lists associated OpenID Connect identities + // that let user log in using externally verified identity + repeated ExternalIdentity OIDCIdentities = 1 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "oidc_identities,omitempty" ]; - // SAMLIdentities lists associated SAML identities - // that let user log in using externally verified identity - repeated ExternalIdentity SAMLIdentities = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "saml_identities,omitempty"]; + // SAMLIdentities lists associated SAML identities + // that let user log in using externally verified identity + repeated ExternalIdentity SAMLIdentities = 2 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "saml_identities,omitempty" ]; - // GithubIdentities list associated Github OAuth2 identities - // that let user log in using externally verified identity - repeated ExternalIdentity GithubIdentities = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "github_identities,omitempty"]; + // GithubIdentities list associated Github OAuth2 identities + // that let user log in using externally verified identity + repeated ExternalIdentity GithubIdentities = 3 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "github_identities,omitempty" ]; - // Roles is a list of roles assigned to user - repeated string Roles = 4 [(gogoproto.jsontag) = "roles,omitempty"]; + // Roles is a list of roles assigned to user + repeated string Roles = 4 [ (gogoproto.jsontag) = "roles,omitempty" ]; - // Traits are key/value pairs received from an identity provider (through - // OIDC claims or SAML assertions) or from a system administrator for local - // accounts. Traits are used to populate role variables. - wrappers.LabelValues Traits = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "traits,omitempty", (gogoproto.customtype) = "github.com/gravitational/teleport/lib/wrappers.Traits"]; + // Traits are key/value pairs received from an identity provider (through + // OIDC claims or SAML assertions) or from a system administrator for local + // accounts. Traits are used to populate role variables. + wrappers.LabelValues Traits = 5 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "traits,omitempty", + (gogoproto.customtype) = "github.com/gravitational/teleport/lib/wrappers.Traits" + ]; - // Status is a login status of the user - LoginStatus Status = 6 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "status,omitempty"]; + // Status is a login status of the user + LoginStatus Status = 6 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "status,omitempty" ]; - // Expires if set sets TTL on the user - google.protobuf.Timestamp Expires = 7 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "expires"]; + // Expires if set sets TTL on the user + google.protobuf.Timestamp Expires = 7 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "expires" + ]; - // CreatedBy holds information about agent or person created this user - CreatedBy CreatedBy = 8 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "created_by,omitempty"]; + // CreatedBy holds information about agent or person created this user + CreatedBy CreatedBy = 8 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "created_by,omitempty" ]; - // LocalAuths hold sensitive data necessary for performing local authentication - LocalAuthSecrets LocalAuth = 9 [(gogoproto.jsontag) = "local_auth,omitempty"]; + // LocalAuths hold sensitive data necessary for performing local + // authentication + LocalAuthSecrets LocalAuth = 9 [ (gogoproto.jsontag) = "local_auth,omitempty" ]; } // ExternalIdentity is OpenID Connect/SAML or Github identity that is linked @@ -655,23 +816,31 @@ message ExternalIdentity { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; - // ConnectorID is id of registered OIDC connector, e.g. 'google-example.com' - string ConnectorID = 1 [(gogoproto.jsontag) = "connector_id,omitempty"]; + // ConnectorID is id of registered OIDC connector, e.g. 'google-example.com' + string ConnectorID = 1 [ (gogoproto.jsontag) = "connector_id,omitempty" ]; - // Username is username supplied by external identity provider - string Username = 2 [(gogoproto.jsontag) = "username,omitempty"]; + // Username is username supplied by external identity provider + string Username = 2 [ (gogoproto.jsontag) = "username,omitempty" ]; } // LoginStatus is a login status of the user message LoginStatus { - // IsLocked tells us if user is locked - bool IsLocked = 1 [(gogoproto.jsontag) = "is_locked"]; - // LockedMessage contains the message in case if user is locked - string LockedMessage = 2 [(gogoproto.jsontag) = "locked_message,omitempty"]; - // LockedTime contains time when user was locked - google.protobuf.Timestamp LockedTime = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "locked_time,omitempty"]; - // LockExpires contains time when this lock will expire - google.protobuf.Timestamp LockExpires = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "lock_expires,omitempty"]; + // IsLocked tells us if user is locked + bool IsLocked = 1 [ (gogoproto.jsontag) = "is_locked" ]; + // LockedMessage contains the message in case if user is locked + string LockedMessage = 2 [ (gogoproto.jsontag) = "locked_message,omitempty" ]; + // LockedTime contains time when user was locked + google.protobuf.Timestamp LockedTime = 3 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "locked_time,omitempty" + ]; + // LockExpires contains time when this lock will expire + google.protobuf.Timestamp LockExpires = 4 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "lock_expires,omitempty" + ]; } // CreatedBy holds information about the person or agent who created the user @@ -679,107 +848,114 @@ message CreatedBy { option (gogoproto.goproto_stringer) = false; option (gogoproto.stringer) = false; - // Identity if present means that user was automatically created by identity - ConnectorRef Connector = 1 [(gogoproto.nullable) = true, (gogoproto.jsontag) = "connector,omitempty"]; - // Time specifies when user was created - google.protobuf.Timestamp Time = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "time"]; - // User holds information about user - UserRef User = 3 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "user"]; + // Identity if present means that user was automatically created by identity + ConnectorRef Connector = 1 + [ (gogoproto.nullable) = true, (gogoproto.jsontag) = "connector,omitempty" ]; + // Time specifies when user was created + google.protobuf.Timestamp Time = 2 + [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "time" ]; + // User holds information about user + UserRef User = 3 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "user" ]; } // U2FRegistrationData encodes the universal second factor registration payload. message U2FRegistrationData { // Raw is the serialized registration data as received from the token - bytes Raw = 1 [(gogoproto.jsontag) = "raw"]; + bytes Raw = 1 [ (gogoproto.jsontag) = "raw" ]; // KeyHandle uniquely identifies a key on a device - bytes KeyHandle = 2 [(gogoproto.jsontag) = "key_handle"]; + bytes KeyHandle = 2 [ (gogoproto.jsontag) = "key_handle" ]; // PubKey is an DER encoded ecdsa public key - bytes PubKey = 3 [(gogoproto.jsontag) = "pubkey"]; + bytes PubKey = 3 [ (gogoproto.jsontag) = "pubkey" ]; } // LocalAuthSecrets holds sensitive data used to authenticate a local user. message LocalAuthSecrets { // PasswordHash encodes a combined salt & hash for password verification. - bytes PasswordHash = 1 [(gogoproto.jsontag) = "password_hash,omitempty"]; + bytes PasswordHash = 1 [ (gogoproto.jsontag) = "password_hash,omitempty" ]; // TOTPKey is the key used for Time-based One Time Password varification. - string TOTPKey = 2 [(gogoproto.jsontag) = "totp_key,omitempty"]; + string TOTPKey = 2 [ (gogoproto.jsontag) = "totp_key,omitempty" ]; // U2FRegistration holds Universal Second Factor registration info. - U2FRegistrationData U2FRegistration = 3 [(gogoproto.jsontag) = "u2f_registration,omitempty"]; + U2FRegistrationData U2FRegistration = 3 [ (gogoproto.jsontag) = "u2f_registration,omitempty" ]; - // U2FCounter holds the highest seen Universal Second Factor registration count. - uint32 U2FCounter = 4 [(gogoproto.jsontag) = "u2f_counter,omitempty"]; + // U2FCounter holds the highest seen Universal Second Factor registration + // count. + uint32 U2FCounter = 4 [ (gogoproto.jsontag) = "u2f_counter,omitempty" ]; } // ConnectorRef holds information about OIDC connector message ConnectorRef { - // Type is connector type - string Type = 1 [(gogoproto.jsontag) = "type"]; - // ID is connector ID - string ID = 2 [(gogoproto.jsontag) = "id"]; - // Identity is external identity of the user - string Identity = 3 [(gogoproto.jsontag) = "identity"]; + // Type is connector type + string Type = 1 [ (gogoproto.jsontag) = "type" ]; + // ID is connector ID + string ID = 2 [ (gogoproto.jsontag) = "id" ]; + // Identity is external identity of the user + string Identity = 3 [ (gogoproto.jsontag) = "identity" ]; } // UserRef holds references to user message UserRef { - // Name is name of the user - string Name = 1 [(gogoproto.jsontag) = "name"]; + // Name is name of the user + string Name = 1 [ (gogoproto.jsontag) = "name" ]; } // ReverseTunnelV2 is version 2 of the resource spec of the reverse tunnel message ReverseTunnelV2 { - // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; - // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is a resource metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; - // Spec is a reverse tunnel specification - ReverseTunnelSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + // Kind is a resource kind + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; + // SubKind is an optional resource sub kind, used in some resources + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is a resource metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; + // Spec is a reverse tunnel specification + ReverseTunnelSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // ReverseTunnelSpecV2 is a specification for V2 reverse tunnel message ReverseTunnelSpecV2 { - // ClusterName is a domain name of remote cluster we are connecting to - string ClusterName = 1 [(gogoproto.jsontag) = "cluster_name"]; - // DialAddrs is a list of remote address to establish a connection to - // it's always SSH over TCP - repeated string DialAddrs = 2 [(gogoproto.jsontag) = "dial_addrs,omitempty"]; - // Type is the type of reverse tunnel, either proxy or node. - string Type = 3 [(gogoproto.jsontag) = "type", (gogoproto.casttype) = "TunnelType"]; + // ClusterName is a domain name of remote cluster we are connecting to + string ClusterName = 1 [ (gogoproto.jsontag) = "cluster_name" ]; + // DialAddrs is a list of remote address to establish a connection to + // it's always SSH over TCP + repeated string DialAddrs = 2 [ (gogoproto.jsontag) = "dial_addrs,omitempty" ]; + // Type is the type of reverse tunnel, either proxy or node. + string Type = 3 [ (gogoproto.jsontag) = "type", (gogoproto.casttype) = "TunnelType" ]; } // TunnelConnectionV2 is version 2 of the resource spec of the tunnel connection message TunnelConnectionV2 { - option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = false; + option (gogoproto.goproto_stringer) = false; + option (gogoproto.stringer) = false; - // Kind is a resource kind - string Kind = 1 [(gogoproto.jsontag) = "kind"]; - // SubKind is an optional resource sub kind, used in some resources - string SubKind = 2 [(gogoproto.jsontag) = "sub_kind,omitempty"]; - // Version is version - string Version = 3 [(gogoproto.jsontag) = "version"]; - // Metadata is a resource metadata - Metadata Metadata = 4 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata"]; - // Spec is a tunnel specification - TunnelConnectionSpecV2 Spec = 5 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "spec"]; + // Kind is a resource kind + string Kind = 1 [ (gogoproto.jsontag) = "kind" ]; + // SubKind is an optional resource sub kind, used in some resources + string SubKind = 2 [ (gogoproto.jsontag) = "sub_kind,omitempty" ]; + // Version is version + string Version = 3 [ (gogoproto.jsontag) = "version" ]; + // Metadata is a resource metadata + Metadata Metadata = 4 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "metadata" ]; + // Spec is a tunnel specification + TunnelConnectionSpecV2 Spec = 5 [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "spec" ]; } // TunnelConnectionSpecV2 is a specification for V2 tunnel connection message TunnelConnectionSpecV2 { - // ClusterName is a name of the cluster - string ClusterName = 1 [(gogoproto.jsontag) = "cluster_name"]; - // ProxyName is the name of the proxy server - string ProxyName = 2 [(gogoproto.jsontag) = "proxy_name"]; - // LastHeartbeat is a time of the last heartbeat - google.protobuf.Timestamp LastHeartbeat = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (gogoproto.jsontag) = "last_heartbeat,omitempty"]; - // Type is the type of reverse tunnel, either proxy or node. - string Type = 4 [(gogoproto.jsontag) = "type", (gogoproto.casttype) = "TunnelType"]; + // ClusterName is a name of the cluster + string ClusterName = 1 [ (gogoproto.jsontag) = "cluster_name" ]; + // ProxyName is the name of the proxy server + string ProxyName = 2 [ (gogoproto.jsontag) = "proxy_name" ]; + // LastHeartbeat is a time of the last heartbeat + google.protobuf.Timestamp LastHeartbeat = 3 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "last_heartbeat,omitempty" + ]; + // Type is the type of reverse tunnel, either proxy or node. + string Type = 4 [ (gogoproto.jsontag) = "type", (gogoproto.casttype) = "TunnelType" ]; } diff --git a/lib/session/session.go b/lib/session/session.go index 15e56598cfc..037899f3275 100644 --- a/lib/session/session.go +++ b/lib/session/session.go @@ -97,8 +97,12 @@ type Session struct { // LastActive holds the information about when the session // was last active LastActive time.Time `json:"last_active"` - // ServerID + // ServerID of session ServerID string `json:"server_id"` + // ServerHostname of session + ServerHostname string `json:"server_hostname"` + // ServerAddr of session + ServerAddr string `json:"server_addr"` } // RemoveParty helper allows to remove a party by it's ID from the diff --git a/lib/srv/regular/sshserver.go b/lib/srv/regular/sshserver.go index 58750fad214..0d9254d7f51 100644 --- a/lib/srv/regular/sshserver.go +++ b/lib/srv/regular/sshserver.go @@ -654,6 +654,7 @@ func (s *Server) GetInfo() services.Server { Addr: addr, Hostname: s.hostname, UseTunnel: s.useTunnel, + Version: teleport.Version, }, } } diff --git a/lib/srv/sess.go b/lib/srv/sess.go index 4a0c76268aa..b4dc9a972fa 100644 --- a/lib/srv/sess.go +++ b/lib/srv/sess.go @@ -477,12 +477,15 @@ func newSession(id rsession.ID, r *SessionRegistry, ctx *ServerContext) (*sessio W: teleport.DefaultTerminalWidth, H: teleport.DefaultTerminalHeight, }, - Login: ctx.Identity.Login, - Created: time.Now().UTC(), - LastActive: time.Now().UTC(), - ServerID: ctx.srv.ID(), - Namespace: r.srv.GetNamespace(), + Login: ctx.Identity.Login, + Created: time.Now().UTC(), + LastActive: time.Now().UTC(), + ServerID: ctx.srv.ID(), + Namespace: r.srv.GetNamespace(), + ServerHostname: ctx.srv.GetInfo().GetHostname(), + ServerAddr: ctx.srv.GetInfo().GetAddr(), } + term := ctx.GetTerm() if term != nil { winsize, err := term.GetWinSize() diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 97ca6b3af8b..040806f0dbe 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -166,10 +166,10 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { h.DELETE("/webapi/sessions", h.WithAuth(h.deleteSession)) h.POST("/webapi/sessions/renew", h.WithAuth(h.renewSession)) - // Users - h.GET("/webapi/users/invites/:token", httplib.MakeHandler(h.renderUserInvite)) - h.POST("/webapi/users", httplib.MakeHandler(h.createNewUser)) + h.GET("/webapi/users/password/token/:token", httplib.MakeHandler(h.getResetPasswordTokenHandle)) + h.PUT("/webapi/users/password/token", httplib.WithCSRFProtection(h.changePasswordWithToken)) h.PUT("/webapi/users/password", h.WithAuth(h.changePassword)) + h.POST("/webapi/sites/:site/namespaces/:namespace/users/password/token", h.WithClusterAuth(h.createResetPasswordToken)) // Issues SSH temp certificates based on 2FA access creds h.POST("/webapi/ssh/certs", httplib.MakeHandler(h.createSSHCert)) @@ -201,6 +201,9 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { h.GET("/webapi/sites/:site/namespaces/:namespace/nodes/:server/:login/scp", h.WithClusterAuth(h.transferFile)) h.POST("/webapi/sites/:site/namespaces/:namespace/nodes/:server/:login/scp", h.WithClusterAuth(h.transferFile)) + // web context + h.GET("/webapi/sites/:site/context", h.WithClusterAuth(h.getUserContext)) + // OIDC related callback handlers h.GET("/webapi/oidc/login/web", httplib.MakeHandler(h.oidcLoginWeb)) h.POST("/webapi/oidc/login/console", httplib.MakeHandler(h.oidcLoginConsole)) @@ -218,7 +221,6 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { // U2F related APIs h.GET("/webapi/u2f/signuptokens/:token", httplib.MakeHandler(h.u2fRegisterRequest)) - h.POST("/webapi/u2f/users", httplib.MakeHandler(h.createNewU2FUser)) h.POST("/webapi/u2f/password/changerequest", h.WithAuth(h.u2fChangePasswordRequest)) h.POST("/webapi/u2f/signrequest", httplib.MakeHandler(h.u2fSignRequest)) h.POST("/webapi/u2f/sessions", httplib.MakeHandler(h.createSessionWithU2FSignResponse)) @@ -229,7 +231,6 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { // User Status (used by client to check if user session is valid) h.GET("/webapi/user/status", h.WithAuth(h.getUserStatus)) - h.GET("/webapi/user/context", h.WithAuth(h.getUserContext)) // Issue host credentials. h.POST("/webapi/host/credentials", httplib.MakeHandler(h.hostCredentials)) @@ -319,8 +320,7 @@ func NewHandler(cfg Config, opts ...HandlerOption) (*RewritingHandler, error) { Session string XCSRF string }{ - XCSRF: csrfToken, - Session: base64.StdEncoding.EncodeToString([]byte("{}")), + XCSRF: csrfToken, } ctx, err := h.AuthenticateRequest(w, r, false) @@ -377,7 +377,7 @@ func (h *Handler) getUserStatus(w http.ResponseWriter, r *http.Request, _ httpro // // GET /webapi/user/context // -func (h *Handler) getUserContext(w http.ResponseWriter, r *http.Request, _ httprouter.Params, c *SessionContext) (interface{}, error) { +func (h *Handler) getUserContext(w http.ResponseWriter, r *http.Request, p httprouter.Params, c *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) { clt, err := c.GetClient() if err != nil { return nil, trace.Wrap(err) @@ -401,11 +401,17 @@ func (h *Handler) getUserContext(w http.ResponseWriter, r *http.Request, _ httpr if err != nil { return nil, trace.Wrap(err) } + userContext, err := ui.NewUserContext(user, roleset) if err != nil { return nil, trace.Wrap(err) } + userContext.Cluster, err = ui.GetClusterDetails(site) + if err != nil { + return nil, trace.Wrap(err) + } + return userContext, nil } @@ -677,8 +683,9 @@ func (h *Handler) getWebConfig(w http.ResponseWriter, r *http.Request, p httprou } authSettings := ui.WebConfigAuthSettings{ - Providers: authProviders, - SecondFactor: secondFactor, + Providers: authProviders, + SecondFactor: secondFactor, + LocalAuthEnabled: clsCfg.GetLocalAuth(), } webCfg := ui.WebConfig{ @@ -686,6 +693,13 @@ func (h *Handler) getWebConfig(w http.ResponseWriter, r *http.Request, p httprou CanJoinSessions: canJoinSessions, } + resource, err := h.cfg.ProxyClient.GetClusterName() + if err != nil { + log.Warn(err) + } else { + webCfg.ProxyClusterName = resource.GetClusterName() + } + out, err := json.Marshal(webCfg) if err != nil { return nil, trace.Wrap(err) @@ -1039,19 +1053,6 @@ type CreateSessionResponse struct { ExpiresIn int `json:"expires_in"` } -type createSessionResponseRaw struct { - // Type is token type (bearer) - Type string `json:"type"` - // Token value - Token string `json:"token"` - // ExpiresIn sets seconds before this token is not valid - ExpiresIn int `json:"expires_in"` -} - -func (r createSessionResponseRaw) response() (*CreateSessionResponse, error) { - return &CreateSessionResponse{Type: r.Type, Token: r.Token, ExpiresIn: r.ExpiresIn}, nil -} - func NewSessionResponse(ctx *SessionContext) (*CreateSessionResponse, error) { clt, err := ctx.GetClient() if err != nil { @@ -1189,32 +1190,85 @@ func (h *Handler) renewSession(w http.ResponseWriter, r *http.Request, _ httprou return NewSessionResponse(newContext) } -type renderUserInviteResponse struct { - InviteToken string `json:"invite_token"` - User string `json:"user"` - QR []byte `json:"qr"` +func (h *Handler) changePasswordWithToken(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { + var req auth.ChangePasswordWithTokenRequest + if err := httplib.ReadJSON(r, &req); err != nil { + return nil, trace.Wrap(err) + } + + sess, err := h.auth.proxyClient.ChangePasswordWithToken(r.Context(), req) + if err != nil { + return nil, trace.Wrap(err) + } + ctx, err := h.auth.ValidateSession(sess.GetUser(), sess.GetName()) + if err != nil { + return nil, trace.Wrap(err) + } + if err := SetSession(w, sess.GetUser(), sess.GetName()); err != nil { + return nil, trace.Wrap(err) + } + + return NewSessionResponse(ctx) } -// renderUserInvite is called to show user the new user invitation page -// -// GET /v1/webapi/users/invites/:token -// -// Response: -// -// {"invite_token": "token", "user": "alex", qr: "base64-encoded-qr-code image"} -// -// -func (h *Handler) renderUserInvite(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { - token := p[0].Value - user, qrCodeBytes, err := h.auth.GetUserInviteInfo(token) +func (h *Handler) createResetPasswordToken(w http.ResponseWriter, r *http.Request, p httprouter.Params, ctx *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) { + clt, err := ctx.GetUserClient(site) if err != nil { return nil, trace.Wrap(err) } - return &renderUserInviteResponse{ - InviteToken: token, - User: user, - QR: qrCodeBytes, + var req auth.CreateResetPasswordTokenRequest + if err := httplib.ReadJSON(r, &req); err != nil { + return nil, trace.Wrap(err) + } + + token, err := clt.CreateResetPasswordToken(context.TODO(), + auth.CreateResetPasswordTokenRequest{ + Name: req.Name, + Type: req.Type, + }) + + if err != nil { + return nil, trace.Wrap(err) + } + + return ui.ResetPasswordToken{ + URL: token.GetURL(), + Expiry: token.Expiry(), + }, nil +} + +func (h *Handler) getResetPasswordTokenHandle(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { + result, err := h.getResetPasswordToken(context.TODO(), p.ByName("token")) + if err != nil { + log.Warnf("Failed to fetch a reset password token: %v.", err) + // We hide the error from the remote user to avoid giving any hints. + return nil, trace.AccessDenied("bad or expired token") + } + + return result, nil +} + +func (h *Handler) getResetPasswordToken(ctx context.Context, tokenID string) (interface{}, error) { + token, err := h.auth.proxyClient.GetResetPasswordToken(ctx, tokenID) + if err != nil { + return nil, trace.Wrap(err) + } + + // RotateResetPasswordTokenSecrets rotates secrets for a given tokenID. + // It gets called every time a user fetches 2nd-factor secrets during registration attempt. + // This ensures that an attacker that gains the ResetPasswordToken link can not view it, + // extract the OTP key from the QR code, then allow the user to signup with + // the same OTP token. + secrets, err := h.auth.proxyClient.RotateResetPasswordTokenSecrets(ctx, tokenID) + if err != nil { + return nil, trace.Wrap(err) + } + + return ui.ResetPasswordToken{ + TokenID: token.GetName(), + User: token.GetUser(), + QRCode: secrets.GetQRCode(), }, nil } @@ -1227,7 +1281,7 @@ func (h *Handler) renderUserInvite(w http.ResponseWriter, r *http.Request, p htt // {"version":"U2F_V2","challenge":"randombase64string","appId":"https://mycorp.com:3080"} // func (h *Handler) u2fRegisterRequest(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { - token := p[0].Value + token := p.ByName("token") u2fRegisterRequest, err := h.auth.GetUserInviteU2FRegisterRequest(token) if err != nil { return nil, trace.Wrap(err) @@ -1295,77 +1349,7 @@ func (h *Handler) createSessionWithU2FSignResponse(w http.ResponseWriter, r *htt return NewSessionResponse(ctx) } -// createNewUser req is a request to create a new Teleport user -type createNewUserReq struct { - InviteToken string `json:"invite_token"` - Pass string `json:"pass"` - SecondFactorToken string `json:"second_factor_token,omitempty"` -} - -// createNewUser creates new user entry based on the invite token -// -// POST /v1/webapi/users -// -// {"invite_token": "unique invite token", "pass": "user password", "second_factor_token": "valid second factor token"} -// -// Successful response: (session cookie is set) -// -// {"type": "bearer", "token": "bearer token", "user": "alex", "expires_in": 20} -func (h *Handler) createNewUser(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { - var req *createNewUserReq - if err := httplib.ReadJSON(r, &req); err != nil { - return nil, trace.Wrap(err) - } - sess, err := h.auth.CreateNewUser(req.InviteToken, req.Pass, req.SecondFactorToken) - if err != nil { - return nil, trace.Wrap(err) - } - ctx, err := h.auth.ValidateSession(sess.GetUser(), sess.GetName()) - if err != nil { - return nil, trace.Wrap(err) - } - if err := SetSession(w, sess.GetUser(), sess.GetName()); err != nil { - return nil, trace.Wrap(err) - } - return NewSessionResponse(ctx) -} - -// A request to create a new user which uses U2F as the second factor -type createNewU2FUserReq struct { - InviteToken string `json:"invite_token"` - Pass string `json:"pass"` - U2FRegisterResponse u2f.RegisterResponse `json:"u2f_register_response"` -} - -// createNewU2FUser creates a new user configured to use U2F as the second factor -// -// POST /webapi/u2f/users -// -// {"invite_token": "unique invite token", "pass": "user password", "u2f_register_response": {"registrationData":"verylongbase64string","clientData":"longbase64string"}} -// -// Successful response: (session cookie is set) -// -// {"type": "bearer", "token": "bearer token", "user": "alex", "expires_in": 20} -func (h *Handler) createNewU2FUser(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { - var req *createNewU2FUserReq - if err := httplib.ReadJSON(r, &req); err != nil { - return nil, trace.Wrap(err) - } - sess, err := h.auth.CreateNewU2FUser(req.InviteToken, req.Pass, req.U2FRegisterResponse) - if err != nil { - return nil, trace.Wrap(err) - } - ctx, err := h.auth.ValidateSession(sess.GetUser(), sess.GetName()) - if err != nil { - return nil, trace.Wrap(err) - } - if err := SetSession(w, sess.GetUser(), sess.GetName()); err != nil { - return nil, trace.Wrap(err) - } - return NewSessionResponse(ctx) -} - -// getClusters returns a list of clusters +// getClusters returns a list of cluster and its data. // // GET /v1/webapi/sites // @@ -1374,15 +1358,12 @@ func (h *Handler) createNewU2FUser(w http.ResponseWriter, r *http.Request, p htt // {"sites": {"name": "localhost", "last_connected": "RFC3339 time", "status": "active"}} // func (h *Handler) getClusters(w http.ResponseWriter, r *http.Request, p httprouter.Params, c *SessionContext) (interface{}, error) { - resource, err := h.cfg.ProxyClient.GetClusterName() + clusters, err := ui.NewClusters(h.cfg.Proxy.GetSites()) if err != nil { return nil, trace.Wrap(err) } - response := ui.NewAvailableClusters(resource.GetClusterName(), - h.cfg.Proxy.GetSites()) - - return response, nil + return clusters, nil } type getSiteNamespacesResponse struct { @@ -2023,17 +2004,17 @@ func (h *Handler) WithClusterAuth(fn ClusterHandler) httprouter.Handle { log.Info(err) return nil, trace.Wrap(err) } - siteName := p.ByName("site") - if siteName == currentSiteShortcut { + clusterName := p.ByName("site") + if clusterName == currentSiteShortcut { res, err := h.cfg.ProxyClient.GetClusterName() if err != nil { log.Warn(err) return nil, trace.Wrap(err) } - siteName = res.GetClusterName() + clusterName = res.GetClusterName() } - site, err := h.cfg.Proxy.GetSite(siteName) + site, err := h.cfg.Proxy.GetSite(clusterName) if err != nil { log.Warn(err) return nil, trace.Wrap(err) diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index 8add95944ef..b166bdfb69d 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -86,9 +86,10 @@ func TestWeb(t *testing.T) { } type WebSuite struct { - node *regular.Server - proxy *regular.Server - srvID string + node *regular.Server + proxy *regular.Server + proxyTunnel reversetunnel.Server + srvID string user string webServer *httptest.Server @@ -125,8 +126,8 @@ func (s *WebSuite) SetUpSuite(c *C) { os.Unsetenv(teleport.DebugEnvVar) utils.InitLoggerForTests(testing.Verbose()) - // configure tests to use static assets from web/dist: - debugAssetsPath = "../../web/dist" + // configure tests to use static assets from webassets/teleport: + debugAssetsPath = "../../webassets/teleport" os.Setenv(teleport.DebugEnvVar, "true") //sessionStreamPollPeriod = time.Millisecond @@ -217,6 +218,7 @@ func (s *WebSuite) SetUpTest(c *C) { DataDir: c.MkDir(), }) c.Assert(err, IsNil) + s.proxyTunnel = revTunServer // proxy server: proxyPort := s.freePorts[len(s.freePorts)-1] @@ -275,7 +277,7 @@ type authPack struct { } func (s *WebSuite) authPackFromResponse(c *C, re *roundtrip.Response) *authPack { - var sess *createSessionResponseRaw + var sess *CreateSessionResponse c.Assert(json.Unmarshal(re.Bytes(), &sess), IsNil) jar, err := cookiejar.New(nil) @@ -331,7 +333,7 @@ func (s *WebSuite) authPack(c *C, user string) *authPack { re, err := s.login(clt, csrfToken, csrfToken, req) c.Assert(err, IsNil) - var rawSess *createSessionResponseRaw + var rawSess *CreateSessionResponse c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) sess, err := rawSess.response() @@ -375,83 +377,6 @@ func (s *WebSuite) createUser(c *C, user string, login string, pass string, otpS c.Assert(err, IsNil) } -func (s *WebSuite) TestNewUser(c *C) { - token, err := s.server.Auth().CreateSignupToken(services.UserV1{Name: "bob", AllowedLogins: []string{s.user}}, 0) - c.Assert(err, IsNil) - - // Save the original signup token, after GET /v2/webapi/users/invites/ - // this should change. - ost, err := s.server.Auth().GetSignupToken(token) - c.Assert(err, IsNil) - - tokens, err := s.server.Auth().GetTokens() - c.Assert(err, IsNil) - c.Assert(len(tokens), Equals, 1) - c.Assert(tokens[0].GetName(), Equals, token) - - clt := s.client() - re, err := clt.Get(context.Background(), clt.Endpoint("webapi", "users", "invites", token), url.Values{}) - c.Assert(err, IsNil) - - var out *renderUserInviteResponse - c.Assert(json.Unmarshal(re.Bytes(), &out), IsNil) - c.Assert(out.User, Equals, "bob") - c.Assert(out.InviteToken, Equals, token) - - st, err := s.server.Auth().GetSignupToken(token) - c.Assert(err, IsNil) - - // Make sure that the signup token changed after rending the endpoint - // GET /v2/webapi/users/invites/ above. - c.Assert(st, Not(Equals), ost) - - validToken, err := totp.GenerateCode(st.OTPKey, time.Now()) - c.Assert(err, IsNil) - - tempPass := "abc123" - - re, err = clt.PostJSON(context.Background(), clt.Endpoint("webapi", "users"), createNewUserReq{ - InviteToken: token, - Pass: tempPass, - SecondFactorToken: validToken, - }) - c.Assert(err, IsNil) - - var rawSess *createSessionResponseRaw - c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) - cookies := re.Cookies() - c.Assert(len(cookies), Equals, 1) - - // now make sure we are logged in by calling authenticated method - // we need to supply both session cookie and bearer token for - // request to succeed - jar, err := cookiejar.New(nil) - c.Assert(err, IsNil) - - clt = s.client(roundtrip.BearerAuth(rawSess.Token), roundtrip.CookieJar(jar)) - jar.SetCookies(s.url(), re.Cookies()) - - re, err = clt.Get(context.Background(), clt.Endpoint("webapi", "sites"), url.Values{}) - c.Assert(err, IsNil) - - var clusters *ui.AvailableClusters - c.Assert(json.Unmarshal(re.Bytes(), &clusters), IsNil) - - // in absence of session cookie or bearer auth the same request fill fail - - // no session cookie: - clt = s.client(roundtrip.BearerAuth(rawSess.Token)) - re, err = clt.Get(context.Background(), clt.Endpoint("webapi", "sites"), url.Values{}) - c.Assert(err, NotNil) - c.Assert(trace.IsAccessDenied(err), Equals, true) - - // no bearer token: - clt = s.client(roundtrip.CookieJar(jar)) - re, err = clt.Get(context.Background(), clt.Endpoint("webapi", "sites"), url.Values{}) - c.Assert(err, NotNil) - c.Assert(trace.IsAccessDenied(err), Equals, true) -} - func (s *WebSuite) TestSAMLSuccess(c *C) { input := fixtures.SAMLOktaConnectorV2 @@ -561,7 +486,7 @@ func (s *WebSuite) TestWebSessionsCRUD(c *C) { re, err := pack.clt.Get(context.Background(), pack.clt.Endpoint("webapi", "sites"), url.Values{}) c.Assert(err, IsNil) - var clusters *ui.AvailableClusters + var clusters []ui.Cluster c.Assert(json.Unmarshal(re.Bytes(), &clusters), IsNil) // now delete session @@ -1156,43 +1081,37 @@ func (s *WebSuite) TestPlayback(c *C) { defer ws.Close() } -func (s *WebSuite) TestNewU2FUser(c *C) { - // configure cluster authentication preferences - cap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ +func (s *WebSuite) TestLogin(c *C) { + ap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ Type: teleport.Local, - SecondFactor: teleport.U2F, - U2F: &services.U2F{ - AppID: "https://" + s.server.ClusterName(), - Facets: []string{"https://" + s.server.ClusterName()}, - }, + SecondFactor: teleport.OFF, }) c.Assert(err, IsNil) - err = s.server.AuthServer.AuthServer.SetAuthPreference(cap) + err = s.server.Auth().SetAuthPreference(ap) c.Assert(err, IsNil) - token, err := s.server.Auth().CreateSignupToken(services.UserV1{Name: "bob", AllowedLogins: []string{s.user}}, 0) - c.Assert(err, IsNil) + // create user + s.createUser(c, "user1", "root", "password", "") + + loginReq, err := json.Marshal(createSessionReq{ + User: "user1", + Pass: "password", + }) clt := s.client() - re, err := clt.Get(context.Background(), clt.Endpoint("webapi", "u2f", "signuptokens", token), url.Values{}) + req, err := http.NewRequest("POST", clt.Endpoint("webapi", "sessions"), bytes.NewBuffer(loginReq)) c.Assert(err, IsNil) - var u2fRegReq u2f.RegisterRequest - c.Assert(json.Unmarshal(re.Bytes(), &u2fRegReq), IsNil) + csrfToken := "2ebcb768d0090ea4368e42880c970b61865c326172a4a2343b645cf5d7f20992" + addCSRFCookieToReq(req, csrfToken) + req.Header.Set("Content-Type", "application/json") + req.Header.Set(csrf.HeaderName, csrfToken) - u2fRegResp, err := s.mockU2F.RegisterResponse(&u2fRegReq) - c.Assert(err, IsNil) - - tempPass := "abc123" - - re, err = clt.PostJSON(context.Background(), clt.Endpoint("webapi", "u2f", "users"), createNewU2FUserReq{ - InviteToken: token, - Pass: tempPass, - U2FRegisterResponse: *u2fRegResp, + re, err := clt.Client.RoundTrip(func() (*http.Response, error) { + return clt.Client.HTTPClient().Do(req) }) - c.Assert(err, IsNil) - var rawSess *createSessionResponseRaw + var rawSess *CreateSessionResponse c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) cookies := re.Cookies() c.Assert(len(cookies), Equals, 1) @@ -1209,7 +1128,7 @@ func (s *WebSuite) TestNewU2FUser(c *C) { re, err = clt.Get(context.Background(), clt.Endpoint("webapi", "sites"), url.Values{}) c.Assert(err, IsNil) - var clusters *ui.AvailableClusters + var clusters []ui.Cluster c.Assert(json.Unmarshal(re.Bytes(), &clusters), IsNil) // in absence of session cookie or bearer auth the same request fill fail @@ -1227,6 +1146,116 @@ func (s *WebSuite) TestNewU2FUser(c *C) { c.Assert(trace.IsAccessDenied(err), Equals, true) } +func (s *WebSuite) TestChangePasswordWithTokenOTP(c *C) { + ap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.OTP, + }) + c.Assert(err, IsNil) + err = s.server.Auth().SetAuthPreference(ap) + c.Assert(err, IsNil) + + // create user + s.createUser(c, "user1", "root", "password", "") + + // create password change token + token, err := s.server.Auth().CreateResetPasswordToken(context.TODO(), auth.CreateResetPasswordTokenRequest{ + Name: "user1", + }) + c.Assert(err, IsNil) + + clt := s.client() + re, err := clt.Get(context.Background(), clt.Endpoint("webapi", "users", "password", "token", token.GetName()), url.Values{}) + c.Assert(err, IsNil) + + var uiToken *ui.ResetPasswordToken + c.Assert(json.Unmarshal(re.Bytes(), &uiToken), IsNil) + c.Assert(uiToken.User, Equals, token.GetUser()) + c.Assert(uiToken.TokenID, Equals, token.GetName()) + + secrets, err := s.server.Auth().RotateResetPasswordTokenSecrets(context.TODO(), token.GetName()) + c.Assert(err, IsNil) + + secondFactorToken, err := totp.GenerateCode(secrets.GetOTPKey(), time.Now()) + c.Assert(err, IsNil) + + data, err := json.Marshal(auth.ChangePasswordWithTokenRequest{ + TokenID: token.GetName(), + Password: []byte("abc123"), + SecondFactorToken: secondFactorToken, + }) + + req, err := http.NewRequest("PUT", clt.Endpoint("webapi", "users", "password", "token"), bytes.NewBuffer(data)) + c.Assert(err, IsNil) + + csrfToken := "2ebcb768d0090ea4368e42880c970b61865c326172a4a2343b645cf5d7f20992" + addCSRFCookieToReq(req, csrfToken) + req.Header.Set("Content-Type", "application/json") + req.Header.Set(csrf.HeaderName, csrfToken) + + re, err = clt.Client.RoundTrip(func() (*http.Response, error) { + return clt.Client.HTTPClient().Do(req) + }) + + var rawSess *CreateSessionResponse + c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) + c.Assert(rawSess.Token != "", Equals, true) +} + +func (s *WebSuite) TestChangePasswordWithTokenU2F(c *C) { + ap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ + Type: teleport.Local, + SecondFactor: teleport.U2F, + U2F: &services.U2F{ + AppID: "https://" + s.server.ClusterName(), + Facets: []string{"https://" + s.server.ClusterName()}, + }, + }) + c.Assert(err, IsNil) + err = s.server.Auth().SetAuthPreference(ap) + c.Assert(err, IsNil) + + s.createUser(c, "user2", "root", "password", "") + + // create reset password token + token, err := s.server.Auth().CreateResetPasswordToken(context.TODO(), auth.CreateResetPasswordTokenRequest{ + Name: "user2", + }) + c.Assert(err, IsNil) + + clt := s.client() + re, err := clt.Get(context.Background(), clt.Endpoint("webapi", "u2f", "signuptokens", token.GetName()), url.Values{}) + c.Assert(err, IsNil) + + var u2fRegReq u2f.RegisterRequest + c.Assert(json.Unmarshal(re.Bytes(), &u2fRegReq), IsNil) + + u2fRegResp, err := s.mockU2F.RegisterResponse(&u2fRegReq) + c.Assert(err, IsNil) + + data, err := json.Marshal(auth.ChangePasswordWithTokenRequest{ + TokenID: token.GetName(), + Password: []byte("qweQWE"), + U2FRegisterResponse: *u2fRegResp, + }) + + req, err := http.NewRequest("PUT", clt.Endpoint("webapi", "users", "password", "token"), bytes.NewBuffer(data)) + c.Assert(err, IsNil) + + csrfToken := "2ebcb768d0090ea4368e42880c970b61865c326172a4a2343b645cf5d7f20992" + addCSRFCookieToReq(req, csrfToken) + req.Header.Set("Content-Type", "application/json") + req.Header.Set(csrf.HeaderName, csrfToken) + + re, err = clt.Client.RoundTrip(func() (*http.Response, error) { + return clt.Client.HTTPClient().Do(req) + }) + + var rawSess *CreateSessionResponse + c.Assert(json.Unmarshal(re.Bytes(), &rawSess), IsNil) + c.Assert(rawSess.Token != "", Equals, true) +} + func (s *WebSuite) TestU2FLogin(c *C) { // configure cluster authentication preferences cap, err := services.NewAuthPreference(services.AuthPreferenceSpecV2{ @@ -1241,25 +1270,34 @@ func (s *WebSuite) TestU2FLogin(c *C) { err = s.server.Auth().SetAuthPreference(cap) c.Assert(err, IsNil) - token, err := s.server.Auth().CreateSignupToken(services.UserV1{Name: "bob", AllowedLogins: []string{s.user}}, 0) + // create user + s.createUser(c, "bob", "root", "password", "") + + // create password change token + token, err := s.server.Auth().CreateResetPasswordToken(context.TODO(), auth.CreateResetPasswordTokenRequest{ + Name: "bob", + }) c.Assert(err, IsNil) - u2fRegReq, err := s.proxyClient.GetSignupU2FRegisterRequest(token) + u2fRegReq, err := s.proxyClient.GetSignupU2FRegisterRequest(token.GetName()) c.Assert(err, IsNil) u2fRegResp, err := s.mockU2F.RegisterResponse(u2fRegReq) c.Assert(err, IsNil) - tempPass := "abc123" - - _, err = s.proxyClient.CreateUserWithU2FToken(token, tempPass, *u2fRegResp) + tempPass := []byte("abc123") + _, err = s.proxyClient.ChangePasswordWithToken(context.TODO(), auth.ChangePasswordWithTokenRequest{ + TokenID: token.GetName(), + U2FRegisterResponse: *u2fRegResp, + Password: tempPass, + }) c.Assert(err, IsNil) // normal login clt := s.client() re, err := clt.PostJSON(context.Background(), clt.Endpoint("webapi", "u2f", "signrequest"), client.U2fSignRequestReq{ User: "bob", - Pass: tempPass, + Pass: string(tempPass), }) c.Assert(err, IsNil) var u2fSignReq u2f.SignRequest @@ -1275,10 +1313,9 @@ func (s *WebSuite) TestU2FLogin(c *C) { c.Assert(err, IsNil) // bad login: corrupted sign responses, should fail - re, err = clt.PostJSON(context.Background(), clt.Endpoint("webapi", "u2f", "signrequest"), client.U2fSignRequestReq{ User: "bob", - Pass: tempPass, + Pass: string(tempPass), }) c.Assert(err, IsNil) c.Assert(json.Unmarshal(re.Bytes(), &u2fSignReq), IsNil) @@ -1289,7 +1326,6 @@ func (s *WebSuite) TestU2FLogin(c *C) { // corrupted KeyHandle u2fSignRespCopy := u2fSignResp u2fSignRespCopy.KeyHandle = u2fSignRespCopy.KeyHandle + u2fSignRespCopy.KeyHandle - _, err = clt.PostJSON(context.Background(), clt.Endpoint("webapi", "u2f", "sessions"), u2fSignResponseReq{ User: "bob", U2FSignResponse: *u2fSignRespCopy, @@ -1317,12 +1353,10 @@ func (s *WebSuite) TestU2FLogin(c *C) { c.Assert(err, NotNil) // bad login: counter not increasing, should fail - s.mockU2F.SetCounter(0) - re, err = clt.PostJSON(context.Background(), clt.Endpoint("webapi", "u2f", "signrequest"), client.U2fSignRequestReq{ User: "bob", - Pass: tempPass, + Pass: string(tempPass), }) c.Assert(err, IsNil) c.Assert(json.Unmarshal(re.Bytes(), &u2fSignReq), IsNil) @@ -1583,6 +1617,28 @@ func (s *WebSuite) searchEvents(c *C, clt *client.WebClient, query url.Values, f return result } +func (s *WebSuite) TestGetClusterDetails(c *C) { + site, err := s.proxyTunnel.GetSite(s.server.ClusterName()) + c.Assert(err, IsNil) + c.Assert(site, NotNil) + + cluster, err := ui.GetClusterDetails(site) + c.Assert(err, IsNil) + c.Assert(cluster.Name, Equals, s.server.ClusterName()) + c.Assert(cluster.ProxyVersion, Equals, teleport.Version) + c.Assert(cluster.PublicURL, Equals, fmt.Sprintf("%v:%v", s.server.ClusterName(), defaults.HTTPListenPort)) + c.Assert(cluster.Status, Equals, teleport.RemoteClusterStatusOnline) + c.Assert(cluster.LastConnected, NotNil) + + nodes, err := s.proxyClient.GetNodes(defaults.Namespace) + c.Assert(err, IsNil) + c.Assert(nodes, HasLen, cluster.NodeCount) + + // Expected empty, b/c test auth server doesn't set up + // heartbeat which where ServerSpecV2 version would've been set + c.Assert(cluster.AuthVersion, Equals, "") +} + type authProviderMock struct { server services.ServerV2 } @@ -1825,3 +1881,7 @@ func newTerminalHandler() TerminalHandler { decoder: unicode.UTF8.NewDecoder(), } } + +func (r CreateSessionResponse) response() (*CreateSessionResponse, error) { + return &CreateSessionResponse{Type: r.Type, Token: r.Token, ExpiresIn: r.ExpiresIn}, nil +} diff --git a/lib/web/sessions.go b/lib/web/sessions.go index 82619bbfe05..54bd3e0b67e 100644 --- a/lib/web/sessions.go +++ b/lib/web/sessions.go @@ -29,7 +29,6 @@ import ( "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/agent" - "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/auth/proto" "github.com/gravitational/teleport/lib/client" @@ -470,10 +469,6 @@ func (s *sessionCache) GetCertificateWithU2F(c client.CreateSSHCertWithU2FReq) ( }) } -func (s *sessionCache) GetUserInviteInfo(token string) (user string, otpQRCode []byte, err error) { - return s.proxyClient.GetSignupTokenData(token) -} - // Ping gets basic info about the auth server. func (s *sessionCache) Ping(ctx context.Context) (proto.PingResponse, error) { return s.proxyClient.Ping(ctx) @@ -483,31 +478,6 @@ func (s *sessionCache) GetUserInviteU2FRegisterRequest(token string) (*u2f.Regis return s.proxyClient.GetSignupU2FRegisterRequest(token) } -func (s *sessionCache) CreateNewUser(token, password, otpToken string) (services.WebSession, error) { - cap, err := s.proxyClient.GetAuthPreference() - if err != nil { - return nil, trace.Wrap(err) - } - - var webSession services.WebSession - - switch cap.GetSecondFactor() { - case teleport.OFF: - webSession, err = s.proxyClient.CreateUserWithoutOTP(token, password) - case teleport.OTP, teleport.TOTP, teleport.HOTP: - webSession, err = s.proxyClient.CreateUserWithOTP(token, password, otpToken) - } - if err != nil { - return nil, trace.Wrap(err) - } - - return webSession, nil -} - -func (s *sessionCache) CreateNewU2FUser(token string, password string, u2fRegisterResponse u2f.RegisterResponse) (services.WebSession, error) { - return s.proxyClient.CreateUserWithU2FToken(token, password, u2fRegisterResponse) -} - func (s *sessionCache) ValidateTrustedCluster(validateRequest *auth.ValidateTrustedClusterRequest) (*auth.ValidateTrustedClusterResponse, error) { return s.proxyClient.ValidateTrustedCluster(validateRequest) } diff --git a/lib/web/static.go b/lib/web/static.go index 82d4a4c9b22..61f59e06abc 100644 --- a/lib/web/static.go +++ b/lib/web/static.go @@ -59,7 +59,17 @@ func NewStaticFileSystem(debugMode bool) (http.FileSystem, error) { if err != nil { return nil, trace.Wrap(err) } - debugAssetsPath = path.Join(exePath, "../web/dist") + + _, err = os.Stat(path.Join(exePath, "../../e")) + isEnterprise := !os.IsNotExist(err) + + if isEnterprise == true { + // enterprise web assets + debugAssetsPath = path.Join(exePath, "../../webassets/e/teleport") + } else { + // community web assets + debugAssetsPath = path.Join(exePath, "../webassets/teleport") + } } for _, af := range assetsToCheck { diff --git a/lib/web/static_test.go b/lib/web/static_test.go index 24738222c87..00a066661a0 100644 --- a/lib/web/static_test.go +++ b/lib/web/static_test.go @@ -33,7 +33,7 @@ type StaticSuite struct { var _ = check.Suite(&StaticSuite{}) func (s *StaticSuite) SetUpSuite(c *check.C) { - debugAssetsPath = "../../web/dist" + debugAssetsPath = "../../webassets/teleport" } func (s *StaticSuite) TestDebugModeEnv(c *check.C) { diff --git a/lib/web/ui/cluster.go b/lib/web/ui/cluster.go index 953da9e5349..6122d64f62d 100644 --- a/lib/web/ui/cluster.go +++ b/lib/web/ui/cluster.go @@ -20,7 +20,12 @@ import ( "sort" "time" + "github.com/gravitational/teleport" + "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/reversetunnel" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/trace" + "github.com/sirupsen/logrus" ) // Cluster describes a cluster @@ -28,39 +33,78 @@ type Cluster struct { // Name is the cluster name Name string `json:"name"` // LastConnected is the cluster last connected time - LastConnected time.Time `json:"last_connected"` + LastConnected time.Time `json:"lastConnected"` // Status is the cluster status Status string `json:"status"` + // NodeCount is this cluster number of registered servers + NodeCount int `json:"nodeCount"` + // PublicURL is this cluster public URL (its first available proxy URL) + PublicURL string `json:"publicURL"` + // AuthVersion is the cluster auth's service version + AuthVersion string `json:"authVersion"` + // ProxyVersion is the cluster proxy's service version + ProxyVersion string `json:"proxyVersion"` } -// AvailableClusters describes all available clusters -type AvailableClusters struct { - // Current describes current cluster - Current Cluster `json:"current"` - // Trusted describes trusted clusters - Trusted []Cluster `json:"trusted"` -} +var log = logrus.WithFields(logrus.Fields{ + trace.Component: teleport.ComponentProxy, +}) -// NewAvailableClusters returns all available clusters -func NewAvailableClusters(currentClusterName string, remoteClusters []reversetunnel.RemoteSite) *AvailableClusters { - out := AvailableClusters{} - for _, item := range remoteClusters { - cluster := Cluster{ - Name: item.GetName(), - LastConnected: item.GetLastConnected(), - Status: item.GetStatus(), +// NewClusters creates a slice of Cluster's, containing data about each cluster. +func NewClusters(remoteClusters []reversetunnel.RemoteSite) ([]Cluster, error) { + clusters := []Cluster{} + for _, site := range remoteClusters { + cluster, err := GetClusterDetails(site) + if err != nil { + return nil, trace.Wrap(err) } - if item.GetName() == currentClusterName { - out.Current = cluster - } else { - out.Trusted = append(out.Trusted, cluster) - } + clusters = append(clusters, *cluster) } - sort.Slice(out.Trusted, func(i, j int) bool { - return out.Trusted[i].Name < out.Trusted[j].Name + sort.Slice(clusters, func(i, j int) bool { + return clusters[i].Name < clusters[j].Name }) - return &out + return clusters, nil +} + +// GetClusterDetails retrieves and sets details about a cluster +func GetClusterDetails(site reversetunnel.RemoteSite) (*Cluster, error) { + clt, err := site.CachingAccessPoint() + if err != nil { + return nil, trace.Wrap(err) + } + + nodes, err := clt.GetNodes(defaults.Namespace) + if err != nil { + return nil, trace.Wrap(err) + } + + proxies, err := clt.GetProxies() + if err != nil { + return nil, trace.Wrap(err) + } + proxyHost, proxyVersion := services.GuessProxyHostAndVersion(proxies) + + authServers, err := clt.GetAuthServers() + if err != nil { + return nil, trace.Wrap(err) + } + + authVersion := "" + if len(authServers) > 0 { + // use the first auth server + authVersion = authServers[0].GetTeleportVersion() + } + + return &Cluster{ + Name: site.GetName(), + LastConnected: site.GetLastConnected(), + Status: site.GetStatus(), + NodeCount: len(nodes), + PublicURL: proxyHost, + AuthVersion: authVersion, + ProxyVersion: proxyVersion, + }, nil } diff --git a/web/src/app/features/index.js b/lib/web/ui/resetpasswordtoken.go similarity index 52% rename from web/src/app/features/index.js rename to lib/web/ui/resetpasswordtoken.go index e40ec640586..7ba3fced551 100644 --- a/web/src/app/features/index.js +++ b/lib/web/ui/resetpasswordtoken.go @@ -1,5 +1,5 @@ /* -Copyright 2015 Gravitational, Inc. +Copyright 2020 Gravitational, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,13 +14,20 @@ See the License for the specific language governing permissions and limitations under the License. */ -import Ssh from './featureSsh'; -import Audit from './featureAudit'; -import Settings from './settings/featureSettings.js'; +package ui -export { - Ssh, - Audit, - Settings +import "time" + +// ResetPasswordToken describes ResetPasswordToken UI object +type ResetPasswordToken struct { + // TokenID is token ID + TokenID string `json:"tokenId"` + // User is user name associated with this token + User string `json:"user"` + // QRCode is a QR code value + QRCode []byte `json:"qrCode,omitempty"` + // URL is token URL + URL string `json:"url,omitempty"` + // Expiry is token expiration time + Expiry time.Time `json:"expiry,omitempty"` } - diff --git a/lib/web/ui/usercontext.go b/lib/web/ui/usercontext.go index e56d8131d46..dd074ac4eff 100644 --- a/lib/web/ui/usercontext.go +++ b/lib/web/ui/usercontext.go @@ -17,7 +17,6 @@ limitations under the License. package ui import ( - "github.com/gravitational/teleport" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/utils" @@ -58,8 +57,8 @@ type userContext struct { Name string `json:"userName"` // ACL contains user access control list ACL userACL `json:"userAcl"` - // Version is the version of Teleport that is running. - Version string `json:"version"` + // Cluster contains cluster detail for this user's context + Cluster *Cluster `json:"cluster"` } func getLogins(roleSet services.RoleSet) []string { @@ -106,7 +105,7 @@ func newAccess(roleSet services.RoleSet, ctx *services.Context, kind string) acc } } -// NewUserContext constructs user context from roles assigned to user +// NewUserContext returns user context func NewUserContext(user services.User, userRoles services.RoleSet) (*userContext, error) { ctx := &services.Context{User: user} sessionAccess := newAccess(userRoles, ctx, services.KindSession) @@ -140,6 +139,5 @@ func NewUserContext(user services.User, userRoles services.RoleSet) (*userContex Name: user.GetName(), ACL: acl, AuthType: authType, - Version: teleport.Version, }, nil } diff --git a/lib/web/ui/webconfig.go b/lib/web/ui/webconfig.go index 916ea6411ae..d772d7c897e 100644 --- a/lib/web/ui/webconfig.go +++ b/lib/web/ui/webconfig.go @@ -39,6 +39,8 @@ type WebConfig struct { Auth WebConfigAuthSettings `json:"auth,omitempty"` // CanJoinSessions disables joining sessions CanJoinSessions bool `json:"canJoinSessions"` + // ProxyClusterName is the name of the local cluster + ProxyClusterName string `json:"proxyCluster,omitempty"` } // WebConfigAuthProvider describes auth. provider @@ -59,4 +61,6 @@ type WebConfigAuthSettings struct { SecondFactor string `json:"second_factor,omitempty"` // Providers contains a list of configured auth providers Providers []WebConfigAuthProvider `json:"providers,omitempty"` + // LocalAuthEnabled is a flag that enables local authentication + LocalAuthEnabled bool `json:"localAuthEnabled"` } diff --git a/lib/wrappers/wrappers.pb.go b/lib/wrappers/wrappers.pb.go index 1f0e838fe99..89efb76a9d0 100644 --- a/lib/wrappers/wrappers.pb.go +++ b/lib/wrappers/wrappers.pb.go @@ -33,7 +33,7 @@ func (m *StringValues) Reset() { *m = StringValues{} } func (m *StringValues) String() string { return proto.CompactTextString(m) } func (*StringValues) ProtoMessage() {} func (*StringValues) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_b4e6428cd870cf3a, []int{0} + return fileDescriptor_wrappers_27e842bc8bd4b60d, []int{0} } func (m *StringValues) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -76,7 +76,7 @@ func (m *LabelValues) Reset() { *m = LabelValues{} } func (m *LabelValues) String() string { return proto.CompactTextString(m) } func (*LabelValues) ProtoMessage() {} func (*LabelValues) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_b4e6428cd870cf3a, []int{1} + return fileDescriptor_wrappers_27e842bc8bd4b60d, []int{1} } func (m *LabelValues) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -607,9 +607,9 @@ var ( ErrIntOverflowWrappers = fmt.Errorf("proto: integer overflow") ) -func init() { proto.RegisterFile("wrappers.proto", fileDescriptor_wrappers_b4e6428cd870cf3a) } +func init() { proto.RegisterFile("wrappers.proto", fileDescriptor_wrappers_27e842bc8bd4b60d) } -var fileDescriptor_wrappers_b4e6428cd870cf3a = []byte{ +var fileDescriptor_wrappers_27e842bc8bd4b60d = []byte{ // 211 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0x2f, 0x4a, 0x2c, 0x28, 0x48, 0x2d, 0x2a, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x80, 0xf1, 0xa5, 0x44, diff --git a/lib/wrappers/wrappers.proto b/lib/wrappers/wrappers.proto index a784878043d..e4abc8a0d1a 100644 --- a/lib/wrappers/wrappers.proto +++ b/lib/wrappers/wrappers.proto @@ -7,15 +7,13 @@ option (gogoproto.marshaler_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.goproto_getters_all) = false; - // StringValues is a list of strings. -message StringValues { - repeated string Values = 1; -} +message StringValues { repeated string Values = 1; } // LabelValues is a list of key value pairs, where key is a string // and value is a list of string values. message LabelValues { // Values contains key value pairs. - map Values = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "labels"]; + map Values = 1 + [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "labels" ]; } diff --git a/roles.go b/roles.go index 9050fb27c6d..bc03f6f3f02 100644 --- a/roles.go +++ b/roles.go @@ -144,7 +144,7 @@ func (r *Role) Set(v string) error { func (r *Role) String() string { switch string(*r) { case string(RoleSignup): - return "User signup" + return "Password" case string(RoleTrustedCluster), string(LegacyClusterTokenType): return "trusted_cluster" default: diff --git a/tool/tctl/common/user_command.go b/tool/tctl/common/user_command.go index 224892d4ef1..889be55358c 100644 --- a/tool/tctl/common/user_command.go +++ b/tool/tctl/common/user_command.go @@ -17,8 +17,10 @@ limitations under the License. package common import ( + "context" "encoding/json" "fmt" + "net/url" "strings" "time" @@ -29,7 +31,6 @@ import ( "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/service" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/web" "github.com/gravitational/trace" ) @@ -46,25 +47,28 @@ type UserCommand struct { // format is the output format, e.g. text or json format string - userAdd *kingpin.CmdClause - userUpdate *kingpin.CmdClause - userList *kingpin.CmdClause - userDelete *kingpin.CmdClause + userAdd *kingpin.CmdClause + userUpdate *kingpin.CmdClause + userList *kingpin.CmdClause + userDelete *kingpin.CmdClause + userResetPassword *kingpin.CmdClause } // Initialize allows UserCommand to plug itself into the CLI parser func (u *UserCommand) Initialize(app *kingpin.Application, config *service.Config) { + const helpPrefix string = "[Teleport DB users only]" + u.config = config users := app.Command("users", "Manage user accounts") - u.userAdd = users.Command("add", "Generate a user invitation token") + u.userAdd = users.Command("add", "Generate a user invitation token "+helpPrefix) u.userAdd.Arg("account", "Teleport user account name").Required().StringVar(&u.login) u.userAdd.Arg("local-logins", "Local UNIX users this account can log in as [login]"). Default("").StringVar(&u.allowedLogins) u.userAdd.Flag("k8s-groups", "Kubernetes groups to assign to a user."). Default("").StringVar(&u.kubeGroups) - u.userAdd.Flag("ttl", fmt.Sprintf("Set expiration time for token, default is %v hour, maximum is %v hours", - int(defaults.SignupTokenTTL/time.Hour), int(defaults.MaxSignupTokenTTL/time.Hour))). + u.userAdd.Flag("ttl", fmt.Sprintf("Set expiration time for token, default is %v, maximum is %v", + defaults.SignupTokenTTL, defaults.MaxSignupTokenTTL)). Default(fmt.Sprintf("%v", defaults.SignupTokenTTL)).DurationVar(&u.ttl) u.userAdd.Flag("format", "Output format, 'text' or 'json'").Hidden().Default(teleport.Text).StringVar(&u.format) u.userAdd.Alias(AddUserHelp) @@ -74,12 +78,19 @@ func (u *UserCommand) Initialize(app *kingpin.Application, config *service.Confi u.userUpdate.Flag("set-roles", "Roles to assign to this user"). Default("").StringVar(&u.roles) - u.userList = users.Command("ls", "List all user accounts") + u.userList = users.Command("ls", "List all user accounts "+helpPrefix) u.userList.Flag("format", "Output format, 'text' or 'json'").Hidden().Default(teleport.Text).StringVar(&u.format) u.userDelete = users.Command("rm", "Deletes user accounts").Alias("del") u.userDelete.Arg("logins", "Comma-separated list of user logins to delete"). Required().StringVar(&u.login) + + u.userResetPassword = users.Command("reset", "Reset user password and generate a new token "+helpPrefix) + u.userResetPassword.Arg("account", "Teleport user account name").Required().StringVar(&u.login) + u.userResetPassword.Flag("ttl", fmt.Sprintf("Set expiration time for token, default is %v, maximum is %v", + defaults.ChangePasswordTokenTTL, defaults.MaxChangePasswordTokenTTL)). + Default(fmt.Sprintf("%v", defaults.ChangePasswordTokenTTL)).DurationVar(&u.ttl) + u.userResetPassword.Flag("format", "Output format, 'text' or 'json'").Hidden().Default(teleport.Text).StringVar(&u.format) } // TryRun takes the CLI command as an argument (like "users add") and executes it. @@ -93,12 +104,80 @@ func (u *UserCommand) TryRun(cmd string, client auth.ClientI) (match bool, err e err = u.List(client) case u.userDelete.FullCommand(): err = u.Delete(client) + case u.userResetPassword.FullCommand(): + err = u.ResetPassword(client) default: return false, nil } return true, trace.Wrap(err) } +// ResetPassword resets user password and generates a token to setup new password +func (u *UserCommand) ResetPassword(client auth.ClientI) error { + req := auth.CreateResetPasswordTokenRequest{ + Name: u.login, + TTL: u.ttl, + Type: auth.ResetPasswordTokenTypePassword, + } + token, err := client.CreateResetPasswordToken(context.TODO(), req) + if err != nil { + return err + } + + err = u.PrintResetPasswordToken(token, u.format) + if err != nil { + return trace.Wrap(err) + } + + return nil +} + +// PrintResetPasswordToken prints ResetPasswordToken +func (u *UserCommand) PrintResetPasswordToken(token services.ResetPasswordToken, format string) error { + err := u.printResetPasswordToken(token, + format, + "User %v has been reset. Share this URL with the user to complete password reset, link is valid for %v:\n%v\n\n", + ) + + if err != nil { + return trace.Wrap(err) + } + + return nil +} + +// PrintResetPasswordTokenAsInvite prints ResetPasswordToken as Invite +func (u *UserCommand) PrintResetPasswordTokenAsInvite(token services.ResetPasswordToken, format string) error { + err := u.printResetPasswordToken(token, + format, + "User %v has been created but requires a password. Share this URL with the user to complete user setup, link is valid for %v:\n%v\n\n") + if err != nil { + return trace.Wrap(err) + } + + return nil +} + +func (u *UserCommand) printResetPasswordToken(token services.ResetPasswordToken, format string, messageFormat string) error { + url, err := url.Parse(token.GetURL()) + if err != nil { + return trace.Wrap(err) + } + + if format == teleport.Text { + ttl := token.Expiry().Sub(time.Now().UTC()).Round(time.Second) + fmt.Printf(messageFormat, token.GetUser(), ttl, url) + fmt.Printf("NOTE: Make sure %v points at a Teleport proxy which users can access.\n", url.Host) + } else if u.format == teleport.JSON { + err := printTokenAsJSON(token) + if err != nil { + return trace.Wrap(err) + } + } + + return nil +} + // Add creates a new sign-up token and prints a token URL to stdout. // A user is not created until he visits the sign-up URL and completes the process func (u *UserCommand) Add(client auth.ClientI) error { @@ -110,35 +189,55 @@ func (u *UserCommand) Add(client auth.ClientI) error { if u.kubeGroups != "" { kubeGroups = strings.Split(u.kubeGroups, ",") } - user := services.UserV1{ - Name: u.login, - AllowedLogins: strings.Split(u.allowedLogins, ","), - KubeGroups: kubeGroups, + + // make sure that user does not exist + _, err := client.GetUser(u.login, false) + if err == nil { + if err == nil { + return trace.BadParameter("user(%v) already registered", u.login) + } } - token, err := client.CreateSignupToken(user, u.ttl) + + user, err := services.NewUser(u.login) + if err != nil { + return trace.Wrap(err) + } + + traits := map[string][]string{ + teleport.TraitLogins: strings.Split(u.allowedLogins, ","), + teleport.TraitKubeGroups: kubeGroups, + } + + user.SetTraits(traits) + user.AddRole(teleport.AdminRoleName) + err = client.UpsertUser(user) + if err != nil { + return trace.Wrap(err) + } + + token, err := client.CreateResetPasswordToken(context.TODO(), auth.CreateResetPasswordTokenRequest{ + Name: u.login, + TTL: u.ttl, + Type: auth.ResetPasswordTokenTypeInvite, + }) if err != nil { return err } - // try to auto-suggest the activation link - return u.PrintSignupURL(client, token, u.ttl, u.format) + err = u.PrintResetPasswordTokenAsInvite(token, u.format) + if err != nil { + return err + } + + return nil } -// PrintSignupURL prints signup URL -func (u *UserCommand) PrintSignupURL(client auth.ClientI, token string, ttl time.Duration, format string) error { - signupURL, proxyHost := web.CreateSignupLink(client, token) - - if format == teleport.Text { - fmt.Printf("Signup token has been created and is valid for %v hours. Share this URL with the user:\n%v\n\n", - int(ttl/time.Hour), signupURL) - fmt.Printf("NOTE: Make sure %v points at a Teleport proxy which users can access.\n", proxyHost) - } else { - out, err := json.MarshalIndent(services.NewInviteToken(token, signupURL, time.Now().Add(ttl).UTC()), "", " ") - if err != nil { - return trace.Wrap(err, "failed to marshal signup infos") - } - fmt.Printf(string(out)) +func printTokenAsJSON(token services.ResetPasswordToken) error { + out, err := json.MarshalIndent(token, "", " ") + if err != nil { + return trace.Wrap(err, "failed to marshal reset password token") } + fmt.Printf(string(out)) return nil } diff --git a/web/.dockerignore b/web/.dockerignore deleted file mode 100644 index 9012bb2cf9e..00000000000 --- a/web/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -dist -*/**/.git diff --git a/web/.eslintrc b/web/.eslintrc deleted file mode 100644 index d276a2b13cf..00000000000 --- a/web/.eslintrc +++ /dev/null @@ -1,62 +0,0 @@ -{ - "parser": "babel-eslint", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module", - "ecmaFeatures": { - "jsx": true, - "experimentalObjectRestSpread": true - } - }, - "env": { - "es6": true, - "browser": true, - "node": true, - "mocha": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings" - ], - "plugins": [ - "react", - "babel", - "import" - ], - - "rules": { - "comma-dangle": 0, - "no-mixed-spaces-and-tabs": 0, - "no-alert": 0, - "import/default": 2, - "import/named": 2, - "import/no-unresolved": 2, - "no-underscore-dangle": 0, - "no-case-declarations": 0, - "strict": 0, - "no-console": 1, - "no-trailing-spaces": 0, - "react/display-name": 0, - "react/jsx-no-undef": 2, - "react/jsx-sort-prop-types": 0, - "react/jsx-sort-props": 0, - "react/jsx-uses-react": 1, - "react/jsx-uses-vars": 1, - "react/no-did-mount-set-state": 1, - "react/no-did-update-set-state": 1, - "react/no-unknown-property": 1, - "react/prop-types": 0, - "react/react-in-jsx-scope": 1, - "react/self-closing-comp": 0, - "react/sort-comp": 0, - "react/jsx-wrap-multilines": 1 - }, - "settings": { - "import/resolver": { - "webpack": { - "config": "webpack/webpack.dev.config.js" - } - } - } -} diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index 86735c0a14e..00000000000 --- a/web/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -dist/**/*.map -*.log diff --git a/web/Dockerfile b/web/Dockerfile deleted file mode 100644 index 418c6668721..00000000000 --- a/web/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM node:8.11.2-slim - -# Fixes jessie repository -RUN sed -i '/jessie-updates/d' /etc/apt/sources.list - -RUN apt-get update && apt-get install git -y && apt-get install -y python python-dev python-pip - -RUN npm i npm@6.4.1 -g - -# prepare to install only package.json dependencies -RUN mkdir -p /app -COPY package*.json /app/ - -# copy the rest of the app files -WORKDIR /app -RUN npm install -COPY . /app - -# and build -RUN npm run build \ No newline at end of file diff --git a/web/Makefile b/web/Makefile deleted file mode 100644 index 24d48cb3b36..00000000000 --- a/web/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -LOCALDIR := $(dir $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) -REPO_VER_TAG := $(shell git describe --tags --abbrev=8) -CONTAINER_DIST_DIR=/app/dist -# Need unique names to allow parallel jenkins builds -CONTAINER_NAME := teleport-web-container-$(REPO_VER_TAG)-$(shell bash -c 'echo $$RANDOM') -IMAGE_NAME := teleport-web:1.0.0 - -HOST_DIR="$$(pwd)" -#HOST_TMP_VOL:= $(shell mktemp -d) - -.PHONY:all -all: docker-build - -############################## -# Docker Targets -############################## - -# -# Builds dist files -# -.PHONY:docker-build -docker-build: - rm -rf $(HOST_DIR)/dist - docker build --force-rm=true -t $(IMAGE_NAME) . - docker create --name $(CONTAINER_NAME) -t $(IMAGE_NAME) && \ - docker cp $(CONTAINER_NAME):$(CONTAINER_DIST_DIR) $(HOST_DIR) - docker rm $(CONTAINER_NAME) | true - -# -# Removes the local Docker container -# -.PHONY: docker-clean -docker-clean: - docker rmi --force $(IMAGE_NAME) - -# -# 'make docker-enter' builds a Docker container with a website -# -.PHONY:docker-enter -docker-enter: - docker run -ti --rm=true -t $(IMAGE_NAME) /bin/bash - -############################## -# Native Localhost -############################## - -# -# locally installs npm packages and builds -# -.PHONY:local -local: npm install - npm run build - -# -# 'make run' starts a local debugging environment -# -.PHONY:run -run: - npm run start - -.PHONY:clean -clean: - rm -rf dist - rm -rf node_modules diff --git a/web/README.md b/web/README.md deleted file mode 100644 index f4367fe93ff..00000000000 --- a/web/README.md +++ /dev/null @@ -1,13 +0,0 @@ -## web client - -To build and generate a new /dist - -1. `install nodejs >= 8.0.0` -2. `$ npm install` -3. `$ npm run build` - -To run a dev server - -1. `$ npm run start -- --proxy=https://host:port` -2. `open https://localhost:8081/web` - diff --git a/web/devServer.js b/web/devServer.js deleted file mode 100644 index b98b7dfd111..00000000000 --- a/web/devServer.js +++ /dev/null @@ -1,138 +0,0 @@ -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var fs = require('fs'); -var uri = require('url'); -var WebpackDevServer = require("webpack-dev-server"); -var webpackConfig = require('./webpack/webpack.dev.config.js'); -var webpack = require('webpack'); -var proxy = require('http-proxy').createProxyServer(); -var changeProxyResponse = require('./devServerUtils'); - -// parse target URL -var argv = require('optimist') - .usage('Usage: $0 -proxy [url]') - .demand(['proxy']) - .argv; - -var urlObj = uri.parse(argv.proxy) - -if (!urlObj.host) { - console.error('invalid URL: ' + argv.proxy); - return; -} - -var PROXY_TARGET = urlObj.host; -var ROOT = '/web'; -var PORT = '8081'; -var WEBPACK_CLIENT_ENTRY = 'webpack-dev-server/client?https://0.0.0.0:' + PORT; -var WEBPACK_SRV_ENTRY = 'webpack/hot/only-dev-server'; - -for (var prop in webpackConfig.entry) { - webpackConfig.entry[prop].unshift('react-hot-loader/patch'); - webpackConfig.entry[prop].unshift(WEBPACK_CLIENT_ENTRY, WEBPACK_SRV_ENTRY); -} - -function getTargetOptions() { - return { - target: "https://"+PROXY_TARGET, - secure: false, - changeOrigin: true, - xfwd: true - } -} - -var compiler = webpack(webpackConfig); - -var server = new WebpackDevServer(compiler, { - proxy:{ - '/web/config.js': getTargetOptions(), - '/v1/webapi/*': getTargetOptions(), - '/v1/enterprise/*': getTargetOptions() - }, - publicPath: ROOT +'/app', - hot: true, - disableHostCheck: true, - https: true, - inline: true, - headers: { 'X-Custom-Header': 'yes' }, - //stats: { colors: true }, - stats: 'errors-only' -}); - -// tell webpack dev server to proxy below sockets requests to actual server -server.listeningApp.on('upgrade', function(req, socket) { - //if (req.url.match('/v1/webapi/sites')) { - console.log('proxying ws', req.url); - proxy.ws(req, socket, { - target: 'wss://' + PROXY_TARGET, - secure: false - }); - //} -}); - -var htmlToSend = fs.readFileSync(__dirname + "//dist//index.html", 'utf8') - -// to enable Hot Module Reload we need to serve local index.html. -// since local index.html has no embeded TOKEN, we need to: -// 1) make a proxy request -// 2) modify proxy response by replacing server index.html with the local -// 3) insert embeded by server token into the local -server.app.use(changeProxyResponse( - (req, res) => { - // return true if you want to modify the response later - var contentType = res.getHeader('Content-Type'); - if (contentType && contentType.startsWith('text/html')) { - return true; - } - - return false; - }, - (req, res, body) => { - // body is a Buffer with the current response; return Buffer or string with the modified response - // can also return a Promise. - var str = body.toString(); - res.set({ - 'content-security-policy': "" - }) - - var htmlWithTokens = htmlToSend; - htmlWithTokens = replaceToken(new RegExp(//), str, htmlWithTokens); - htmlWithTokens = replaceToken(new RegExp(//), str, htmlWithTokens); - return htmlWithTokens; - } -)); - -function serveHTML() { - return function (req, res) { - proxy.web(req, res, getTargetOptions()); - } -} - -server.app.get(ROOT +'/*', serveHTML()); -server.app.get(ROOT, serveHTML()); - -server.listen(PORT, "0.0.0.0", function() { - console.log('Dev Server is up and running: https://localhost:' + PORT + '/web/'); -}); - -function replaceToken(regex, takeFrom, insertTo){ - var value = takeFrom.match(regex); - if(value){ - return insertTo.replace(regex, value[0]); - } - return insertTo; -} diff --git a/web/devServerUtils.js b/web/devServerUtils.js deleted file mode 100644 index 5a17c304ab6..00000000000 --- a/web/devServerUtils.js +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// -// taken and modified from https://github.com/mo22/express-modify-response -// -module.exports = function expressModifyResponse(checkCallback, modifyCallback) { - return function expressModifyResponse(req, res, next) { - var _end = res.end; - var _write = res.write; - var checked = false; - var buffers = []; - var addBuffer = (chunk, encoding) => { - if (chunk === undefined) - return; - if (typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding); - } - buffers.push(chunk); - }; - - var _writeHead = res.writeHead; - - res.writeHead = function () { - // writeHead supports (statusCode, headers) as well as (statusCode, - // statusMessage, headers) - var headers = (arguments.length > 2) - ? arguments[2] - : arguments[1]; - var contentType = this.getHeader('content-type'); - - if ((typeof contentType != 'undefined') && (contentType.indexOf('text/html') == 0)) { - res.isHtml = true; - - // Strip off the content length since it will change. - res.removeHeader('Content-Length'); - - if (headers) { - delete headers['content-length']; - } - } - - _writeHead.apply(res, arguments); - }; - - res.write = function write(chunk, encoding) { - if (!checked) { - checked = true; - var hook = checkCallback(req, res); - if (!hook) { - res.end = _end; - res.write = _write; - return res.write(chunk, encoding); - } else { - addBuffer(chunk, encoding); - } - } else { - addBuffer(chunk, encoding); - } - }; - - res.end = function end(chunk, encoding) { - if (!checked) { - checked = true; - var hook = checkCallback(req, res); - if (!hook) { - res.end = _end; - res.write = _write; - return res.end(chunk, encoding); - } else { - addBuffer(chunk, encoding); - } - } else { - addBuffer(chunk, encoding); - } - var buffer = Buffer.concat(buffers); - - Promise - .resolve(modifyCallback(req, res, buffer)) - .then((result) => { - if (typeof result === 'string') { - result = new Buffer(result, 'utf-8'); - } - - if (res.getHeader('Content-Length')) { - res.setHeader('Content-Length', String(result.length)); - } - res.end = _end; - res.write = _write; - res.write(result); - res.end(); - }) - .catch((e) => { - // handle? - next(e); - }); - }; - - next(); - } -} \ No newline at end of file diff --git a/web/dist/app/app.58735cf75c867a30fb27.js b/web/dist/app/app.58735cf75c867a30fb27.js deleted file mode 100644 index c92dc6cbe93..00000000000 --- a/web/dist/app/app.58735cf75c867a30fb27.js +++ /dev/null @@ -1,14061 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 0: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "/web/app"; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([0,1]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 0: -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__("rVcD"); - - -/***/ }), - -/***/ "7WIf": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - -/***/ "BBHA": -/***/ (function(module, exports, __webpack_require__) { - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -module.exports.getters = __webpack_require__("F+qq"); -module.exports.actions = __webpack_require__("VW/0"); - -/***/ }), - -/***/ "CtRu": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export fetchStoredSession */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return fetchSiteEvents; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return fetchActiveSessions; }); -/* harmony import */ var app_reactor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("xSHT"); -/* harmony import */ var app_services_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("Z9Rw"); -/* harmony import */ var app_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("LMli"); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("wd/R"); -/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var app_flux_app_getters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("i3tb"); -/* harmony import */ var app_lib_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("lZJN"); -/* harmony import */ var _actionTypes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("zMbK"); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - -var logger = app_lib_logger__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].create('Modules/Sessions'); - -function fetchStoredSession(sid, siteId) { - siteId = siteId || app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].evaluate(app_flux_app_getters__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].siteId); - return app_services_api__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].get(app_config__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].api.getSessionEventsUrl({ siteId: siteId, sid: sid })).then(function (json) { - if (json && json.events) { - app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].dispatch(_actionTypes__WEBPACK_IMPORTED_MODULE_6__[/* RECEIVE_SITE_EVENTS */ "b"], { siteId: siteId, json: json.events }); - } - }); -} - -function fetchSiteEvents(start, end) { - // default values - start = start || moment__WEBPACK_IMPORTED_MODULE_3___default()(new Date()).endOf('day').toDate(); - end = end || moment__WEBPACK_IMPORTED_MODULE_3___default()(end).subtract(3, 'day').startOf('day').toDate(); - - start = start.toISOString(); - end = end.toISOString(); - - var siteId = app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].evaluate(app_flux_app_getters__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].siteId); - return app_services_api__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].get(app_config__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].api.getSiteEventsFilterUrl({ start: start, end: end, siteId: siteId })).done(function (json) { - if (json && json.events) { - app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].dispatch(_actionTypes__WEBPACK_IMPORTED_MODULE_6__[/* RECEIVE_SITE_EVENTS */ "b"], { siteId: siteId, json: json.events }); - } - }).fail(function (err) { - logger.error('fetchSiteEvents', err); - }); -} - -function fetchActiveSessions() { - var siteId = app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].evaluate(app_flux_app_getters__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].siteId); - return app_services_api__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].get(app_config__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].api.getFetchSessionsUrl(siteId)).done(function (json) { - var sessions = json.sessions || []; - app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].dispatch(_actionTypes__WEBPACK_IMPORTED_MODULE_6__[/* RECEIVE_ACTIVE_SESSIONS */ "a"], { siteId: siteId, json: sessions }); - }).fail(function (err) { - logger.error('fetchActiveSessions', err); - }); -} - -/***/ }), - -/***/ "F+qq": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var filter = [['tlpt_sessions_filter'], function (filter) { - return filter.toJS(); -}]; - -/* harmony default export */ __webpack_exports__["default"] = ({ - filter: filter -}); - -/***/ }), - -/***/ "KdfW": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return KeysEnum; }); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var KeysEnum = { - TOKEN: 'grv_teleport_token', - TOKEN_RENEW: 'grv_teleport_token_renew' -}; - -var storage = { - clear: function clear() { - window.localStorage.clear(); - }, - subscribe: function subscribe(fn) { - window.addEventListener('storage', fn); - }, - unsubscribe: function unsubscribe(fn) { - window.removeEventListener('storage', fn); - }, - setBearerToken: function setBearerToken(token) { - window.localStorage.setItem(KeysEnum.TOKEN, JSON.stringify(token)); - }, - getBearerToken: function getBearerToken() { - var item = window.localStorage.getItem(KeysEnum.TOKEN); - if (item) { - return JSON.parse(item); - } - - return null; - }, - broadcast: function broadcast(messageType, messageBody) { - window.localStorage.setItem(messageType, messageBody); - window.localStorage.removeItem(messageType); - } -}; - -/* harmony default export */ __webpack_exports__["b"] = (storage); - -/***/ }), - -/***/ "LMli": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("cIpc"); -/* harmony import */ var jQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("K5fH"); -/* harmony import */ var jQuery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jQuery__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _services_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("gOk0"); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var baseUrl = Object(_services_utils__WEBPACK_IMPORTED_MODULE_2__[/* isTestEnv */ "a"])() ? 'localhost' : window.location.origin; - -var cfg = { - - baseUrl: baseUrl, - - helpUrl: 'https://gravitational.com/teleport/docs/quickstart/', - - maxSessionLoadSize: 50, - - displayDateFormat: 'MM/DD/YYYY HH:mm:ss', - - auth: {}, - - canJoinSessions: true, - - routes: { - app: '/web', - login: '/web/login', - nodes: '/web/nodes', - currentSession: '/web/cluster/:siteId/sessions/:sid', - sessions: '/web/sessions', - newUser: '/web/newuser/:inviteToken', - error: '/web/msg/error(/:type)', - info: '/web/msg/info(/:type)', - pageNotFound: '/web/notfound', - terminal: '/web/cluster/:siteId/node/:serverId/:login(/:sid)', - player: '/web/player/cluster/:siteId/sid/:sid', - webApi: '/v1/webapi/*', - settingsBase: '/web/settings', - settingsAccount: '/web/settings/account' - }, - - api: { - scp: '/v1/webapi/sites/:siteId/nodes/:serverId/:login/scp?location=:location&filename=:filename', - ssoOidc: '/v1/webapi/oidc/login/web?redirect_url=:redirect&connector_id=:providerName', - ssoSaml: '/v1/webapi/saml/sso?redirect_url=:redirect&connector_id=:providerName', - renewTokenPath: '/v1/webapi/sessions/renew', - sessionPath: '/v1/webapi/sessions', - userContextPath: '/v1/webapi/user/context', - userStatusPath: '/v1/webapi/user/status', - invitePath: '/v1/webapi/users/invites/:inviteToken', - createUserPath: '/v1/webapi/users', - changeUserPasswordPath: '/v1/webapi/users/password', - u2fCreateUserChallengePath: '/v1/webapi/u2f/signuptokens/:inviteToken', - u2fCreateUserPath: '/v1/webapi/u2f/users', - u2fSessionChallengePath: '/v1/webapi/u2f/signrequest', - u2fChangePassChallengePath: '/v1/webapi/u2f/password/changerequest', - u2fChangePassPath: '/v1/webapi/u2f/password', - u2fSessionPath: '/v1/webapi/u2f/sessions', - sitesBasePath: '/v1/webapi/sites', - sitePath: '/v1/webapi/sites/:siteId', - nodesPath: '/v1/webapi/sites/:siteId/nodes', - siteSessionPath: '/v1/webapi/sites/:siteId/sessions', - sessionEventsPath: '/v1/webapi/sites/:siteId/sessions/:sid/events', - siteEventSessionFilterPath: '/v1/webapi/sites/:siteId/sessions', - siteEventsFilterPath: '/v1/webapi/sites/:siteId/events?event=session.start&event=session.end&from=:start&to=:end', - ttyWsAddr: ':fqdm/v1/webapi/sites/:cluster/connect?access_token=:token¶ms=:params', - - getSiteUrl: function getSiteUrl(siteId) { - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.sitePath, { siteId: siteId }); - }, - getSiteNodesUrl: function getSiteNodesUrl() { - var siteId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '-current-'; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.nodesPath, { siteId: siteId }); - }, - getSiteSessionUrl: function getSiteSessionUrl() { - var siteId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '-current-'; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.siteSessionPath, { siteId: siteId }); - }, - getSsoUrl: function getSsoUrl(providerUrl, providerName, redirect) { - return cfg.baseUrl + Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(providerUrl, { redirect: redirect, providerName: providerName }); - }, - getSiteEventsFilterUrl: function getSiteEventsFilterUrl(_ref) { - var start = _ref.start, - end = _ref.end, - siteId = _ref.siteId; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.siteEventsFilterPath, { start: start, end: end, siteId: siteId }); - }, - getSessionEventsUrl: function getSessionEventsUrl(_ref2) { - var sid = _ref2.sid, - siteId = _ref2.siteId; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.sessionEventsPath, { sid: sid, siteId: siteId }); - }, - getScpUrl: function getScpUrl(_ref3) { - var siteId = _ref3.siteId, - serverId = _ref3.serverId, - login = _ref3.login, - location = _ref3.location, - filename = _ref3.filename; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.scp, { siteId: siteId, serverId: serverId, login: login, location: location, filename: filename }); - }, - getFetchSessionsUrl: function getFetchSessionsUrl(siteId) { - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.siteEventSessionFilterPath, { siteId: siteId }); - }, - getFetchSessionUrl: function getFetchSessionUrl(_ref4) { - var sid = _ref4.sid, - siteId = _ref4.siteId; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.siteSessionPath + '/:sid', { sid: sid, siteId: siteId }); - }, - getInviteUrl: function getInviteUrl(inviteToken) { - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.invitePath, { inviteToken: inviteToken }); - }, - getU2fCreateUserChallengeUrl: function getU2fCreateUserChallengeUrl(inviteToken) { - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.api.u2fCreateUserChallengePath, { inviteToken: inviteToken }); - } - }, - - getPlayerUrl: function getPlayerUrl(_ref5) { - var siteId = _ref5.siteId, - sid = _ref5.sid; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.routes.player, { siteId: siteId, sid: sid }); - }, - getTerminalLoginUrl: function getTerminalLoginUrl(_ref6) { - var siteId = _ref6.siteId, - serverId = _ref6.serverId, - login = _ref6.login, - sid = _ref6.sid; - - if (!sid) { - var url = this.stripOptionalParams(cfg.routes.terminal); - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(url, { siteId: siteId, serverId: serverId, login: login }); - } - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.routes.terminal, { siteId: siteId, serverId: serverId, login: login, sid: sid }); - }, - getCurrentSessionRouteUrl: function getCurrentSessionRouteUrl(_ref7) { - var sid = _ref7.sid, - siteId = _ref7.siteId; - - return Object(app_lib_patternUtils__WEBPACK_IMPORTED_MODULE_0__[/* formatPattern */ "a"])(cfg.routes.currentSession, { sid: sid, siteId: siteId }); - }, - getAuthProviders: function getAuthProviders() { - return cfg.auth && cfg.auth.providers ? cfg.auth.providers : []; - }, - getAuth2faType: function getAuth2faType() { - return cfg.auth ? cfg.auth.second_factor : null; - }, - getU2fAppId: function getU2fAppId() { - return cfg.auth && cfg.auth.u2f ? cfg.auth.u2f.app_id : null; - }, - getWsHostName: function getWsHostName() { - var prefix = location.protocol === 'https:' ? 'wss://' : 'ws://'; - var hostport = location.hostname + (location.port ? ':' + location.port : ''); - return '' + prefix + hostport; - }, - init: function init() { - var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - jQuery__WEBPACK_IMPORTED_MODULE_1___default.a.extend(true, this, config); - }, - stripOptionalParams: function stripOptionalParams(pattern) { - return pattern.replace(/\(.*\)/, ''); - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (cfg); - -/***/ }), - -/***/ "LYgY": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return TRYING_TO_SIGN_UP; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return TRYING_TO_LOGIN; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FETCHING_INVITE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return TRYING_TO_INIT_APP; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return TRYING_TO_INIT_SETTINGS; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return TRYING_TO_CHANGE_PSW; }); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var TRYING_TO_SIGN_UP = 'TRYING_TO_SIGN_UP'; -var TRYING_TO_LOGIN = 'TRYING_TO_LOGIN'; -var FETCHING_INVITE = 'FETCHING_INVITE'; -var TRYING_TO_INIT_APP = 'TRYING_TO_INIT_APP'; -var TRYING_TO_INIT_SETTINGS = 'TRYING_TO_INIT_SETTINGS'; -var TRYING_TO_CHANGE_PSW = 'TRYING_TO_CHANGE_PSW'; - -/***/ }), - -/***/ "OcN7": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TLPT_STORED_SESSINS_FILTER_SET_RANGE; }); -/* unused harmony export TLPT_STORED_SESSINS_FILTER_SET_STATUS */ -/* unused harmony export TLPT_STORED_SESSINS_FILTER_RECEIVE_MORE */ -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var TLPT_STORED_SESSINS_FILTER_SET_RANGE = 'TLPT_STORED_SESSINS_FILTER_SET_RANGE'; -var TLPT_STORED_SESSINS_FILTER_SET_STATUS = 'TLPT_STORED_SESSINS_FILTER_SET_STATUS'; -var TLPT_STORED_SESSINS_FILTER_RECEIVE_MORE = 'TLPT_STORED_SESSINS_FILTER_RECEIVE_MORE'; - -/***/ }), - -/***/ "PVWJ": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TrackRec; }); -/* harmony import */ var nuclear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("L7e8"); -/* harmony import */ var nuclear_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(nuclear_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _actionTypes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("tGXY"); -/* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("JPcv"); -/* harmony import */ var immutable__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(immutable__WEBPACK_IMPORTED_MODULE_2__); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var TrackRec = new immutable__WEBPACK_IMPORTED_MODULE_2__["Record"]({ - isProcessing: false, - isFailed: false, - isSuccess: false, - message: '' -}); - -/* harmony default export */ __webpack_exports__["b"] = (Object(nuclear_js__WEBPACK_IMPORTED_MODULE_0__["Store"])({ - getInitialState: function getInitialState() { - return Object(nuclear_js__WEBPACK_IMPORTED_MODULE_0__["toImmutable"])({}); - }, - initialize: function initialize() { - this.on(_actionTypes__WEBPACK_IMPORTED_MODULE_1__[/* START */ "c"], start); - this.on(_actionTypes__WEBPACK_IMPORTED_MODULE_1__[/* FAIL */ "b"], fail); - this.on(_actionTypes__WEBPACK_IMPORTED_MODULE_1__[/* SUCCESS */ "d"], success); - this.on(_actionTypes__WEBPACK_IMPORTED_MODULE_1__[/* CLEAR */ "a"], clear); - } -})); - -function start(state, request) { - return state.set(request.type, new TrackRec({ isProcessing: true })); -} - -function fail(state, request) { - return state.set(request.type, new TrackRec({ isFailed: true, message: request.message })); -} - -function success(state, request) { - return state.set(request.type, new TrackRec({ isSuccess: true, message: request.message })); -} - -function clear(state, request) { - return state.set(request.type, new TrackRec()); -} - -/***/ }), - -/***/ "RnhZ": -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./af": "K/tc", - "./af.js": "K/tc", - "./ar": "jnO4", - "./ar-dz": "o1bE", - "./ar-dz.js": "o1bE", - "./ar-kw": "Qj4J", - "./ar-kw.js": "Qj4J", - "./ar-ly": "HP3h", - "./ar-ly.js": "HP3h", - "./ar-ma": "CoRJ", - "./ar-ma.js": "CoRJ", - "./ar-sa": "gjCT", - "./ar-sa.js": "gjCT", - "./ar-tn": "bYM6", - "./ar-tn.js": "bYM6", - "./ar.js": "jnO4", - "./az": "SFxW", - "./az.js": "SFxW", - "./be": "H8ED", - "./be.js": "H8ED", - "./bg": "hKrs", - "./bg.js": "hKrs", - "./bm": "p/rL", - "./bm.js": "p/rL", - "./bn": "kEOa", - "./bn.js": "kEOa", - "./bo": "0mo+", - "./bo.js": "0mo+", - "./br": "aIdf", - "./br.js": "aIdf", - "./bs": "JVSJ", - "./bs.js": "JVSJ", - "./ca": "1xZ4", - "./ca.js": "1xZ4", - "./cs": "PA2r", - "./cs.js": "PA2r", - "./cv": "A+xa", - "./cv.js": "A+xa", - "./cy": "l5ep", - "./cy.js": "l5ep", - "./da": "DxQv", - "./da.js": "DxQv", - "./de": "tGlX", - "./de-at": "s+uk", - "./de-at.js": "s+uk", - "./de-ch": "u3GI", - "./de-ch.js": "u3GI", - "./de.js": "tGlX", - "./dv": "WYrj", - "./dv.js": "WYrj", - "./el": "jUeY", - "./el.js": "jUeY", - "./en-au": "Dmvi", - "./en-au.js": "Dmvi", - "./en-ca": "OIYi", - "./en-ca.js": "OIYi", - "./en-gb": "Oaa7", - "./en-gb.js": "Oaa7", - "./en-ie": "4dOw", - "./en-ie.js": "4dOw", - "./en-nz": "b1Dy", - "./en-nz.js": "b1Dy", - "./eo": "Zduo", - "./eo.js": "Zduo", - "./es": "iYuL", - "./es-do": "CjzT", - "./es-do.js": "CjzT", - "./es-us": "Vclq", - "./es-us.js": "Vclq", - "./es.js": "iYuL", - "./et": "7BjC", - "./et.js": "7BjC", - "./eu": "D/JM", - "./eu.js": "D/JM", - "./fa": "jfSC", - "./fa.js": "jfSC", - "./fi": "gekB", - "./fi.js": "gekB", - "./fo": "ByF4", - "./fo.js": "ByF4", - "./fr": "nyYc", - "./fr-ca": "2fjn", - "./fr-ca.js": "2fjn", - "./fr-ch": "Dkky", - "./fr-ch.js": "Dkky", - "./fr.js": "nyYc", - "./fy": "cRix", - "./fy.js": "cRix", - "./gd": "9rRi", - "./gd.js": "9rRi", - "./gl": "iEDd", - "./gl.js": "iEDd", - "./gom-latn": "DKr+", - "./gom-latn.js": "DKr+", - "./gu": "4MV3", - "./gu.js": "4MV3", - "./he": "x6pH", - "./he.js": "x6pH", - "./hi": "3E1r", - "./hi.js": "3E1r", - "./hr": "S6ln", - "./hr.js": "S6ln", - "./hu": "WxRl", - "./hu.js": "WxRl", - "./hy-am": "1rYy", - "./hy-am.js": "1rYy", - "./id": "UDhR", - "./id.js": "UDhR", - "./is": "BVg3", - "./is.js": "BVg3", - "./it": "bpih", - "./it.js": "bpih", - "./ja": "B55N", - "./ja.js": "B55N", - "./jv": "tUCv", - "./jv.js": "tUCv", - "./ka": "IBtZ", - "./ka.js": "IBtZ", - "./kk": "bXm7", - "./kk.js": "bXm7", - "./km": "6B0Y", - "./km.js": "6B0Y", - "./kn": "PpIw", - "./kn.js": "PpIw", - "./ko": "Ivi+", - "./ko.js": "Ivi+", - "./ky": "lgnt", - "./ky.js": "lgnt", - "./lb": "RAwQ", - "./lb.js": "RAwQ", - "./lo": "sp3z", - "./lo.js": "sp3z", - "./lt": "JvlW", - "./lt.js": "JvlW", - "./lv": "uXwI", - "./lv.js": "uXwI", - "./me": "KTz0", - "./me.js": "KTz0", - "./mi": "aIsn", - "./mi.js": "aIsn", - "./mk": "aQkU", - "./mk.js": "aQkU", - "./ml": "AvvY", - "./ml.js": "AvvY", - "./mr": "Ob0Z", - "./mr.js": "Ob0Z", - "./ms": "6+QB", - "./ms-my": "ZAMP", - "./ms-my.js": "ZAMP", - "./ms.js": "6+QB", - "./my": "honF", - "./my.js": "honF", - "./nb": "bOMt", - "./nb.js": "bOMt", - "./ne": "OjkT", - "./ne.js": "OjkT", - "./nl": "+s0g", - "./nl-be": "2ykv", - "./nl-be.js": "2ykv", - "./nl.js": "+s0g", - "./nn": "uEye", - "./nn.js": "uEye", - "./pa-in": "8/+R", - "./pa-in.js": "8/+R", - "./pl": "jVdC", - "./pl.js": "jVdC", - "./pt": "8mBD", - "./pt-br": "0tRk", - "./pt-br.js": "0tRk", - "./pt.js": "8mBD", - "./ro": "lyxo", - "./ro.js": "lyxo", - "./ru": "lXzo", - "./ru.js": "lXzo", - "./sd": "Z4QM", - "./sd.js": "Z4QM", - "./se": "//9w", - "./se.js": "//9w", - "./si": "7aV9", - "./si.js": "7aV9", - "./sk": "e+ae", - "./sk.js": "e+ae", - "./sl": "gVVK", - "./sl.js": "gVVK", - "./sq": "yPMs", - "./sq.js": "yPMs", - "./sr": "zx6S", - "./sr-cyrl": "E+lV", - "./sr-cyrl.js": "E+lV", - "./sr.js": "zx6S", - "./ss": "Ur1D", - "./ss.js": "Ur1D", - "./sv": "X709", - "./sv.js": "X709", - "./sw": "dNwA", - "./sw.js": "dNwA", - "./ta": "PeUW", - "./ta.js": "PeUW", - "./te": "XLvN", - "./te.js": "XLvN", - "./tet": "V2x9", - "./tet.js": "V2x9", - "./th": "EOgW", - "./th.js": "EOgW", - "./tl-ph": "Dzi0", - "./tl-ph.js": "Dzi0", - "./tlh": "z3Vd", - "./tlh.js": "z3Vd", - "./tr": "DoHr", - "./tr.js": "DoHr", - "./tzl": "z1FC", - "./tzl.js": "z1FC", - "./tzm": "wQk9", - "./tzm-latn": "tT3J", - "./tzm-latn.js": "tT3J", - "./tzm.js": "wQk9", - "./uk": "raLr", - "./uk.js": "raLr", - "./ur": "UpQW", - "./ur.js": "UpQW", - "./uz": "Loxo", - "./uz-latn": "AQ68", - "./uz-latn.js": "AQ68", - "./uz.js": "Loxo", - "./vi": "KSF8", - "./vi.js": "KSF8", - "./x-pseudo": "/X5v", - "./x-pseudo.js": "/X5v", - "./yo": "fzPg", - "./yo.js": "fzPg", - "./zh-cn": "XDpg", - "./zh-cn.js": "XDpg", - "./zh-hk": "SatO", - "./zh-hk.js": "SatO", - "./zh-tw": "kOpN", - "./zh-tw.js": "kOpN" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - var id = map[req]; - if(!(id + 1)) { // check for number or string - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return id; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "RnhZ"; - -/***/ }), - -/***/ "VW/0": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSiteEventsWithinTimeRange", function() { return fetchSiteEventsWithinTimeRange; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTimeRange", function() { return setTimeRange; }); -/* harmony import */ var app_reactor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("xSHT"); -/* harmony import */ var _getters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("F+qq"); -/* harmony import */ var _sessions_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("CtRu"); -/* harmony import */ var _actionTypes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("OcN7"); -/* harmony import */ var app_lib_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("lZJN"); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var logger = app_lib_logger__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].create('Modules/Sessions'); - -function fetchSiteEventsWithinTimeRange() { - var _reactor$evaluate = app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].evaluate(_getters__WEBPACK_IMPORTED_MODULE_1__["default"].filter), - start = _reactor$evaluate.start, - end = _reactor$evaluate.end; - - return _fetch(start, end); -} - -function setTimeRange(start, end) { - app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].batch(function () { - app_reactor__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].dispatch(_actionTypes__WEBPACK_IMPORTED_MODULE_3__[/* TLPT_STORED_SESSINS_FILTER_SET_RANGE */ "a"], { start: start, end: end }); - _fetch(start, end); - }); -} - -function _fetch(start, end) { - return Object(_sessions_actions__WEBPACK_IMPORTED_MODULE_2__[/* fetchSiteEvents */ "b"])(start, end).fail(function (err) { - logger.error('fetching filtered set of sessions', err); - }); -} - -/***/ }), - -/***/ "Z9Rw": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var jQuery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("K5fH"); -/* harmony import */ var jQuery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jQuery__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _localStorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("KdfW"); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var api = { - put: function put(path, data) { - return api.ajax({ url: path, data: JSON.stringify(data), type: 'PUT' }); - }, - post: function post(path, data) { - return api.ajax({ url: path, data: JSON.stringify(data), type: 'POST' }); - }, - delete: function _delete(path, data) { - return api.ajax({ url: path, data: JSON.stringify(data), type: 'DELETE' }); - }, - get: function get(path) { - return api.ajax({ url: path }); - }, - ajax: function ajax(cfg) { - var _this = this; - - var defaultCfg = { - cache: false, - type: 'GET', - dataType: 'json', - contentType: 'application/json; charset=utf-8', - beforeSend: function beforeSend(xhr) { - return _this.setAuthHeaders(xhr); - } - }; - - return jQuery__WEBPACK_IMPORTED_MODULE_0___default.a.ajax(jQuery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, defaultCfg, cfg)); - }, - getErrorText: function getErrorText(err) { - var msg = 'Unknown error'; - - if (err instanceof Error) { - return err.message || msg; - } - - if (err.responseJSON && err.responseJSON.message) { - return err.responseJSON.message; - } - - if (err.responseJSON && err.responseJSON.error) { - return err.responseJSON.error.message || msg; - } - - if (err.responseText) { - return err.responseText; - } - - return msg; - }, - setAuthHeaders: function setAuthHeaders(xhr) { - var accessToken = this.getAccessToken(); - var csrfToken = this.getXCSRFToken(); - xhr.setRequestHeader('X-CSRF-Token', csrfToken); - xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); - }, - setNoCacheHeaders: function setNoCacheHeaders(xhr) { - xhr.setRequestHeader('cache-control', 'max-age=0'); - xhr.setRequestHeader('expires', '0'); - xhr.setRequestHeader('pragma', 'no-cache'); - }, - getAccessToken: function getAccessToken() { - var bearerToken = _localStorage__WEBPACK_IMPORTED_MODULE_1__[/* default */ "b"].getBearerToken() || {}; - return bearerToken.accessToken; - }, - getXCSRFToken: function getXCSRFToken() { - var metaTag = document.querySelector('[name=grv_csrf_token]'); - return metaTag ? metaTag.content : ''; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (api); - -/***/ }), - -/***/ "cIpc": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export compilePattern */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return matchPattern; }); -/* unused harmony export getParamNames */ -/* unused harmony export getParams */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return formatPattern; }); -/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("QLaP"); -/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(invariant__WEBPACK_IMPORTED_MODULE_0__); -/* - * The MIT License (MIT) - * Copyright (c) 2015 Ryan Florence, Michael Jackson - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - - - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); -} - -function escapeSource(string) { - return escapeRegExp(string).replace(/\/+/g, '/+'); -} - -function _compilePattern(pattern) { - var regexpSource = ''; - var paramNames = []; - var tokens = []; - - var match = void 0, - lastIndex = 0, - matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)/g; - /*eslint no-cond-assign: 0*/ - while (match = matcher.exec(pattern)) { - if (match.index !== lastIndex) { - tokens.push(pattern.slice(lastIndex, match.index)); - regexpSource += escapeSource(pattern.slice(lastIndex, match.index)); - } - - if (match[1]) { - regexpSource += '([^/?#]+)'; - paramNames.push(match[1]); - } else if (match[0] === '**') { - regexpSource += '([\\s\\S]*)'; - paramNames.push('splat'); - } else if (match[0] === '*') { - regexpSource += '([\\s\\S]*?)'; - paramNames.push('splat'); - } else if (match[0] === '(') { - regexpSource += '(?:'; - } else if (match[0] === ')') { - regexpSource += ')?'; - } - - tokens.push(match[0]); - - lastIndex = matcher.lastIndex; - } - - if (lastIndex !== pattern.length) { - tokens.push(pattern.slice(lastIndex, pattern.length)); - regexpSource += escapeSource(pattern.slice(lastIndex, pattern.length)); - } - - return { - pattern: pattern, - regexpSource: regexpSource, - paramNames: paramNames, - tokens: tokens - }; -} - -var CompiledPatternsCache = {}; - -function compilePattern(pattern) { - if (!(pattern in CompiledPatternsCache)) CompiledPatternsCache[pattern] = _compilePattern(pattern); - - return CompiledPatternsCache[pattern]; -} - -/** - * Attempts to match a pattern on the given pathname. Patterns may use - * the following special characters: - * - * - :paramName Matches a URL segment up to the next /, ?, or #. The - * captured string is considered a "param" - * - () Wraps a segment of the URL that is optional - * - * Consumes (non-greedy) all characters up to the next - * character in the pattern, or to the end of the URL if - * there is none - * - ** Consumes (greedy) all characters up to the next character - * in the pattern, or to the end of the URL if there is none - * - * The return value is an object with the following properties: - * - * - remainingPathname - * - paramNames - * - paramValues - */ -function matchPattern(pattern, pathname) { - // Make leading slashes consistent between pattern and pathname. - if (pattern.charAt(0) !== '/') { - pattern = '/' + pattern; - } - if (pathname.charAt(0) !== '/') { - pathname = '/' + pathname; - } - - var _compilePattern2 = compilePattern(pattern), - regexpSource = _compilePattern2.regexpSource, - paramNames = _compilePattern2.paramNames, - tokens = _compilePattern2.tokens; - - regexpSource += '/*'; // Capture path separators - - // Special-case patterns like '*' for catch-all routes. - var captureRemaining = tokens[tokens.length - 1] !== '*'; - - if (captureRemaining) { - // This will match newlines in the remaining path. - regexpSource += '([\\s\\S]*?)'; - } - - var match = pathname.match(new RegExp('^' + regexpSource + '$', 'i')); - - var remainingPathname = void 0, - paramValues = void 0; - if (match != null) { - if (captureRemaining) { - remainingPathname = match.pop(); - var matchedPath = match[0].substr(0, match[0].length - remainingPathname.length); - - // If we didn't match the entire pathname, then make sure that the match - // we did get ends at a path separator (potentially the one we added - // above at the beginning of the path, if the actual match was empty). - if (remainingPathname && matchedPath.charAt(matchedPath.length - 1) !== '/') { - return { - remainingPathname: null, - paramNames: paramNames, - paramValues: null - }; - } - } else { - // If this matched at all, then the match was the entire pathname. - remainingPathname = ''; - } - - paramValues = match.slice(1).map(function (v) { - return v != null ? decodeURIComponent(v) : v; - }); - } else { - remainingPathname = paramValues = null; - } - - return { - remainingPathname: remainingPathname, - paramNames: paramNames, - paramValues: paramValues - }; -} - -function getParamNames(pattern) { - return compilePattern(pattern).paramNames; -} - -function getParams(pattern, pathname) { - var _matchPattern = matchPattern(pattern, pathname), - paramNames = _matchPattern.paramNames, - paramValues = _matchPattern.paramValues; - - if (paramValues != null) { - return paramNames.reduce(function (memo, paramName, index) { - memo[paramName] = paramValues[index]; - return memo; - }, {}); - } - - return null; -} - -/** - * Returns a version of the given pattern with params interpolated. Throws - * if there is a dynamic segment of the pattern for which there is no param. - */ -function formatPattern(pattern, params) { - params = params || {}; - - var _compilePattern3 = compilePattern(pattern), - tokens = _compilePattern3.tokens; - - var parenCount = 0, - pathname = '', - splatIndex = 0; - - var token = void 0, - paramName = void 0, - paramValue = void 0; - for (var i = 0, len = tokens.length; i < len; ++i) { - token = tokens[i]; - - if (token === '*' || token === '**') { - paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat; - - invariant__WEBPACK_IMPORTED_MODULE_0___default()(paramValue != null || parenCount > 0, 'Missing splat #%s for path "%s"', splatIndex, pattern); - - if (paramValue != null) pathname += encodeURI(paramValue); - } else if (token === '(') { - parenCount += 1; - } else if (token === ')') { - parenCount -= 1; - } else if (token.charAt(0) === ':') { - paramName = token.substring(1); - paramValue = params[paramName]; - - invariant__WEBPACK_IMPORTED_MODULE_0___default()(paramValue != null || parenCount > 0, 'Missing "%s" parameter for path "%s"', paramName, pattern); - - if (paramValue != null) pathname += encodeURIComponent(paramValue); - } else { - pathname += token; - } - } - - return pathname.replace(/\/+/g, '/'); -} - -/***/ }), - -/***/ "gOk0": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/* unused harmony export isDevEnv */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isTestEnv; }); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var isDevEnv = function isDevEnv() { - return "production" === 'development'; -}; -var isTestEnv = function isTestEnv() { - return process.env.NODE_ENV_TYPE === 'test'; -}; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("8oxB"))) - -/***/ }), - -/***/ "i3tb": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var app_flux_status_getters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("oHDm"); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -/* harmony default export */ __webpack_exports__["a"] = ({ - initAttempt: app_flux_status_getters__WEBPACK_IMPORTED_MODULE_0__[/* initAppAttempt */ "c"], - siteId: ['tlpt', 'siteId'] -}); - -/***/ }), - -/***/ "lZJN": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var Logger = function () { - function Logger() { - var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default'; - - _classCallCheck(this, Logger); - - this.name = name; - } - - _createClass(Logger, [{ - key: 'log', - value: function log() { - var _window$console; - - var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'log'; - - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - (_window$console = window.console)[level].apply(_window$console, ['%c[' + this.name + ']', 'color: blue;'].concat(args)); - } - }, { - key: 'trace', - value: function trace() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - this.log.apply(this, ['trace'].concat(args)); - } - }, { - key: 'warn', - value: function warn() { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this.log.apply(this, ['warn'].concat(args)); - } - }, { - key: 'info', - value: function info() { - for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - this.log.apply(this, ['info'].concat(args)); - } - }, { - key: 'error', - value: function error() { - for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - this.log.apply(this, ['error'].concat(args)); - } - }]); - - return Logger; -}(); - -/* harmony default export */ __webpack_exports__["a"] = ({ - create: function create() { - for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { - args[_key6] = arguments[_key6]; - } - - return new (Function.prototype.bind.apply(Logger, [null].concat(args)))(); - } -}); - -/***/ }), - -/***/ "oHDm": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return makeGetter; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return initAppAttempt; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return loginAttempt; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return fetchInviteAttempt; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return signupAttempt; }); -/* unused harmony export initSettingsAttempt */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return changePasswordAttempt; }); -/* harmony import */ var _statusStore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("PVWJ"); -/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("LYgY"); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var STORE_NAME = 'tlpt_status'; - -var makeGetter = function makeGetter(reqType) { - return [[STORE_NAME, reqType], function (rec) { - return rec || new _statusStore__WEBPACK_IMPORTED_MODULE_0__[/* TrackRec */ "a"](); - }]; -}; - -var initAppAttempt = makeGetter(_constants__WEBPACK_IMPORTED_MODULE_1__[/* TRYING_TO_INIT_APP */ "c"]); -var loginAttempt = makeGetter(_constants__WEBPACK_IMPORTED_MODULE_1__[/* TRYING_TO_LOGIN */ "e"]); -var fetchInviteAttempt = makeGetter(_constants__WEBPACK_IMPORTED_MODULE_1__[/* FETCHING_INVITE */ "a"]); -var signupAttempt = makeGetter(_constants__WEBPACK_IMPORTED_MODULE_1__[/* TRYING_TO_SIGN_UP */ "f"]); -var initSettingsAttempt = makeGetter(_constants__WEBPACK_IMPORTED_MODULE_1__[/* TRYING_TO_INIT_SETTINGS */ "d"]); -var changePasswordAttempt = makeGetter(_constants__WEBPACK_IMPORTED_MODULE_1__[/* TRYING_TO_CHANGE_PSW */ "b"]); - -/***/ }), - -/***/ "rVcD": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); - -// EXTERNAL MODULE: ./node_modules/react/react.js -var react = __webpack_require__("sbe7"); -var react_default = /*#__PURE__*/__webpack_require__.n(react); - -// EXTERNAL MODULE: ./node_modules/react-dom/index.js -var react_dom = __webpack_require__("i8i4"); -var react_dom_default = /*#__PURE__*/__webpack_require__.n(react_dom); - -// EXTERNAL MODULE: ./node_modules/react-hot-loader/index.js -var react_hot_loader = __webpack_require__("0cfB"); - -// EXTERNAL MODULE: ./node_modules/react-router/lib/index.js -var lib = __webpack_require__("l2sx"); - -// EXTERNAL MODULE: ./node_modules/nuclear-js-react-addons/build/index.js -var build = __webpack_require__("sIaI"); - -// EXTERNAL MODULE: ./src/app/config.js -var config = __webpack_require__("LMli"); - -// EXTERNAL MODULE: ./src/app/lib/patternUtils.js -var patternUtils = __webpack_require__("cIpc"); - -// CONCATENATED MODULE: ./src/app/services/history.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var _inst = null; - -var history_history = { - original: function original() { - return _inst; - }, - init: function init() { - var history = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : lib["browserHistory"]; - - _inst = history; - }, - push: function push(route) { - var withRefresh = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - route = this.ensureSafeRoute(route); - if (withRefresh) { - this._pageRefresh(route); - } else { - _inst.push(route); - } - }, - goBack: function goBack(number) { - this.original().goBack(number); - }, - goToLogin: function goToLogin(rememberLocation) { - var url = config["a" /* default */].routes.login; - if (rememberLocation) { - var currentLoc = _inst.getCurrentLocation(); - var redirectUrl = _inst.createHref(currentLoc); - redirectUrl = this.ensureSafeRoute(redirectUrl); - redirectUrl = this.ensureBaseUrl(redirectUrl); - url = url + '?redirect_uri=' + redirectUrl; - } - - this._pageRefresh(url); - }, - getRedirectParam: function getRedirectParam() { - var loc = this.original().getCurrentLocation(); - if (loc.query && loc.query.redirect_uri) { - return loc.query.redirect_uri; - } - - return ''; - }, - ensureSafeRoute: function ensureSafeRoute(url) { - url = this._canPush(url) ? url : config["a" /* default */].routes.app; - return url; - }, - ensureBaseUrl: function ensureBaseUrl(url) { - url = url || ''; - if (url.indexOf(config["a" /* default */].baseUrl) !== 0) { - url = config["a" /* default */].baseUrl + url; - } - - return url; - }, - getRoutes: function getRoutes() { - return Object.getOwnPropertyNames(config["a" /* default */].routes).map(function (p) { - return config["a" /* default */].routes[p]; - }); - }, - _canPush: function _canPush(route) { - route = route || ''; - var routes = this.getRoutes(); - if (route.indexOf(config["a" /* default */].baseUrl) === 0) { - route = route.replace(config["a" /* default */].baseUrl, ''); - } - - return routes.some(history_match(route)); - }, - _pageRefresh: function _pageRefresh(route) { - window.location.href = this.ensureBaseUrl(route); - } -}; - -var history_match = function match(url) { - return function (route) { - var _matchPattern = Object(patternUtils["b" /* matchPattern */])(route, url), - remainingPathname = _matchPattern.remainingPathname; - - return remainingPathname !== null && remainingPathname.length === 0; - }; -}; - -/* harmony default export */ var services_history = (history_history); -// EXTERNAL MODULE: ./src/app/reactor.js -var app_reactor = __webpack_require__("xSHT"); - -// EXTERNAL MODULE: ./src/assets/js/jquery.js -var jquery = __webpack_require__("K5fH"); -var jquery_default = /*#__PURE__*/__webpack_require__.n(jquery); - -// EXTERNAL MODULE: ./src/assets/js/jquery-validate.js -var jquery_validate = __webpack_require__("q1Yt"); - -// EXTERNAL MODULE: ./src/app/services/api.js -var api = __webpack_require__("Z9Rw"); - -// EXTERNAL MODULE: ./node_modules/u2f-api-polyfill/u2f-api-polyfill.js -var u2f_api_polyfill = __webpack_require__("KDbw"); - -// CONCATENATED MODULE: ./src/app/services/auth.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -// This puts it in window.u2f - - -var auth = { - login: function login(email, password, token) { - var data = { - user: email, - pass: password, - second_factor_token: token - }; - - return api["a" /* default */].post(config["a" /* default */].api.sessionPath, data, false); - }, - loginWithU2f: function loginWithU2f(name, password) { - var data = { - user: name, - pass: password - }; - - return api["a" /* default */].post(config["a" /* default */].api.u2fSessionChallengePath, data, false).then(function (data) { - var deferred = jquery_default.a.Deferred(); - - window.u2f.sign(data.appId, data.challenge, [data], function (res) { - if (res.errorCode) { - var err = auth._getU2fErr(res.errorCode); - deferred.reject(err); - return; - } - - var response = { - user: name, - u2f_sign_response: res - }; - - api["a" /* default */].post(config["a" /* default */].api.u2fSessionPath, response, false).then(function (data) { - deferred.resolve(data); - }).fail(function (data) { - deferred.reject(data); - }); - }); - - return deferred.promise(); - }); - }, - acceptInvite: function acceptInvite(name, password, token, inviteToken) { - var data = { - invite_token: inviteToken, - pass: password, - second_factor_token: token, - user: name - }; - - return api["a" /* default */].post(config["a" /* default */].api.createUserPath, data, false); - }, - acceptInviteWithU2f: function acceptInviteWithU2f(name, password, inviteToken) { - return api["a" /* default */].get(config["a" /* default */].api.getU2fCreateUserChallengeUrl(inviteToken)).then(function (data) { - var deferred = jquery_default.a.Deferred(); - window.u2f.register(data.appId, [data], [], function (res) { - if (res.errorCode) { - var err = auth._getU2fErr(res.errorCode); - deferred.reject(err); - return; - } - - var response = { - user: name, - pass: password, - u2f_register_response: res, - invite_token: inviteToken - }; - - api["a" /* default */].post(config["a" /* default */].api.u2fCreateUserPath, response, false).then(function (data) { - deferred.resolve(data); - }).fail(function (err) { - deferred.reject(err); - }); - }); - - return deferred.promise(); - }); - }, - changePassword: function changePassword(oldPass, newPass, token) { - var data = { - old_password: window.btoa(oldPass), - new_password: window.btoa(newPass), - second_factor_token: token - }; - - return api["a" /* default */].put(config["a" /* default */].api.changeUserPasswordPath, data); - }, - changePasswordWithU2f: function changePasswordWithU2f(oldPass, newPass) { - var data = { - user: name, - pass: oldPass - }; - - return api["a" /* default */].post(config["a" /* default */].api.u2fChangePassChallengePath, data).then(function (data) { - var deferred = jquery_default.a.Deferred(); - - window.u2f.sign(data.appId, data.challenge, [data], function (res) { - if (res.errorCode) { - var err = auth._getU2fErr(res.errorCode); - deferred.reject(err); - return; - } - - var data = { - new_password: window.btoa(newPass), - u2f_sign_response: res - }; - - api["a" /* default */].put(config["a" /* default */].api.changeUserPasswordPath, data).then(function (data) { - deferred.resolve(data); - }).fail(function (data) { - deferred.reject(data); - }); - }); - - return deferred.promise(); - }); - }, - _getU2fErr: function _getU2fErr(errorCode) { - var errorMsg = ""; - // lookup error message... - for (var msg in window.u2f.ErrorCodes) { - if (window.u2f.ErrorCodes[msg] == errorCode) { - errorMsg = msg; - } - } - - var message = 'Please check your U2F settings, make sure it is plugged in and you are using the supported browser.\nU2F error: ' + errorMsg; - - return { - responseJSON: { - message: message - } - }; - } -}; - -/* harmony default export */ var services_auth = (auth); -// EXTERNAL MODULE: ./src/app/lib/logger.js -var logger = __webpack_require__("lZJN"); - -// EXTERNAL MODULE: ./src/app/services/localStorage.js -var localStorage = __webpack_require__("KdfW"); - -// CONCATENATED MODULE: ./src/app/services/session.js -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -var EMPTY_TOKEN_CONTENT_LENGTH = 20; -var TOKEN_CHECKER_INTERVAL = 15 * 1000; // every 15 sec -var session_logger = logger["a" /* default */].create('services/sessions'); - -var BearerToken = function BearerToken(json) { - _classCallCheck(this, BearerToken); - - this.accessToken = json.token; - this.expiresIn = json.expires_in; - this.created = new Date().getTime(); -}; - -var sesstionCheckerTimerId = null; - -var session_session = { - logout: function logout() { - var rememberLocation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - api["a" /* default */].delete(config["a" /* default */].api.sessionPath).always(function () { - services_history.goToLogin(rememberLocation); - }); - - this.clear(); - }, - clear: function clear() { - this._stopSessionChecker(); - localStorage["b" /* default */].unsubscribe(receiveMessage); - localStorage["b" /* default */].setBearerToken(null); - localStorage["b" /* default */].clear(); - }, - ensureSession: function ensureSession() { - var _this = this; - - var rememberLocation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this._stopSessionChecker(); - this._ensureLocalStorageSubscription(); - - var token = this._getBearerToken(); - if (!token) { - this.logout(rememberLocation); - return jquery_default.a.Deferred().reject(); - } - - if (this._shouldRenewToken()) { - return this._renewToken().done(this._startSessionChecker.bind(this)).fail(function () { - return _this.logout(rememberLocation); - }); - } else { - this._startSessionChecker(); - return jquery_default.a.Deferred().resolve(token); - } - }, - _getBearerToken: function _getBearerToken() { - var token = null; - try { - token = this._extractBearerTokenFromHtml(); - if (token) { - localStorage["b" /* default */].setBearerToken(token); - } else { - token = localStorage["b" /* default */].getBearerToken(); - } - } catch (err) { - session_logger.error('Cannot find bearer token', err); - } - - return token; - }, - _extractBearerTokenFromHtml: function _extractBearerTokenFromHtml() { - var el = document.querySelector('[name=grv_bearer_token]'); - var token = null; - if (el !== null) { - var encodedToken = el.content || ''; - if (encodedToken.length > EMPTY_TOKEN_CONTENT_LENGTH) { - var decoded = window.atob(encodedToken); - var json = JSON.parse(decoded); - token = new BearerToken(json); - } - - // remove initial data from HTML as it will be renewed with a time - el.parentNode.removeChild(el); - } - - return token; - }, - _shouldRenewToken: function _shouldRenewToken() { - if (this._getIsRenewing()) { - return false; - } - - return this._timeLeft() < TOKEN_CHECKER_INTERVAL * 1.5; - }, - _shouldCheckStatus: function _shouldCheckStatus() { - if (this._getIsRenewing()) { - return false; - } - - /* - * double the threshold value for slow connections to avoid - * access-denied response due to concurrent renew token request - * made from other tab - */ - return this._timeLeft() > TOKEN_CHECKER_INTERVAL * 2; - }, - _renewToken: function _renewToken() { - var _this2 = this; - - this._setAndBroadcastIsRenewing(true); - return api["a" /* default */].post(config["a" /* default */].api.renewTokenPath).then(this._receiveBearerToken.bind(this)).always(function () { - _this2._setAndBroadcastIsRenewing(false); - }); - }, - _receiveBearerToken: function _receiveBearerToken(json) { - var token = new BearerToken(json); - localStorage["b" /* default */].setBearerToken(token); - }, - _fetchStatus: function _fetchStatus() { - var _this3 = this; - - api["a" /* default */].get(config["a" /* default */].api.userStatusPath).fail(function (err) { - // indicates that session is no longer valid (caused by server restarts or updates) - if (err.status == 403) { - _this3.logout(); - } - }); - }, - _setAndBroadcastIsRenewing: function _setAndBroadcastIsRenewing(value) { - this._setIsRenewing(value); - localStorage["b" /* default */].broadcast(localStorage["a" /* KeysEnum */].TOKEN_RENEW, value); - }, - _setIsRenewing: function _setIsRenewing(value) { - this._isRenewing = value; - }, - _getIsRenewing: function _getIsRenewing() { - return !!this._isRenewing; - }, - _timeLeft: function _timeLeft() { - var token = this._getBearerToken(); - if (!token) { - return 0; - } - - var expiresIn = token.expiresIn, - created = token.created; - - if (!created || !expiresIn) { - return 0; - } - - expiresIn = expiresIn * 1000; - var delta = created + expiresIn - new Date().getTime(); - return delta; - }, - - - // detects localStorage changes from other tabs - _ensureLocalStorageSubscription: function _ensureLocalStorageSubscription() { - localStorage["b" /* default */].subscribe(receiveMessage); - }, - _startSessionChecker: function _startSessionChecker() { - var _this4 = this; - - this._stopSessionChecker(); - sesstionCheckerTimerId = setInterval(function () { - // calling ensureSession() will again invoke _startSessionChecker - _this4.ensureSession(); - - // check if server has a valid session in case of server restarts - if (_this4._shouldCheckStatus()) { - _this4._fetchStatus(); - } - }, TOKEN_CHECKER_INTERVAL); - }, - _stopSessionChecker: function _stopSessionChecker() { - clearInterval(sesstionCheckerTimerId); - sesstionCheckerTimerId = null; - } -}; - -function receiveMessage(event) { - var key = event.key, - newValue = event.newValue; - - // check if local storage has been cleared from another tab - - if (localStorage["b" /* default */].getBearerToken() === null) { - session_session.logout(); - } - - // renewToken has been invoked from another tab - if (key === localStorage["a" /* KeysEnum */].TOKEN_RENEW && !!newValue) { - session_session._setIsRenewing(JSON.parse(newValue)); - } -} - -/* harmony default export */ var services_session = (session_session); -// EXTERNAL MODULE: ./src/app/flux/status/actionTypes.js -var actionTypes = __webpack_require__("tGXY"); - -// EXTERNAL MODULE: ./src/app/flux/status/constants.js -var constants = __webpack_require__("LYgY"); - -// CONCATENATED MODULE: ./src/app/flux/status/actions.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -function makeStatus(reqType) { - return { - start: function start() { - app_reactor["a" /* default */].dispatch(actionTypes["c" /* START */], { type: reqType }); - }, - success: function success(message) { - app_reactor["a" /* default */].dispatch(actionTypes["d" /* SUCCESS */], { type: reqType, message: message }); - }, - fail: function fail(message) { - app_reactor["a" /* default */].dispatch(actionTypes["b" /* FAIL */], { type: reqType, message: message }); - }, - clear: function clear() { - app_reactor["a" /* default */].dispatch(actionTypes["a" /* CLEAR */], { type: reqType }); - } - }; -} - -var initAppStatus = makeStatus(constants["c" /* TRYING_TO_INIT_APP */]); -var loginStatus = makeStatus(constants["e" /* TRYING_TO_LOGIN */]); -var fetchInviteStatus = makeStatus(constants["a" /* FETCHING_INVITE */]); -var signupStatus = makeStatus(constants["f" /* TRYING_TO_SIGN_UP */]); -var initSettingsStatus = makeStatus(constants["d" /* TRYING_TO_INIT_SETTINGS */]); -var changePasswordStatus = makeStatus(constants["b" /* TRYING_TO_CHANGE_PSW */]); -// CONCATENATED MODULE: ./src/app/flux/user/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var RECEIVE_USER = 'TLPT_RECEIVE_USER'; -var RECEIVE_INVITE = 'TLPT_RECEIVE_USER_INVITE'; -// CONCATENATED MODULE: ./src/app/flux/user/actions.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - -var actions_logger = logger["a" /* default */].create('flux/user/actions'); - -var actions = { - fetchInvite: function fetchInvite(inviteToken) { - var path = config["a" /* default */].api.getInviteUrl(inviteToken); - fetchInviteStatus.start(); - api["a" /* default */].get(path).done(function (invite) { - fetchInviteStatus.success(); - app_reactor["a" /* default */].dispatch(RECEIVE_INVITE, invite); - }).fail(function (err) { - var msg = api["a" /* default */].getErrorText(err); - fetchInviteStatus.fail(msg); - }); - }, - ensureUser: function ensureUser(nextState, replace, cb) { - services_session.ensureSession(true).done(function () { - cb(); - }); - }, - acceptInvite: function acceptInvite(name, psw, token, inviteToken) { - var promise = services_auth.acceptInvite(name, psw, token, inviteToken); - actions._handleAcceptInvitePromise(promise); - }, - acceptInviteWithU2f: function acceptInviteWithU2f(name, psw, inviteToken) { - var promise = services_auth.acceptInviteWithU2f(name, psw, inviteToken); - return actions._handleAcceptInvitePromise(promise); - }, - loginWithSso: function loginWithSso(providerName, providerUrl) { - var entryUrl = this._getEntryRoute(); - services_history.push(config["a" /* default */].api.getSsoUrl(providerUrl, providerName, entryUrl), true); - }, - loginWithU2f: function loginWithU2f(user, password) { - var promise = services_auth.loginWithU2f(user, password); - actions._handleLoginPromise(promise); - }, - login: function login(user, password, token) { - var promise = services_auth.login(user, password, token); - actions._handleLoginPromise(promise); - }, - logout: function logout() { - services_session.logout(); - }, - _handleAcceptInvitePromise: function _handleAcceptInvitePromise(promise) { - signupStatus.start(); - return promise.done(function () { - services_history.push(config["a" /* default */].routes.app, true); - }).fail(function (err) { - var msg = api["a" /* default */].getErrorText(err); - actions_logger.error('accept invite', err); - signupStatus.fail(msg); - }); - }, - _handleLoginPromise: function _handleLoginPromise(promise) { - var _this = this; - - loginStatus.start(); - promise.done(function () { - var url = _this._getEntryRoute(); - services_history.push(url, true); - }).fail(function (err) { - var msg = api["a" /* default */].getErrorText(err); - actions_logger.error('login', err); - loginStatus.fail(msg); - }); - }, - _getEntryRoute: function _getEntryRoute() { - var entryUrl = services_history.getRedirectParam(); - if (entryUrl) { - entryUrl = services_history.ensureSafeRoute(entryUrl); - } else { - entryUrl = config["a" /* default */].routes.app; - } - - return services_history.ensureBaseUrl(entryUrl); - } -}; - -/* harmony default export */ var user_actions = (actions); -// EXTERNAL MODULE: ./src/app/flux/status/getters.js -var getters = __webpack_require__("oHDm"); - -// CONCATENATED MODULE: ./src/app/flux/user/index.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var STORE_NAME = 'tlpt_user'; - -function getUser() { - return app_reactor["a" /* default */].evaluate([STORE_NAME]); -} - -var user_invite = [['tlpt_user_invite'], function (invite) { - return invite; -}]; -var userName = [STORE_NAME, 'name']; - -var user_getters = { - userName: userName, - invite: user_invite, - pswChangeAttempt: getters["a" /* changePasswordAttempt */], - loginAttemp: getters["d" /* loginAttempt */], - attemp: getters["f" /* signupAttempt */], - fetchingInvite: getters["b" /* fetchInviteAttempt */] -}; -// CONCATENATED MODULE: ./src/app/components/user/googleAuthLogo.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var googleAuthLogo_GoogleAuthInfo = function GoogleAuthInfo() { - return react_default.a.createElement( - "div", - { className: "grv-google-auth text-left" }, - react_default.a.createElement("div", { className: "grv-icon-google-auth" }), - react_default.a.createElement( - "strong", - null, - "Google Authenticator" - ), - react_default.a.createElement( - "div", - null, - "Download", - react_default.a.createElement( - "a", - { href: "https://support.google.com/accounts/answer/1066447?hl=en" }, - react_default.a.createElement( - "span", - null, - " Google Authenticator " - ) - ), - "on your phone to access your two factor token" - ) - ); -}; - -/* harmony default export */ var googleAuthLogo = (googleAuthLogo_GoogleAuthInfo); -// EXTERNAL MODULE: ./node_modules/classnames/index.js -var classnames = __webpack_require__("TSYQ"); -var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); - -// EXTERNAL MODULE: ./src/assets/img/grv-tlpt-logo-full.svg -var grv_tlpt_logo_full = __webpack_require__("TglN"); - -// EXTERNAL MODULE: ./src/assets/img/grv-icon-close.svg -var grv_icon_close = __webpack_require__("Y9yc"); - -// CONCATENATED MODULE: ./src/app/components/icons.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var icons_TeleportLogo = function TeleportLogo() { - return react_default.a.createElement( - 'svg', - { className: 'grv-icon-logo-tlpt' }, - react_default.a.createElement('use', { xlinkHref: "#" + grv_tlpt_logo_full["a" /* default */].id }) - ); -}; - -var icons_CloseIcon = function CloseIcon() { - return react_default.a.createElement( - 'svg', - { className: 'grv-icon-close' }, - react_default.a.createElement('use', { xlinkHref: "#" + grv_icon_close["a" /* default */].id }) - ); -}; - -var icons_UserIcon = function UserIcon(_ref) { - var _ref$name = _ref.name, - name = _ref$name === undefined ? '' : _ref$name, - isDark = _ref.isDark; - - var iconClass = classnames_default()('grv-icon-user', { - '--dark': isDark - }); - - return react_default.a.createElement( - 'div', - { title: name, className: iconClass }, - react_default.a.createElement( - 'span', - null, - react_default.a.createElement( - 'strong', - null, - name[0] - ) - ) - ); -}; - - -// CONCATENATED MODULE: ./src/app/components/documentTitle.jsx -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function documentTitle_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var DocumentTitle = function (_React$Component) { - _inherits(DocumentTitle, _React$Component); - - function DocumentTitle() { - documentTitle_classCallCheck(this, DocumentTitle); - - return _possibleConstructorReturn(this, (DocumentTitle.__proto__ || Object.getPrototypeOf(DocumentTitle)).apply(this, arguments)); - } - - _createClass(DocumentTitle, [{ - key: 'componentDidUpdate', - value: function componentDidUpdate(prevProps) { - if (prevProps.title !== this.props.title) { - this.setTitle(this.props.title); - } - } - }, { - key: 'componentDidMount', - value: function componentDidMount() { - this.setTitle(this.props.title); - } - }, { - key: 'getTitle', - value: function getTitle() { - return document.title; - } - }, { - key: 'setTitle', - value: function setTitle(title) { - document.title = title; - } - }, { - key: 'render', - value: function render() { - return this.props.children; - } - }]); - - return DocumentTitle; -}(react_default.a.Component); - -var documentTitle_withDocTitle = function withDocTitle(title, component) { - var _class, _temp; - - return _temp = _class = function (_React$Component2) { - _inherits(WithWindowTitle, _React$Component2); - - function WithWindowTitle() { - documentTitle_classCallCheck(this, WithWindowTitle); - - return _possibleConstructorReturn(this, (WithWindowTitle.__proto__ || Object.getPrototypeOf(WithWindowTitle)).apply(this, arguments)); - } - - _createClass(WithWindowTitle, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.setTitle(title); - } - }, { - key: 'setTitle', - value: function setTitle(title) { - document.title = title; - } - }, { - key: 'render', - value: function render() { - return react_default.a.createElement(component, _extends({}, this.props)); - } - }]); - - return WithWindowTitle; - }(react_default.a.Component), _class.displayName = 'withDocTitleWrapper', _temp; -}; -// CONCATENATED MODULE: ./src/app/components/user/items.js - -var U2F_ERROR_CODES_URL = 'https://developers.yubico.com/U2F/Libraries/Client_error_codes.html'; - -var items_ErrorMessage = function ErrorMessage(_ref) { - var message = _ref.message; - - message = message || ''; - if (message.indexOf('U2F') !== -1) { - return react_default.a.createElement( - 'label', - { className: 'grv-invite-login-error' }, - message, - react_default.a.createElement('br', null), - react_default.a.createElement( - 'small', - { className: 'grv-invite-login-error-u2f-codes' }, - react_default.a.createElement( - 'span', - null, - 'click ', - react_default.a.createElement( - 'a', - { target: '_blank', href: U2F_ERROR_CODES_URL }, - 'here' - ), - ' to learn more about U2F error codes' - ) - ) - ); - } - - return react_default.a.createElement( - 'label', - { className: 'error' }, - message, - ' ' - ); -}; -// CONCATENATED MODULE: ./src/app/services/enums.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var AuthProviderTypeEnum = { - OIDC: 'oidc', - SAML: 'saml', - GITHUB: 'github' -}; - -var RestRespCodeEnum = { - FORBIDDEN: 403 -}; - -var Auth2faTypeEnum = { - UTF: 'u2f', - OTP: 'otp', - DISABLED: 'off' -}; - -var AuthTypeEnum = { - LOCAL: 'local', - SSO: 'sso' -}; -// CONCATENATED MODULE: ./src/app/components/user/ssoBtnList.jsx - - - - -var ssoBtnList_guessProviderBtnClass = function guessProviderBtnClass(name, type) { - name = name.toLowerCase(); - - if (name.indexOf('microsoft') !== -1) { - return 'btn-microsoft'; - } - - if (name.indexOf('bitbucket') !== -1) { - return 'btn-bitbucket'; - } - - if (name.indexOf('google') !== -1) { - return 'btn-google'; - } - - if (name.indexOf('github') !== -1 || type === AuthProviderTypeEnum.GITHUB) { - return 'btn-github'; - } - - if (type === AuthProviderTypeEnum.OIDC) { - return 'btn-openid'; - } - - return '--unknown'; -}; - -var ssoBtnList_SsoBtnList = function SsoBtnList(_ref) { - var providers = _ref.providers, - prefixText = _ref.prefixText, - isDisabled = _ref.isDisabled, - _onClick = _ref.onClick; - - var $btns = providers.map(function (item, index) { - var name = item.name, - type = item.type, - displayName = item.displayName; - - displayName = displayName || name; - var title = prefixText + ' ' + displayName; - var providerBtnClass = ssoBtnList_guessProviderBtnClass(displayName, type); - var btnClass = 'btn grv-user-btn-sso full-width ' + providerBtnClass; - return react_default.a.createElement( - 'button', - { key: index, - disabled: isDisabled, - className: btnClass, - onClick: function onClick(e) { - e.preventDefault();_onClick(item); - } }, - react_default.a.createElement( - 'div', - { className: '--sso-icon' }, - react_default.a.createElement('span', { className: 'fa' }) - ), - react_default.a.createElement( - 'span', - null, - title - ) - ); - }); - - if ($btns.length === 0) { - return react_default.a.createElement( - 'h4', - null, - ' You have no SSO providers configured ' - ); - } - - return react_default.a.createElement( - 'div', - null, - ' ', - $btns, - ' ' - ); -}; - - -// CONCATENATED MODULE: ./src/app/components/user/login.jsx -var login_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function login_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function login_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function login_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - - - -var login_Login = function (_React$Component) { - login_inherits(Login, _React$Component); - - function Login() { - var _ref; - - var _temp, _this, _ret; - - login_classCallCheck(this, Login); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = login_possibleConstructorReturn(this, (_ref = Login.__proto__ || Object.getPrototypeOf(Login)).call.apply(_ref, [this].concat(args))), _this), _this.onLoginWithSso = function (ssoProvider) { - user_actions.loginWithSso(ssoProvider.name, ssoProvider.url); - }, _this.onLoginWithU2f = function (username, password) { - user_actions.loginWithU2f(username, password); - }, _this.onLogin = function (username, password, token) { - user_actions.login(username, password, token); - }, _temp), login_possibleConstructorReturn(_this, _ret); - } - - login_createClass(Login, [{ - key: 'render', - value: function render() { - var attemp = this.props.attemp; - - var authProviders = config["a" /* default */].getAuthProviders(); - var auth2faType = config["a" /* default */].getAuth2faType(); - - return react_default.a.createElement( - 'div', - { className: 'grv-login text-center' }, - react_default.a.createElement(icons_TeleportLogo, null), - react_default.a.createElement( - 'div', - { className: 'grv-content grv-flex' }, - react_default.a.createElement( - 'div', - { className: 'grv-flex-column' }, - react_default.a.createElement(login_LoginInputForm, { - authProviders: authProviders, - auth2faType: auth2faType, - onLoginWithSso: this.onLoginWithSso, - onLoginWithU2f: this.onLoginWithU2f, - onLogin: this.onLogin, - attemp: attemp - }), - react_default.a.createElement(login_LoginFooter, { auth2faType: auth2faType }) - ) - ) - ); - } - }]); - - return Login; -}(react_default.a.Component); - -var login_LoginInputForm = function (_React$Component2) { - login_inherits(LoginInputForm, _React$Component2); - - function LoginInputForm(props) { - login_classCallCheck(this, LoginInputForm); - - var _this2 = login_possibleConstructorReturn(this, (LoginInputForm.__proto__ || Object.getPrototypeOf(LoginInputForm)).call(this, props)); - - _this2.onLogin = function (e) { - e.preventDefault(); - if (_this2.isValid()) { - var _this2$state = _this2.state, - user = _this2$state.user, - password = _this2$state.password, - token = _this2$state.token; - - _this2.props.onLogin(user, password, token); - } - }; - - _this2.onLoginWithU2f = function (e) { - e.preventDefault(); - if (_this2.isValid()) { - var _this2$state2 = _this2.state, - user = _this2$state2.user, - password = _this2$state2.password; - - _this2.props.onLoginWithU2f(user, password); - } - }; - - _this2.onLoginWithSso = function (ssoProvider) { - _this2.props.onLoginWithSso(ssoProvider); - }; - - _this2.onChangeState = function (propName, value) { - _this2.setState(_defineProperty({}, propName, value)); - }; - - _this2.state = { - user: '', - password: '', - token: '' - }; - return _this2; - } - - login_createClass(LoginInputForm, [{ - key: 'isValid', - value: function isValid() { - var $form = jquery_default()(this.refs.form); - return $form.length === 0 || $form.valid(); - } - }, { - key: 'needs2fa', - value: function needs2fa() { - return !!this.props.auth2faType && this.props.auth2faType !== Auth2faTypeEnum.DISABLED; - } - }, { - key: 'needsSso', - value: function needsSso() { - return this.props.authProviders && this.props.authProviders.length > 0; - } - }, { - key: 'render2faFields', - value: function render2faFields() { - var _this3 = this; - - if (!this.needs2fa() || this.props.auth2faType !== Auth2faTypeEnum.OTP) { - return null; - } - - return react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - autoComplete: 'off', - value: this.state.token, - onChange: function onChange(e) { - return _this3.onChangeState('token', e.target.value); - }, - className: 'form-control required', - name: 'token', - placeholder: 'Two factor token (Google Authenticator)' }) - ); - } - }, { - key: 'renderNameAndPassFields', - value: function renderNameAndPassFields() { - var _this4 = this; - - return react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - autoFocus: true, - value: this.state.user, - onChange: function onChange(e) { - return _this4.onChangeState('user', e.target.value); - }, - className: 'form-control required', - placeholder: 'User name', - name: 'userName' }) - ), - react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - value: this.state.password, - onChange: function onChange(e) { - return _this4.onChangeState('password', e.target.value); - }, - type: 'password', - name: 'password', - className: 'form-control required', - placeholder: 'Password' }) - ) - ); - } - }, { - key: 'renderLoginBtn', - value: function renderLoginBtn() { - var isProcessing = this.props.attemp.isProcessing; - - var $helpBlock = isProcessing && this.props.auth2faType === Auth2faTypeEnum.UTF ? react_default.a.createElement( - 'div', - { className: 'help-block' }, - 'Insert your U2F key and press the button on the key' - ) : null; - - var onClick = this.props.auth2faType === Auth2faTypeEnum.UTF ? this.onLoginWithU2f : this.onLogin; - - return react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'button', - { - onClick: onClick, - disabled: isProcessing, - type: 'submit', - className: 'btn btn-primary block full-width m-b' }, - 'Login' - ), - $helpBlock - ); - } - }, { - key: 'renderSsoBtns', - value: function renderSsoBtns() { - var _props = this.props, - authProviders = _props.authProviders, - attemp = _props.attemp; - - if (!this.needsSso()) { - return null; - } - - return react_default.a.createElement(ssoBtnList_SsoBtnList, { - prefixText: 'Login with ', - isDisabled: attemp.isProcessing, - providers: authProviders, - onClick: this.onLoginWithSso }); - } - }, { - key: 'render', - value: function render() { - var _props$attemp = this.props.attemp, - isFailed = _props$attemp.isFailed, - message = _props$attemp.message; - - var $error = isFailed ? react_default.a.createElement(items_ErrorMessage, { message: message }) : null; - - var hasAnyAuth = !!config["a" /* default */].auth; - - return react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'form', - { ref: 'form', className: 'grv-login-input-form' }, - react_default.a.createElement( - 'h3', - null, - ' Welcome to Teleport ' - ), - !hasAnyAuth ? react_default.a.createElement( - 'div', - null, - ' You have no authentication options configured ' - ) : react_default.a.createElement( - 'div', - null, - this.renderNameAndPassFields(), - this.render2faFields(), - this.renderLoginBtn(), - this.renderSsoBtns() - ) - ), - $error - ); - } - }]); - - return LoginInputForm; -}(react_default.a.Component); - -login_LoginInputForm.propTypes = { - authProviders: react_default.a.PropTypes.array, - auth2faType: react_default.a.PropTypes.string, - onLoginWithSso: react_default.a.PropTypes.func.isRequired, - onLoginWithU2f: react_default.a.PropTypes.func.isRequired, - onLogin: react_default.a.PropTypes.func.isRequired, - attemp: react_default.a.PropTypes.object.isRequired -}; -var login_LoginFooter = function LoginFooter(_ref2) { - var auth2faType = _ref2.auth2faType; - - var $googleHint = auth2faType === Auth2faTypeEnum.OTP ? react_default.a.createElement(googleAuthLogo, null) : null; - return react_default.a.createElement( - 'div', - null, - $googleHint, - react_default.a.createElement( - 'div', - { className: 'grv-login-info' }, - react_default.a.createElement('i', { className: 'fa fa-question' }), - react_default.a.createElement( - 'strong', - null, - 'New Account or forgot password?' - ), - react_default.a.createElement( - 'div', - null, - 'Ask for assistance from your Company administrator' - ) - ) - ); -}; - -function login_mapStateToProps() { - return { - attemp: user_getters.loginAttemp - }; -} - -/* harmony default export */ var user_login = (documentTitle_withDocTitle("Login", Object(build["connect"])(login_mapStateToProps)(login_Login))); -// CONCATENATED MODULE: ./src/app/components/msgPage.jsx -var msgPage_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var MSG_INFO_LOGIN_SUCCESS = 'Login successful'; -var MSG_ERROR_LOGIN_FAILED = 'Login unsuccessful. Please try again, if the problem persists, contact your system administrator.'; -var MSG_ERROR_DEFAULT = 'Internal Error'; -var MSG_ERROR_NOT_FOUND = '404 Not Found'; -var MSG_ERROR_NOT_FOUND_DETAILS = 'Looks like the page you are looking for isn\'t here any longer.'; -var MSG_ERROR_EXPIRED_INVITE = 'Invite code has expired.'; -var MSG_ERROR_EXPIRED_INVITE_DETAILS = 'Looks like your invite code isn\'t valid anymore.'; -var MSG_ERROR_ACCESS_DENIED = 'Access denied'; - -var ErrorPageEnum = { - FAILED_TO_LOGIN: 'login_failed', - EXPIRED_INVITE: 'expired_invite', - NOT_FOUND: 'not_found', - ACCESS_DENIED: 'access_denied' -}; - -var InfoPageEnum = { - LOGIN_SUCCESS: 'login_success' -}; - -var InfoPage = documentTitle_withDocTitle("Info", function (_ref) { - var params = _ref.params; - var type = params.type; - - if (type === InfoPageEnum.LOGIN_SUCCESS) { - return react_default.a.createElement(msgPage_SuccessfulLogin, null); - } - - return null; -}); - -var ErrorPage = documentTitle_withDocTitle("Error", function (_ref2) { - var params = _ref2.params, - location = _ref2.location; - var type = params.type; - - var details = location.query.details; - switch (type) { - case ErrorPageEnum.FAILED_TO_LOGIN: - return react_default.a.createElement(msgPage_LoginFailed, { message: details }); - case ErrorPageEnum.EXPIRED_INVITE: - return react_default.a.createElement(msgPage_ExpiredLink, null); - case ErrorPageEnum.NOT_FOUND: - return react_default.a.createElement(msgPage_NotFound, null); - case ErrorPageEnum.ACCESS_DENIED: - return react_default.a.createElement(msgPage_AccessDenied, { message: details }); - default: - return react_default.a.createElement(msgPage_Failed, { message: details }); - } -}); - -var msgPage_Box = function Box(props) { - return react_default.a.createElement( - 'div', - { className: 'grv-msg-page' }, - react_default.a.createElement( - 'div', - { className: 'grv-header' }, - react_default.a.createElement('i', { className: props.iconClass }) - ), - props.children - ); -}; - -var msgPage_ErrorBox = function ErrorBox(props) { - return react_default.a.createElement(msgPage_Box, msgPage_extends({ iconClass: 'fa fa-exclamation-triangle' }, props)); -}; - -var msgPage_ErrorBoxDetails = function ErrorBoxDetails(_ref3) { - var _ref3$message = _ref3.message, - message = _ref3$message === undefined ? '' : _ref3$message; - return react_default.a.createElement( - 'div', - { className: 'm-t text-muted' }, - react_default.a.createElement( - 'small', - { className: 'grv-msg-page-details-text' }, - message - ), - react_default.a.createElement( - 'p', - null, - react_default.a.createElement( - 'small', - { className: 'contact-section' }, - 'If you believe this is an issue with Teleport, please ', - react_default.a.createElement( - 'a', - { href: 'https://github.com/gravitational/teleport/issues/new' }, - 'create a GitHub issue.' - ) - ) - ) - ); -}; - -var msgPage_NotFound = function NotFound() { - return react_default.a.createElement( - msgPage_ErrorBox, - null, - react_default.a.createElement( - 'h1', - null, - MSG_ERROR_NOT_FOUND - ), - react_default.a.createElement(msgPage_ErrorBoxDetails, { message: MSG_ERROR_NOT_FOUND_DETAILS }) - ); -}; - -var NotFoundPage = documentTitle_withDocTitle("Not Found", msgPage_NotFound); - -var msgPage_AccessDenied = function AccessDenied(_ref4) { - var message = _ref4.message; - return react_default.a.createElement( - msgPage_Box, - { iconClass: 'fa fa-frown-o' }, - react_default.a.createElement( - 'h1', - null, - MSG_ERROR_ACCESS_DENIED - ), - react_default.a.createElement(msgPage_ErrorBoxDetails, { message: message }) - ); -}; - -var msgPage_Failed = function Failed(_ref5) { - var message = _ref5.message; - return react_default.a.createElement( - msgPage_ErrorBox, - null, - react_default.a.createElement( - 'h1', - null, - MSG_ERROR_DEFAULT - ), - react_default.a.createElement(msgPage_ErrorBoxDetails, { message: message }) - ); -}; - -var msgPage_ExpiredLink = function ExpiredLink() { - return react_default.a.createElement( - msgPage_ErrorBox, - null, - react_default.a.createElement( - 'h1', - null, - MSG_ERROR_EXPIRED_INVITE - ), - react_default.a.createElement(msgPage_ErrorBoxDetails, { message: MSG_ERROR_EXPIRED_INVITE_DETAILS }) - ); -}; - -var msgPage_LoginFailed = function LoginFailed(_ref6) { - var message = _ref6.message; - return react_default.a.createElement( - msgPage_ErrorBox, - null, - react_default.a.createElement( - 'h1', - null, - MSG_ERROR_LOGIN_FAILED - ), - react_default.a.createElement(msgPage_ErrorBoxDetails, { message: message }) - ); -}; - -var msgPage_SuccessfulLogin = function SuccessfulLogin() { - return react_default.a.createElement( - msgPage_Box, - { iconClass: 'fa fa-check-circle m-b-md' }, - react_default.a.createElement( - 'h1', - null, - MSG_INFO_LOGIN_SUCCESS - ), - react_default.a.createElement( - 'p', - { className: 'm-t', style: successfulLoginStyles }, - 'You have successfully signed into your account. You can close this window and continue using the product.' - ) - ); -}; - -var successfulLoginStyles = { - textAlign: "center", - maxWidth: "500px", - marginLeft: "auto", - marginRight: "auto" -}; - - -// CONCATENATED MODULE: ./src/app/components/user/invite.jsx -var invite_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function invite_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function invite_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function invite_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function invite_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - - - -var U2F_HELP_URL = 'https://support.google.com/accounts/answer/6103523?hl=en'; - -var invite_needs2fa = function needs2fa(auth2faType) { - return !!auth2faType && auth2faType !== Auth2faTypeEnum.DISABLED; -}; - -var invite_Invite = function (_React$Component) { - invite_inherits(Invite, _React$Component); - - function Invite() { - var _ref; - - var _temp, _this, _ret; - - invite_classCallCheck(this, Invite); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = invite_possibleConstructorReturn(this, (_ref = Invite.__proto__ || Object.getPrototypeOf(Invite)).call.apply(_ref, [this].concat(args))), _this), _this.onSubmitWithU2f = function (username, password) { - user_actions.acceptInviteWithU2f(username, password, _this.props.params.inviteToken); - }, _this.onSubmit = function (username, password, token) { - user_actions.acceptInvite(username, password, token, _this.props.params.inviteToken); - }, _temp), invite_possibleConstructorReturn(_this, _ret); - } - - invite_createClass(Invite, [{ - key: 'componentDidMount', - value: function componentDidMount() { - user_actions.fetchInvite(this.props.params.inviteToken); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - fetchingInvite = _props.fetchingInvite, - invite = _props.invite, - attemp = _props.attemp; - - var auth2faType = config["a" /* default */].getAuth2faType(); - - if (fetchingInvite.isFailed) { - return react_default.a.createElement(msgPage_ExpiredLink, null); - } - - if (!invite) { - return null; - } - - var containerClass = classnames_default()('grv-invite-content grv-flex', { - '---with-2fa-data': invite_needs2fa(auth2faType) - }); - - return react_default.a.createElement( - 'div', - { className: 'grv-invite text-center' }, - react_default.a.createElement(icons_TeleportLogo, null), - react_default.a.createElement( - 'div', - { className: containerClass }, - react_default.a.createElement( - 'div', - { className: 'grv-flex-column' }, - react_default.a.createElement(invite_InviteInputForm, { - auth2faType: auth2faType, - attemp: attemp, - invite: invite, - onSubmitWithU2f: this.onSubmitWithU2f, - onSubmit: this.onSubmit - }), - react_default.a.createElement(invite_InviteFooter, { auth2faType: auth2faType }) - ), - react_default.a.createElement(invite_Invite2faData, { - auth2faType: auth2faType, - qr: invite.qr }) - ) - ); - } - }]); - - return Invite; -}(react_default.a.Component); - -var invite_InviteInputForm = function (_React$Component2) { - invite_inherits(InviteInputForm, _React$Component2); - - function InviteInputForm(props) { - invite_classCallCheck(this, InviteInputForm); - - var _this2 = invite_possibleConstructorReturn(this, (InviteInputForm.__proto__ || Object.getPrototypeOf(InviteInputForm)).call(this, props)); - - _this2.onSubmit = function (e) { - e.preventDefault(); - if (_this2.isValid()) { - var _this2$state = _this2.state, - userName = _this2$state.userName, - password = _this2$state.password, - token = _this2$state.token; - - _this2.props.onSubmit(userName, password, token); - } - }; - - _this2.onSubmitWithU2f = function (e) { - e.preventDefault(); - if (_this2.isValid()) { - var _this2$state2 = _this2.state, - userName = _this2$state2.userName, - password = _this2$state2.password; - - _this2.props.onSubmitWithU2f(userName, password); - } - }; - - _this2.onChangeState = function (propName, value) { - _this2.setState(invite_defineProperty({}, propName, value)); - }; - - _this2.state = { - userName: _this2.props.invite.user, - password: '', - passwordConfirmed: '', - token: '' - }; - return _this2; - } - - invite_createClass(InviteInputForm, [{ - key: 'componentDidMount', - value: function componentDidMount() { - jquery_default()(this.refs.form).validate({ - rules: { - password: { - minlength: 6, - required: true - }, - passwordConfirmed: { - required: true, - equalTo: this.refs.password - } - }, - - messages: { - passwordConfirmed: { - minlength: jquery_default.a.validator.format('Enter at least {0} characters'), - equalTo: 'Enter the same password as above' - } - } - }); - } - }, { - key: 'isValid', - value: function isValid() { - var $form = jquery_default()(this.refs.form); - return $form.length === 0 || $form.valid(); - } - }, { - key: 'renderNameAndPassFields', - value: function renderNameAndPassFields() { - var _this3 = this; - - return react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - disabled: true, - value: this.state.userName, - onChange: function onChange(e) { - return _this3.onChangeState('userName', e.target.value); - }, - className: 'form-control required', - placeholder: 'User name', - name: 'userName' }) - ), - react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - value: this.state.password, - onChange: function onChange(e) { - return _this3.onChangeState('password', e.target.value); - }, - autoFocus: true, - ref: 'password', - type: 'password', - name: 'password', - className: 'form-control required', - placeholder: 'Password' }) - ), - react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - value: this.state.passwordConfirmed, - onChange: function onChange(e) { - return _this3.onChangeState('passwordConfirmed', e.target.value); - }, - type: 'password', - name: 'passwordConfirmed', - className: 'form-control', - placeholder: 'Password confirm' }) - ) - ); - } - }, { - key: 'render2faFields', - value: function render2faFields() { - var _this4 = this; - - var auth2faType = this.props.auth2faType; - - if (invite_needs2fa(auth2faType) && auth2faType === Auth2faTypeEnum.OTP) { - return react_default.a.createElement( - 'div', - { className: 'form-group' }, - react_default.a.createElement('input', { - autoComplete: 'off', - value: this.state.token, - onChange: function onChange(e) { - return _this4.onChangeState('token', e.target.value); - }, - className: 'form-control required', - name: 'token', - placeholder: 'Two factor token (Google Authenticator)' }) - ); - } - - return null; - } - }, { - key: 'renderSubmitBtn', - value: function renderSubmitBtn() { - var isProcessing = this.props.attemp.isProcessing; - - var $helpBlock = isProcessing && this.props.auth2faType === Auth2faTypeEnum.UTF ? react_default.a.createElement( - 'div', - { className: 'help-block' }, - 'Insert your U2F key and press the button on the key' - ) : null; - - var onClick = this.props.auth2faType === Auth2faTypeEnum.UTF ? this.onSubmitWithU2f : this.onSubmit; - - return react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'button', - { - onClick: onClick, - disabled: isProcessing, - type: 'submit', - className: 'btn btn-primary block full-width m-b' }, - 'Sign up' - ), - $helpBlock - ); - } - }, { - key: 'render', - value: function render() { - var _props$attemp = this.props.attemp, - isFailed = _props$attemp.isFailed, - message = _props$attemp.message; - - var $error = isFailed ? react_default.a.createElement(items_ErrorMessage, { message: message }) : null; - return react_default.a.createElement( - 'form', - { ref: 'form', className: 'grv-invite-input-form' }, - react_default.a.createElement( - 'h3', - null, - ' Get started with Teleport ' - ), - this.renderNameAndPassFields(), - this.render2faFields(), - this.renderSubmitBtn(), - $error - ); - } - }]); - - return InviteInputForm; -}(react_default.a.Component); - -invite_InviteInputForm.propTypes = { - auth2faType: react_default.a.PropTypes.string, - authType: react_default.a.PropTypes.string, - onSubmitWithU2f: react_default.a.PropTypes.func.isRequired, - onSubmit: react_default.a.PropTypes.func.isRequired, - attemp: react_default.a.PropTypes.object.isRequired -}; -var invite_Invite2faData = function Invite2faData(_ref2) { - var auth2faType = _ref2.auth2faType, - qr = _ref2.qr; - - if (!invite_needs2fa(auth2faType)) { - return null; - } - - if (auth2faType === Auth2faTypeEnum.OTP) { - return react_default.a.createElement( - 'div', - { className: 'grv-flex-column grv-invite-barcode' }, - react_default.a.createElement( - 'h4', - null, - 'Scan bar code for auth token ', - react_default.a.createElement('br', null), - react_default.a.createElement( - 'small', - null, - 'Scan below to generate your two factor token' - ) - ), - react_default.a.createElement('img', { className: 'img-thumbnail', src: 'data:image/png;base64,' + qr }) - ); - } - - if (auth2faType === Auth2faTypeEnum.UTF) { - return react_default.a.createElement( - 'div', - { className: 'grv-flex-column' }, - react_default.a.createElement( - 'h3', - null, - 'Insert your U2F key ' - ), - react_default.a.createElement( - 'div', - { className: 'm-t-md' }, - 'Press the button on the U2F key after you press the sign up button' - ), - react_default.a.createElement( - 'div', - { className: 'm-t text-muted' }, - react_default.a.createElement( - 'small', - null, - 'Click', - react_default.a.createElement( - 'a', - { a: true, target: '_blank', href: U2F_HELP_URL }, - ' here ' - ), - 'to learn more about U2F 2-Step Verification.' - ) - ) - ); - } - - return null; -}; - -var invite_InviteFooter = function InviteFooter(_ref3) { - var auth2faType = _ref3.auth2faType; - - var $googleHint = auth2faType === Auth2faTypeEnum.OTP ? react_default.a.createElement(googleAuthLogo, null) : null; - return react_default.a.createElement( - 'div', - null, - $googleHint - ); -}; - -function invite_mapStateToProps() { - return { - invite: user_getters.invite, - attemp: user_getters.attemp, - fetchingInvite: user_getters.fetchingInvite - }; -} - -/* harmony default export */ var components_user_invite = (documentTitle_withDocTitle("Invite", Object(build["connect"])(invite_mapStateToProps)(invite_Invite))); -// CONCATENATED MODULE: ./src/app/routes.jsx -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -function addRoutes() { - var routesToAdd = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - - return [{ path: config["a" /* default */].routes.error, component: ErrorPage }, { path: config["a" /* default */].routes.info, component: InfoPage }, { path: config["a" /* default */].routes.login, component: user_login }, { path: config["a" /* default */].routes.newUser, component: components_user_invite }, { path: config["a" /* default */].routes.app, onEnter: function onEnter(localtion, replace) { - return replace(config["a" /* default */].routes.nodes); - } }].concat(_toConsumableArray(routesToAdd), [{ path: '*', component: NotFoundPage }]); -} -// CONCATENATED MODULE: ./src/app/flux/userAcl/getters.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var userAcl = ['tlpt_user_acl']; - -/* harmony default export */ var userAcl_getters = ({ - userAcl: userAcl -}); -// CONCATENATED MODULE: ./src/app/flux/nodes/getters.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var getters_siteNodes = [['tlpt_nodes'], ['tlpt', 'siteId'], function (nodeStore, siteId) { - return nodeStore.getSiteServers(siteId); -}]; - -/* harmony default export */ var nodes_getters = ({ - siteNodes: getters_siteNodes -}); -// EXTERNAL MODULE: ./src/app/flux/app/getters.js -var app_getters = __webpack_require__("i3tb"); - -// EXTERNAL MODULE: ./node_modules/lodash/lodash.js -var lodash = __webpack_require__("LvDl"); - -// CONCATENATED MODULE: ./src/app/lib/objectUtils.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var uuid = { - 3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i, - 4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, - 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, - all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i -}; - -var PORT_REGEX = /:\d+$/; - -function parseIp(addr) { - addr = addr || ''; - return addr.replace(PORT_REGEX, ''); -} - -function isMatch(obj, searchValue, _ref) { - var searchableProps = _ref.searchableProps, - cb = _ref.cb; - - searchValue = searchValue.toLocaleUpperCase(); - var propNames = searchableProps || Object.getOwnPropertyNames(obj); - for (var i = 0; i < propNames.length; i++) { - var targetValue = obj[propNames[i]]; - if (targetValue) { - if (typeof cb === 'function') { - var result = cb(targetValue, searchValue, propNames[i]); - if (result === true) { - return result; - } - } - - if (targetValue.toString().toLocaleUpperCase().indexOf(searchValue) !== -1) { - return true; - } - } - } - - return false; -} - -function isUUID(str) { - var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all'; - - var pattern = uuid[version]; - return pattern && pattern.test(str); -} -// CONCATENATED MODULE: ./src/app/components/inputSearch.jsx -var inputSearch_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function inputSearch_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function inputSearch_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function inputSearch_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var inputSearch_InputSearch = function (_React$Component) { - inputSearch_inherits(InputSearch, _React$Component); - - function InputSearch(props) { - inputSearch_classCallCheck(this, InputSearch); - - var _this = inputSearch_possibleConstructorReturn(this, (InputSearch.__proto__ || Object.getPrototypeOf(InputSearch)).call(this, props)); - - _this.onChange = function (e) { - _this.setState({ value: e.target.value }); - _this.debouncedNotify(); - }; - - _this.debouncedNotify = Object(lodash["debounce"])(function () { - _this.props.onChange(_this.state.value); - }, 200); - - var value = props.value || ''; - - _this.state = { - value: value - }; - return _this; - } - - inputSearch_createClass(InputSearch, [{ - key: 'componentDidMount', - value: function componentDidMount() { - // set cursor - var $el = react_dom_default.a.findDOMNode(this); - if ($el) { - var $input = $el.querySelector('input'); - var length = $input.value.length; - $input.selectionEnd = length; - $input.selectionStart = length; - } - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - _props$className = _props.className, - className = _props$className === undefined ? '' : _props$className, - _props$autoFocus = _props.autoFocus, - autoFocus = _props$autoFocus === undefined ? false : _props$autoFocus; - - className = 'grv-search input-group-sm ' + className; - - return react_default.a.createElement( - 'div', - { className: className }, - react_default.a.createElement('input', { placeholder: 'Search...', className: 'form-control', - autoFocus: autoFocus, - value: this.state.value, - onChange: this.onChange }) - ); - } - }]); - - return InputSearch; -}(react_default.a.Component); - -/* harmony default export */ var inputSearch = (inputSearch_InputSearch); -// CONCATENATED MODULE: ./src/app/components/inputSshServer.jsx -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var inputSshServer_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function inputSshServer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function inputSshServer_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function inputSshServer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var SSH_STR_REGEX = /(^\w+@(\S+)$)/; -var PLACEHOLDER_TEXT = 'login@host'; -var DEFAULT_HISTORY_INDEX = -1; - -var KeyEnum = { - UP: 38, - DOWN: 40 -}; - -var inputSshServer_InputSshServer = function (_React$Component) { - inputSshServer_inherits(InputSshServer, _React$Component); - - function InputSshServer() { - var _ref; - - var _temp, _this, _ret; - - inputSshServer_classCallCheck(this, InputSshServer); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = inputSshServer_possibleConstructorReturn(this, (_ref = InputSshServer.__proto__ || Object.getPrototypeOf(InputSshServer)).call.apply(_ref, [this].concat(args))), _this), _this.prevLoginIndex = DEFAULT_HISTORY_INDEX, _this.state = { - hasErrors: false, - value: '' - }, _this.onChange = function (e) { - var value = e.target.value; - var isValid = _this.isValid(value); - if (isValid && _this.state.hasErrors === true) { - _this.setState({ - hasErrors: false, - value: value - }); - } - - _this.setState({ value: value }); - }, _this.onKeyUp = function (e) { - if (_this.getPrevLogins().length === 0) { - return; - } - - var dir = 0; - var keyCode = e.which; - if (keyCode === KeyEnum.UP) { - dir = 1; - } - - if (keyCode === KeyEnum.DOWN) { - dir = -1; - } - - if (dir === 0) { - return; - } - - var login = _this.getNextLogin(dir); - _this.setState({ value: login }); - }, _this.onKeyPress = function (e) { - var value = e.target.value; - var isValid = _this.isValid(value); - if ((e.key === 'Enter' || e.type === 'click') && value) { - _this.setState({ hasErrors: !isValid }); - if (isValid) { - var _value$split = value.split('@'), - _value$split2 = _slicedToArray(_value$split, 2), - login = _value$split2[0], - host = _value$split2[1]; - - _this.props.onEnter(login, host); - } - } - }, _temp), inputSshServer_possibleConstructorReturn(_this, _ret); - } - - inputSshServer_createClass(InputSshServer, [{ - key: 'setDefaultPrevIndex', - value: function setDefaultPrevIndex() { - this.prevLoginIndex = DEFAULT_HISTORY_INDEX; - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(nextProps) { - if (nextProps.clusterId !== this.props.clusterId || nextProps.sshHistory !== this.props.sshHistory) { - this.setDefaultPrevIndex(); - this.setState({ value: '' }); - } - } - }, { - key: 'getPrevLogins', - value: function getPrevLogins() { - var _props = this.props, - sshHistory = _props.sshHistory, - clusterId = _props.clusterId; - - return sshHistory.getPrevLogins(clusterId); - } - }, { - key: 'getNextLogin', - value: function getNextLogin(dir) { - var logins = this.getPrevLogins(); - - if (logins.length === 0) { - return ''; - } - - var index = this.prevLoginIndex + dir; - - if (index < 0) { - this.setDefaultPrevIndex(); - return ''; - } - - if (index >= logins.length) { - index = this.prevLoginIndex; - } else { - this.prevLoginIndex = index; - } - - return logins[this.prevLoginIndex]; - } - }, { - key: 'isValid', - value: function isValid(value) { - var match = SSH_STR_REGEX.exec(value); - return !!match; - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _state = this.state, - value = _state.value, - hasErrors = _state.hasErrors; - var _props$autoFocus = this.props.autoFocus, - autoFocus = _props$autoFocus === undefined ? false : _props$autoFocus; - - var className = classnames_default()('grv-sshserver-input', { '--error': hasErrors }); - return react_default.a.createElement( - 'div', - { className: className }, - react_default.a.createElement( - 'div', - { className: 'm-l input-group-sm', title: 'login to SSH server' }, - react_default.a.createElement('input', { ref: function ref(e) { - _this2.inputRef = e; - }, className: 'form-control', - placeholder: PLACEHOLDER_TEXT, - value: value, - autoFocus: autoFocus, - onChange: this.onChange, - onKeyUp: this.onKeyUp, - onKeyPress: this.onKeyPress - }) - ), - react_default.a.createElement( - 'label', - { className: 'm-l grv-sshserver-input-errors' }, - ' Invalid format ' - ) - ); - } - }]); - - return InputSshServer; -}(react_default.a.Component); - -inputSshServer_InputSshServer.propTypes = { - sshHistory: react["PropTypes"].object.isRequired, - clusterId: react["PropTypes"].string.isRequired, - onEnter: react["PropTypes"].func.isRequired -}; -/* harmony default export */ var inputSshServer = (inputSshServer_InputSshServer); -// CONCATENATED MODULE: ./src/app/components/table/table.jsx -var table_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var table_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function table_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function table_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function table_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var table_TableTextCell = function TableTextCell(_ref) { - var rowIndex = _ref.rowIndex, - data = _ref.data, - columnKey = _ref.columnKey, - props = _objectWithoutProperties(_ref, ['rowIndex', 'data', 'columnKey']); - - return react_default.a.createElement( - table_TableCell, - props, - data[rowIndex][columnKey] - ); -}; - -/** -* Sort indicator used by SortHeaderCell -*/ -var SortTypes = { - ASC: 'ASC', - DESC: 'DESC' -}; - -var table_SortIndicator = function SortIndicator(_ref2) { - var sortDir = _ref2.sortDir; - - var cls = 'grv-table-indicator-sort fa fa-sort'; - if (sortDir === SortTypes.DESC) { - cls += '-desc'; - } - - if (sortDir === SortTypes.ASC) { - cls += '-asc'; - } - - return react_default.a.createElement('i', { className: cls }); -}; - -/** -* Sort Header Cell -*/ - -var table_SortHeaderCell = function (_React$Component) { - table_inherits(SortHeaderCell, _React$Component); - - function SortHeaderCell() { - var _ref3; - - var _temp, _this, _ret; - - table_classCallCheck(this, SortHeaderCell); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = table_possibleConstructorReturn(this, (_ref3 = SortHeaderCell.__proto__ || Object.getPrototypeOf(SortHeaderCell)).call.apply(_ref3, [this].concat(args))), _this), _this.onSortChange = function (e) { - e.preventDefault(); - if (_this.props.onSortChange) { - // default - var newDir = SortTypes.DESC; - if (_this.props.sortDir) { - newDir = _this.props.sortDir === SortTypes.DESC ? SortTypes.ASC : SortTypes.DESC; - } - _this.props.onSortChange(_this.props.columnKey, newDir); - } - }, _temp), table_possibleConstructorReturn(_this, _ret); - } - - table_createClass(SortHeaderCell, [{ - key: 'render', - value: function render() { - var _props = this.props, - sortDir = _props.sortDir, - title = _props.title, - props = _objectWithoutProperties(_props, ['sortDir', 'title']); - - return react_default.a.createElement( - table_TableCell, - props, - react_default.a.createElement( - 'a', - { onClick: this.onSortChange }, - title - ), - react_default.a.createElement(table_SortIndicator, { sortDir: sortDir }) - ); - } - }]); - - return SortHeaderCell; -}(react_default.a.Component); - -/** -* Default Cell -*/ - - -var table_TableCell = function TableCell(props) { - var isHeader = props.isHeader, - children = props.children, - _props$className = props.className, - className = _props$className === undefined ? '' : _props$className; - - className = 'grv-table-cell ' + className; - return isHeader ? react_default.a.createElement( - 'th', - { className: className }, - children - ) : react_default.a.createElement( - 'td', - null, - children - ); -}; - -/** -* Table -*/ - -var table_Table = function (_React$Component2) { - table_inherits(Table, _React$Component2); - - function Table() { - table_classCallCheck(this, Table); - - return table_possibleConstructorReturn(this, (Table.__proto__ || Object.getPrototypeOf(Table)).apply(this, arguments)); - } - - table_createClass(Table, [{ - key: 'renderHeader', - value: function renderHeader(children) { - var _this3 = this; - - var data = this.props.data; - - var cells = children.map(function (item, index) { - return _this3.renderCell(item.props.header, table_extends({ - index: index, - key: index, - isHeader: true, - data: data - }, item.props)); - }); - - return react_default.a.createElement( - 'thead', - { className: 'grv-table-header' }, - react_default.a.createElement( - 'tr', - null, - cells - ) - ); - } - }, { - key: 'renderBody', - value: function renderBody(children) { - var _this4 = this; - - var data = this.props.data; - - var count = this.props.rowCount; - var rows = []; - for (var i = 0; i < count; i++) { - var cells = children.map(function (item, index) { - return _this4.renderCell(item.props.cell, table_extends({ - rowIndex: i, - key: index, - isHeader: false, - data: data - }, item.props)); - }); - - rows.push(react_default.a.createElement( - 'tr', - { key: i }, - cells - )); - } - - return react_default.a.createElement( - 'tbody', - null, - rows - ); - } - }, { - key: 'renderCell', - value: function renderCell(cell, cellProps) { - var content = null; - if (react_default.a.isValidElement(cell)) { - content = react_default.a.cloneElement(cell, cellProps); - } else if (typeof cell === 'function') { - content = cell(cellProps); - } - - return content; - } - }, { - key: 'render', - value: function render() { - var children = []; - react_default.a.Children.forEach(this.props.children, function (child) { - if (child == null) { - return; - } - - if (!child.props._isColumn) { - throw 'Should be Column'; - } - - children.push(child); - }); - - var tableClass = 'table grv-table ' + this.props.className; - - return react_default.a.createElement( - 'table', - { className: tableClass }, - this.renderHeader(children), - this.renderBody(children) - ); - } - }]); - - return Table; -}(react_default.a.Component); - -var Column = function (_React$Component3) { - table_inherits(Column, _React$Component3); - - function Column() { - table_classCallCheck(this, Column); - - return table_possibleConstructorReturn(this, (Column.__proto__ || Object.getPrototypeOf(Column)).apply(this, arguments)); - } - - table_createClass(Column, [{ - key: 'render', - value: function render() { - throw new Error('Component should never render'); - } - }]); - - return Column; -}(react_default.a.Component); - -Column.defaultProps = { - _isColumn: true -}; - - -var table_EmptyIndicator = function EmptyIndicator(_ref4) { - var text = _ref4.text; - return react_default.a.createElement( - 'div', - { className: 'grv-table-indicator-empty text-muted' }, - react_default.a.createElement( - 'span', - null, - text - ) - ); -}; - -/* harmony default export */ var table = (table_Table); - -// CONCATENATED MODULE: ./src/app/flux/sites/getters.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var SiteStatusEnum = { - ONLINE: 'online', - OFFLINE: 'offline' -}; - -var onlyOnline = function onlyOnline(s) { - return s.status === SiteStatusEnum.ONLINE; -}; - -var getters_sites = [['tlpt_sites'], function (siteList) { - return siteList.filter(onlyOnline).toArray(); -}]; - -/* harmony default export */ var sites_getters = ({ - sites: getters_sites -}); -// CONCATENATED MODULE: ./src/app/components/dropdown.jsx -var dropdown_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function dropdown_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function dropdown_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function dropdown_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var dropdown_DropDown = function (_React$Component) { - dropdown_inherits(DropDown, _React$Component); - - function DropDown() { - var _ref; - - var _temp, _this, _ret; - - dropdown_classCallCheck(this, DropDown); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = dropdown_possibleConstructorReturn(this, (_ref = DropDown.__proto__ || Object.getPrototypeOf(DropDown)).call.apply(_ref, [this].concat(args))), _this), _this.onClick = function (event) { - event.preventDefault(); - var options = _this.props.options; - - var index = jquery_default()(event.target).parent().index(); - var option = options[index]; - var value = Object(lodash["isObject"])(option) ? option.value : option; - - _this.props.onChange(value); - }, _temp), dropdown_possibleConstructorReturn(_this, _ret); - } - - dropdown_createClass(DropDown, [{ - key: 'renderOption', - value: function renderOption(option, index) { - var displayValue = Object(lodash["isObject"])(option) ? option.label : option; - return react_default.a.createElement( - 'li', - { key: index }, - react_default.a.createElement( - 'a', - { href: '#' }, - displayValue - ) - ); - } - }, { - key: 'getDisplayValue', - value: function getDisplayValue(value) { - var _props$options = this.props.options, - options = _props$options === undefined ? [] : _props$options; - - for (var i = 0; i < options.length; i++) { - var op = options[i]; - if (Object(lodash["isObject"])(op) && op.value === value) { - return op.label; - } - - if (op === value) { - return value; - } - } - - return null; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - options = _props.options, - value = _props.value, - classRules = _props.classRules, - _props$className = _props.className, - className = _props$className === undefined ? '' : _props$className, - name = _props.name, - _props$size = _props.size, - size = _props$size === undefined ? 'default' : _props$size, - _props$align = _props.align, - align = _props$align === undefined ? 'left' : _props$align; - - var $options = options.map(this.renderOption); - var hiddenValue = value; - var displayValue = this.getDisplayValue(value); - - displayValue = displayValue || 'Select...'; - - var valueClass = classnames_default()('grv-dropdown-value', { - 'text-muted': !hiddenValue - }); - - var mainClass = 'grv-dropdown ' + className; - - var btnClass = classnames_default()('btn btn-default full-width dropdown-toggle', { - 'btn-sm': size === 'sm' - }); - - var menuClass = classnames_default()('dropdown-menu', { - 'pull-right': align === 'right' - }); - - var $menu = options.length > 0 ? react_default.a.createElement( - 'ul', - { onClick: this.onClick, className: menuClass }, - $options - ) : null; - - return react_default.a.createElement( - 'div', - { className: mainClass }, - react_default.a.createElement( - 'div', - { className: 'dropdown' }, - react_default.a.createElement( - 'div', - { className: btnClass, - type: 'button', - 'data-toggle': 'dropdown' }, - react_default.a.createElement( - 'div', - { className: valueClass }, - react_default.a.createElement( - 'span', - { style: { textOverflow: "ellipsis", overflow: "hidden" } }, - displayValue - ), - react_default.a.createElement('span', { className: 'caret m-l-sm' }) - ) - ), - $menu - ), - react_default.a.createElement('input', { className: classRules, - value: hiddenValue, - type: 'hidden', - ref: 'input', - name: name }) - ); - } - }]); - - return DropDown; -}(react_default.a.Component); - -/* harmony default export */ var dropdown = (dropdown_DropDown); -// CONCATENATED MODULE: ./src/app/flux/nodes/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var TLPT_NODES_RECEIVE = 'TLPT_NODES_RECEIVE'; -// CONCATENATED MODULE: ./src/app/flux/nodes/actions.js - - - - - - -var nodes_actions_logger = logger["a" /* default */].create('Modules/Nodes'); - -function fetchNodes() { - var siteId = app_reactor["a" /* default */].evaluate(app_getters["a" /* default */].siteId); - return api["a" /* default */].get(config["a" /* default */].api.getSiteNodesUrl(siteId)).then(function (res) { - return res.items || []; - }).done(function (items) { - return app_reactor["a" /* default */].dispatch(TLPT_NODES_RECEIVE, items); - }).fail(function (err) { - return nodes_actions_logger.error('fetchNodes', err); - }); -} -// CONCATENATED MODULE: ./src/app/flux/app/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var SET_SITE_ID = 'TLPT_APP_SET_SITE_ID'; -var ADD_NAV_ITEM = 'TLPT_APP_ADD_NAV_ITEM'; -// CONCATENATED MODULE: ./src/app/flux/sites/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var RECEIVE_CLUSTERS = 'TLPT_CLUSTER_RECEIVE'; -// CONCATENATED MODULE: ./src/app/flux/userAcl/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var RECEIVE_USERACL = 'TLPT_USERACL_RECEIVE'; -// EXTERNAL MODULE: ./src/app/flux/sessions/actions.js -var sessions_actions = __webpack_require__("CtRu"); - -// CONCATENATED MODULE: ./src/app/flux/app/actions.js -function actions_toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - - -var app_actions_logger = logger["a" /* default */].create('flux/app'); - -function addNavItem(item) { - app_reactor["a" /* default */].dispatch(ADD_NAV_ITEM, item); -} - -function setSiteId(siteId) { - app_reactor["a" /* default */].dispatch(SET_SITE_ID, siteId); -} - -function initApp(siteId, featureActivator) { - initAppStatus.start(); - // get the list of available clusters - return fetchInitData(siteId).done(function () { - featureActivator.onload(); - initAppStatus.success(); - }).fail(function (err) { - var msg = api["a" /* default */].getErrorText(err); - initAppStatus.fail(msg); - }); -} - -function fetchInitData(siteId) { - return jquery_default.a.when(fetchSites(), fetchUserContext()).then(function (masterSiteId) { - var selectedCluster = siteId || masterSiteId; - setSiteId(selectedCluster); - return jquery_default.a.when(fetchNodes(), Object(sessions_actions["a" /* fetchActiveSessions */])()); - }); -} - -function fetchSites() { - return api["a" /* default */].get(config["a" /* default */].api.sitesBasePath).then(function (json) { - var trusted = json.trusted || []; - var allClusters = [json.current].concat(actions_toConsumableArray(trusted)); - app_reactor["a" /* default */].dispatch(RECEIVE_CLUSTERS, allClusters); - return json.current.name; - }).fail(function (err) { - app_actions_logger.error('fetchSites', err); - }); -} - -function fetchUserContext() { - return api["a" /* default */].get(config["a" /* default */].api.userContextPath).done(function (json) { - app_reactor["a" /* default */].dispatch(RECEIVE_USER, { name: json.userName, authType: json.authType }); - app_reactor["a" /* default */].dispatch(RECEIVE_USERACL, json.userAcl); - app_actions_logger.info("Teleport ver:", json.version); - }); -} -// CONCATENATED MODULE: ./src/app/components/clusterSelector.jsx -var clusterSelector_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function clusterSelector_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function clusterSelector_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function clusterSelector_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - -var clusterSelector_ClusterSelector = function (_React$Component) { - clusterSelector_inherits(ClusterSelector, _React$Component); - - function ClusterSelector() { - var _ref; - - var _temp, _this, _ret; - - clusterSelector_classCallCheck(this, ClusterSelector); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = clusterSelector_possibleConstructorReturn(this, (_ref = ClusterSelector.__proto__ || Object.getPrototypeOf(ClusterSelector)).call.apply(_ref, [this].concat(args))), _this), _this.onChangeSite = function (value) { - setSiteId(value); - fetchNodes(); - Object(sessions_actions["a" /* fetchActiveSessions */])(); - }, _temp), clusterSelector_possibleConstructorReturn(_this, _ret); - } - - clusterSelector_createClass(ClusterSelector, [{ - key: 'render', - value: function render() { - var _props = this.props, - sites = _props.sites, - siteId = _props.siteId; - - var siteOptions = sites.map(function (s) { - return { - label: s.name, - value: s.name - }; - }); - - if (siteOptions.length === 1 && isUUID(siteOptions[0].value)) { - siteOptions[0].label = location.hostname; - } - - return react_default.a.createElement( - 'div', - { className: 'grv-clusters-selector' }, - react_default.a.createElement( - 'div', - { className: 'm-r-sm' }, - 'Cluster:' - ), - react_default.a.createElement(dropdown, { - className: 'm-r-sm', - size: 'sm', - align: 'right', - onChange: this.onChangeSite, - value: siteId, - options: siteOptions - }) - ); - } - }]); - - return ClusterSelector; -}(react_default.a.Component); - -function clusterSelector_mapStateToProps() { - return { - sites: sites_getters.sites, - siteId: app_getters["a" /* default */].siteId - }; -} - -/* harmony default export */ var clusterSelector = (Object(build["connect"])(clusterSelector_mapStateToProps)(clusterSelector_ClusterSelector)); -// CONCATENATED MODULE: ./src/app/components/table/pagedTable.jsx -var pagedTable_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var PagedTable = react_default.a.createClass({ - displayName: 'PagedTable', - onPrev: function onPrev() { - var _state = this.state, - startFrom = _state.startFrom, - pageSize = _state.pageSize; - - - startFrom = startFrom - pageSize; - - if (startFrom < 0) { - startFrom = 0; - } - - this.setState({ - startFrom: startFrom - }); - }, - onNext: function onNext() { - var _props$data = this.props.data, - data = _props$data === undefined ? [] : _props$data; - var _state2 = this.state, - startFrom = _state2.startFrom, - pageSize = _state2.pageSize; - - var newStartFrom = startFrom + pageSize; - - if (newStartFrom < data.length) { - newStartFrom = startFrom + pageSize; - this.setState({ - startFrom: newStartFrom - }); - } - }, - getInitialState: function getInitialState() { - var _props$pageSize = this.props.pageSize, - pageSize = _props$pageSize === undefined ? 7 : _props$pageSize; - - return { - startFrom: 0, - pageSize: pageSize - }; - }, - componentWillReceiveProps: function componentWillReceiveProps(newProps) { - var newData = newProps.data || []; - var oldData = this.props.data || []; - // if data length changes, reset paging - if (newData.length !== oldData.length) { - this.setState({ startFrom: 0 }); - } - }, - render: function render() { - var _state3 = this.state, - startFrom = _state3.startFrom, - pageSize = _state3.pageSize; - var _props = this.props, - _props$data2 = _props.data, - data = _props$data2 === undefined ? [] : _props$data2, - _props$tableClass = _props.tableClass, - tableClass = _props$tableClass === undefined ? '' : _props$tableClass, - _props$className = _props.className, - className = _props$className === undefined ? '' : _props$className; - - var totalRows = data.length; - - var endAt = 0; - var pagedData = data; - - if (data.length > 0) { - endAt = startFrom + (pageSize > data.length ? data.length : pageSize); - - if (endAt > data.length) { - endAt = data.length; - } - - pagedData = data.slice(startFrom, endAt); - } - - var tableProps = pagedTable_extends({}, this.props, { - rowCount: pagedData.length, - data: pagedData - }); - - var infoProps = { - pageSize: pageSize, - startFrom: startFrom, - endAt: endAt, - totalRows: totalRows - }; - - return react_default.a.createElement( - 'div', - { className: className }, - react_default.a.createElement(pagedTable_PageInfo, pagedTable_extends({}, infoProps, { onPrev: this.onPrev, onNext: this.onNext })), - react_default.a.createElement( - 'div', - { className: tableClass }, - react_default.a.createElement(table_Table, tableProps) - ), - react_default.a.createElement(pagedTable_PageInfo, pagedTable_extends({}, infoProps, { onPrev: this.onPrev, onNext: this.onNext })) - ); - } -}); - -var pagedTable_PageInfo = function PageInfo(props) { - var startFrom = props.startFrom, - endAt = props.endAt, - totalRows = props.totalRows, - onPrev = props.onPrev, - onNext = props.onNext, - pageSize = props.pageSize; - - - var shouldBeDisplayed = totalRows > pageSize; - - if (!shouldBeDisplayed) { - return null; - } - - var prevBtnClass = classnames_default()('btn btn-white', { - 'disabled': startFrom === 0 - }); - - var nextBtnClass = classnames_default()('btn btn-white', { - 'disabled': endAt === totalRows - }); - - return react_default.a.createElement( - 'div', - { className: 'm-b-sm grv-table-paged-info' }, - react_default.a.createElement( - 'span', - { className: 'm-r-sm' }, - react_default.a.createElement( - 'span', - { className: 'text-muted' }, - 'Showing ' - ), - react_default.a.createElement( - 'span', - { className: 'font-bold' }, - startFrom + 1 - ), - react_default.a.createElement( - 'span', - { className: 'text-muted' }, - ' to ' - ), - react_default.a.createElement( - 'span', - { className: 'font-bold' }, - endAt - ), - react_default.a.createElement( - 'span', - { className: 'text-muted' }, - ' of ' - ), - react_default.a.createElement( - 'span', - { className: 'font-bold' }, - totalRows - ) - ), - react_default.a.createElement( - 'div', - { className: 'btn-group btn-group-sm' }, - react_default.a.createElement( - 'a', - { onClick: onPrev, className: prevBtnClass, type: 'button' }, - 'Prev' - ), - react_default.a.createElement( - 'a', - { onClick: onNext, className: nextBtnClass, type: 'button' }, - 'Next' - ) - ) - ); -}; - -/* harmony default export */ var pagedTable = (PagedTable); - - -// CONCATENATED MODULE: ./src/app/components/nodes/nodeList.jsx -var nodeList_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function nodeList_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function nodeList_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function nodeList_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function nodeList_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function nodeList_objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - -var nodeList_EmptyValue = function EmptyValue(_ref) { - var _ref$text = _ref.text, - text = _ref$text === undefined ? 'Empty' : _ref$text; - return react_default.a.createElement( - 'small', - { className: 'text-muted' }, - react_default.a.createElement( - 'span', - null, - text - ) - ); -}; - -var nodeList_Tunnel = function Tunnel() { - return react_default.a.createElement( - 'span', - { style: { cursor: "default" }, title: 'This node is connected to cluster through reverse tunnel' }, - '\u27F5 tunnel' - ); -}; - -var nodeList_AddressCell = function AddressCell(_ref2) { - var rowIndex = _ref2.rowIndex, - data = _ref2.data, - props = nodeList_objectWithoutProperties(_ref2, ['rowIndex', 'data']); - - var _data$rowIndex = data[rowIndex], - addr = _data$rowIndex.addr, - tunnel = _data$rowIndex.tunnel; - - return react_default.a.createElement( - table_TableCell, - props, - tunnel ? react_default.a.createElement(nodeList_Tunnel, null) : addr - ); -}; - -var nodeList_TagCell = function TagCell(_ref3) { - var rowIndex = _ref3.rowIndex, - data = _ref3.data, - props = nodeList_objectWithoutProperties(_ref3, ['rowIndex', 'data']); - - var tags = data[rowIndex].tags; - - var $content = tags.map(function (item, index) { - return react_default.a.createElement( - 'span', - { key: index, title: item.name + ':' + item.value, className: 'label label-default grv-nodes-table-label' }, - item.name, - ' ', - react_default.a.createElement('li', { className: 'fa fa-long-arrow-right m-r-xs' }), - item.value - ); - }); - - if ($content.length === 0) { - $content = react_default.a.createElement(nodeList_EmptyValue, { text: 'No assigned labels' }); - } - - return react_default.a.createElement( - table_TableCell, - props, - $content - ); -}; - -var nodeList_LoginCell = function (_React$Component) { - nodeList_inherits(LoginCell, _React$Component); - - function LoginCell() { - var _ref4; - - var _temp, _this, _ret; - - nodeList_classCallCheck(this, LoginCell); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = nodeList_possibleConstructorReturn(this, (_ref4 = LoginCell.__proto__ || Object.getPrototypeOf(LoginCell)).call.apply(_ref4, [this].concat(args))), _this), _this.onKeyPress = function (e) { - if (e.key === 'Enter' && e.target.value) { - var url = _this.makeUrl(e.target.value); - services_history.push(url); - } - }, _this.onShowLoginsClick = function (e) { - e.stopPropagation(); - e.nativeEvent.stopImmediatePropagation(); - _this.refs.customLogin.focus(); - }, _temp), nodeList_possibleConstructorReturn(_this, _ret); - } - - nodeList_createClass(LoginCell, [{ - key: 'makeUrl', - value: function makeUrl(login) { - var _props = this.props, - data = _props.data, - rowIndex = _props.rowIndex; - var _data$rowIndex2 = data[rowIndex], - siteId = _data$rowIndex2.siteId, - id = _data$rowIndex2.id; - - return config["a" /* default */].getTerminalLoginUrl({ - siteId: siteId, - serverId: id, - login: login - }); - } - }, { - key: 'render', - value: function render() { - var _props2 = this.props, - logins = _props2.logins, - props = nodeList_objectWithoutProperties(_props2, ['logins']); - - var $lis = []; - var defaultLogin = logins[0] || ''; - var defaultTermUrl = this.makeUrl(defaultLogin); - - for (var i = 0; i < logins.length; i++) { - var termUrl = this.makeUrl(logins[i]); - $lis.push(react_default.a.createElement( - 'li', - { key: i }, - react_default.a.createElement( - lib["Link"], - { to: termUrl }, - logins[i] - ) - )); - } - - return react_default.a.createElement( - table_TableCell, - props, - react_default.a.createElement( - 'div', - { style: { display: "flex", justifyContent: "flex-end" } }, - logins.length === 0 && react_default.a.createElement(nodeList_EmptyValue, { text: 'No assigned logins' }), - logins.length > 0 && react_default.a.createElement( - 'div', - { style: { display: "flex" }, className: 'btn-group' }, - react_default.a.createElement( - lib["Link"], - { className: 'btn btn-xs btn-primary', to: defaultTermUrl }, - defaultLogin - ), - react_default.a.createElement( - 'button', - { 'data-toggle': 'dropdown', - onClick: this.onShowLoginsClick, - className: 'btn btn-default btn-xs dropdown-toggle' }, - react_default.a.createElement('span', { className: 'caret' }) - ), - react_default.a.createElement( - 'ul', - { className: 'dropdown-menu pull-right' }, - react_default.a.createElement( - 'li', - null, - react_default.a.createElement( - 'div', - { className: 'input-group-sm grv-nodes-custom-login' }, - react_default.a.createElement('input', { className: 'form-control', ref: 'customLogin', - placeholder: 'Enter login name...', - onKeyPress: this.onKeyPress, - autoFocus: true - }) - ) - ), - $lis - ) - ) - ) - ); - } - }]); - - return LoginCell; -}(react_default.a.Component); - -var nodeList_NodeList = function (_React$Component2) { - nodeList_inherits(NodeList, _React$Component2); - - function NodeList(props) { - nodeList_classCallCheck(this, NodeList); - - var _this2 = nodeList_possibleConstructorReturn(this, (NodeList.__proto__ || Object.getPrototypeOf(NodeList)).call(this, props)); - - _this2.storageKey = 'NodeList'; - _this2.searchableProps = ['addr', 'hostname', 'tags']; - - _this2.onSortChange = function (columnKey, sortDir) { - _this2.state.colSortDirs = nodeList_defineProperty({}, columnKey, sortDir); - _this2.setState(_this2.state); - }; - - _this2.onFilterChange = function (value) { - _this2.state.filter = value; - _this2.setState(_this2.state); - }; - - _this2.onSshInputEnter = function (login, host) { - var url = config["a" /* default */].getTerminalLoginUrl({ - siteId: _this2.props.siteId, - serverId: host, - login: login - }); - - services_history.push(url); - }; - - if (props.storage) { - _this2.state = props.storage.findByKey(_this2.storageKey); - } - - if (!_this2.state) { - _this2.state = { filter: '', colSortDirs: { hostname: SortTypes.DESC } }; - } - return _this2; - } - - nodeList_createClass(NodeList, [{ - key: 'componentWillUnmount', - value: function componentWillUnmount() { - if (this.props.storage) { - this.props.storage.save(this.storageKey, this.state); - } - } - }, { - key: 'searchAndFilterCb', - value: function searchAndFilterCb(targetValue, searchValue, propName) { - if (propName === 'tags') { - return targetValue.some(function (item) { - var name = item.name, - value = item.value; - - return name.toLocaleUpperCase().indexOf(searchValue) !== -1 || value.toLocaleUpperCase().indexOf(searchValue) !== -1; - }); - } - } - }, { - key: 'sortAndFilter', - value: function sortAndFilter(data) { - var _this3 = this; - - var colSortDirs = this.state.colSortDirs; - - var filtered = data.filter(function (obj) { - return isMatch(obj, _this3.state.filter, { - searchableProps: _this3.searchableProps, - cb: _this3.searchAndFilterCb - }); - }); - - var columnKey = Object.getOwnPropertyNames(colSortDirs)[0]; - var sortDir = colSortDirs[columnKey]; - var sorted = Object(lodash["sortBy"])(filtered, columnKey); - if (sortDir === SortTypes.ASC) { - sorted = sorted.reverse(); - } - - return sorted; - } - }, { - key: 'render', - value: function render() { - var _props3 = this.props, - sshHistory = _props3.sshHistory, - siteId = _props3.siteId, - nodeRecords = _props3.nodeRecords, - logins = _props3.logins, - onLoginClick = _props3.onLoginClick; - - var searchValue = this.state.filter; - var data = this.sortAndFilter(nodeRecords); - return react_default.a.createElement( - 'div', - { className: 'grv-nodes m-t' }, - react_default.a.createElement( - 'div', - { className: 'grv-flex grv-header', style: { justifyContent: "space-between" } }, - react_default.a.createElement( - 'h2', - { className: 'text-center no-margins' }, - ' Nodes ' - ), - react_default.a.createElement( - 'div', - { className: 'grv-flex' }, - react_default.a.createElement(clusterSelector, null), - react_default.a.createElement(inputSearch, { autoFocus: true, value: searchValue, onChange: this.onFilterChange }), - react_default.a.createElement(inputSshServer, { - clusterId: siteId, - sshHistory: sshHistory, - onEnter: this.onSshInputEnter }) - ) - ), - react_default.a.createElement( - 'div', - { className: 'm-t' }, - data.length === 0 && this.state.filter.length > 0 ? react_default.a.createElement(table_EmptyIndicator, { text: 'No matching nodes found' }) : react_default.a.createElement( - PagedTable, - { className: 'grv-nodes-table', tableClass: 'table-striped', data: data, pageSize: 100 }, - react_default.a.createElement(Column, { - columnKey: 'hostname', - header: react_default.a.createElement(table_SortHeaderCell, { - sortDir: this.state.colSortDirs.hostname, - onSortChange: this.onSortChange, - title: 'Hostname' - }), - cell: react_default.a.createElement(table_TableTextCell, null) - }), - react_default.a.createElement(Column, { - header: react_default.a.createElement(table_SortHeaderCell, { - sortDir: this.state.colSortDirs.addr, - onSortChange: this.onSortChange, - title: 'Address' - }), - cell: react_default.a.createElement(nodeList_AddressCell, null) - }), - react_default.a.createElement(Column, { - header: react_default.a.createElement( - table_TableCell, - null, - 'Labels' - ), - cell: react_default.a.createElement(nodeList_TagCell, null) - }), - react_default.a.createElement(Column, { - className: 'grv-nodes-table-login', - onLoginClick: onLoginClick, - header: react_default.a.createElement( - table_TableCell, - null, - 'Login as' - ), - cell: react_default.a.createElement(nodeList_LoginCell, { logins: logins }) - }) - ) - ) - ); - } - }]); - - return NodeList; -}(react_default.a.Component); - -/* harmony default export */ var nodeList = (nodeList_NodeList); -// EXTERNAL MODULE: ./node_modules/nuclear-js/dist/nuclear.js -var nuclear = __webpack_require__("L7e8"); - -// EXTERNAL MODULE: ./node_modules/immutable/dist/immutable.js -var immutable = __webpack_require__("JPcv"); - -// CONCATENATED MODULE: ./src/app/flux/sshHistory/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -var ADD_ITEM = 'TLPT_SSH_HISTORY'; -// CONCATENATED MODULE: ./src/app/flux/sshHistory/store.js -var store_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function store_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function store_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function store_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var store_STORE_NAME = 'tlpt_ssh_history'; - -var SshHistoryRec = function (_Record) { - store_inherits(SshHistoryRec, _Record); - - function SshHistoryRec(params) { - store_classCallCheck(this, SshHistoryRec); - - return store_possibleConstructorReturn(this, (SshHistoryRec.__proto__ || Object.getPrototypeOf(SshHistoryRec)).call(this, params)); - } - - store_createClass(SshHistoryRec, [{ - key: 'getPrevLogins', - value: function getPrevLogins(siteId) { - return this.clusterLogins.get(siteId) || []; - } - }, { - key: 'addLoginString', - value: function addLoginString(_ref) { - var login = _ref.login, - serverId = _ref.serverId, - siteId = _ref.siteId; - - var logins = this.getIn(['clusterLogins', siteId]); - if (!logins) { - logins = []; - } - - var loginStr = login + '@' + serverId; - var exists = logins.some(function (i) { - return i === loginStr; - }); - - if (exists) { - return this; - } - - logins.unshift(loginStr); - return this.setIn(['clusterLogins', siteId], logins); - } - }]); - - return SshHistoryRec; -}(Object(immutable["Record"])({ - clusterLogins: new immutable["Map"]() -})); - -var store_store = Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new SshHistoryRec(); - }, - initialize: function initialize() { - this.on(ADD_ITEM, function (state, params) { - return state.addLoginString(params); - }); - } -}); - -var store_register = function register(reactor) { - reactor.registerStores(store_defineProperty({}, store_STORE_NAME, store_store)); -}; - -var store_getters = { - store: [store_STORE_NAME] -}; -// CONCATENATED MODULE: ./src/app/flux/misc/store.js -function misc_store_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var SET = 'MISC_SET'; -var misc_store_STORE_NAME = 'tlpt_misc'; - -// stores any temporary data -var misc_store_store = Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new nuclear["Immutable"].Map(); - }, - initialize: function initialize() { - this.on(SET, function (state, _ref) { - var key = _ref.key, - payload = _ref.payload; - return state.set(key, payload); - }); - } -}); - -var misc_store_register = function register(reactor) { - reactor.registerStores(misc_store_defineProperty({}, misc_store_STORE_NAME, misc_store_store)); -}; - -var store_storage = { - save: function save(key, payload) { - app_reactor["a" /* default */].dispatch(SET, { key: key, payload: payload }); - }, - findByKey: function findByKey(key) { - return app_reactor["a" /* default */].evaluate([misc_store_STORE_NAME, key]); - } -}; -// CONCATENATED MODULE: ./src/app/components/withStorage.jsx -var withStorage_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var withStorage_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function withStorage_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function withStorage_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function withStorage_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var withStorage_withStorage = function withStorage(component) { - var _class, _temp; - - return _temp = _class = function (_React$Component) { - withStorage_inherits(WithTmpStorageWrapper, _React$Component); - - function WithTmpStorageWrapper(props, context) { - withStorage_classCallCheck(this, WithTmpStorageWrapper); - - return withStorage_possibleConstructorReturn(this, (WithTmpStorageWrapper.__proto__ || Object.getPrototypeOf(WithTmpStorageWrapper)).call(this, props, context)); - } - - withStorage_createClass(WithTmpStorageWrapper, [{ - key: 'render', - value: function render() { - var props = this.props; - return react_default.a.createElement(component, withStorage_extends({}, props, { - storage: store_storage - })); - } - }]); - - return WithTmpStorageWrapper; - }(react_default.a.Component), _class.displayName = 'withTmpStorageWrapper', _temp; -}; - -/* harmony default export */ var components_withStorage = (withStorage_withStorage); -// CONCATENATED MODULE: ./src/app/components/nodes/main.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - -var main_Nodes = function Nodes(props) { - var siteNodes = props.siteNodes, - sshHistory = props.sshHistory, - aclStore = props.aclStore, - sites = props.sites, - siteId = props.siteId, - storage = props.storage; - - var logins = aclStore.getSshLogins().toJS(); - var nodeRecords = siteNodes.toJS(); - var title = siteId + ' \xB7 Nodes'; - return react_default.a.createElement( - 'div', - { className: 'grv-page' }, - react_default.a.createElement( - DocumentTitle, - { title: title }, - react_default.a.createElement(nodeList, { - sshHistory: sshHistory, - storage: storage, - siteId: siteId, - sites: sites, - nodeRecords: nodeRecords, - logins: logins - }) - ) - ); -}; - -function main_mapStateToProps() { - return { - siteId: app_getters["a" /* default */].siteId, - siteNodes: nodes_getters.siteNodes, - aclStore: userAcl_getters.userAcl, - sshHistory: store_getters.store - }; -} - -var NodesWithStorage = components_withStorage(main_Nodes); - -/* harmony default export */ var main = (Object(build["connect"])(main_mapStateToProps)(NodesWithStorage)); -// CONCATENATED MODULE: ./src/app/components/indicator.jsx -var indicator_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function indicator_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function indicator_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function indicator_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - - - -var WHEN_TO_DISPLAY = 100; // 0.2s; - -var indicator_Indicator = function (_React$Component) { - indicator_inherits(Indicator, _React$Component); - - function Indicator(props) { - indicator_classCallCheck(this, Indicator); - - var _this = indicator_possibleConstructorReturn(this, (Indicator.__proto__ || Object.getPrototypeOf(Indicator)).call(this, props)); - - _this._timer = null; - _this.state = { - canDisplay: false - }; - return _this; - } - - indicator_createClass(Indicator, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _this2 = this; - - this._timer = setTimeout(function () { - _this2.setState({ - canDisplay: true - }); - }, WHEN_TO_DISPLAY); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - clearTimeout(this._timer); - } - }, { - key: 'render', - value: function render() { - var _props$type = this.props.type, - type = _props$type === undefined ? 'bounce' : _props$type; - - - if (!this.state.canDisplay) { - return null; - } - - if (type === 'bounce') { - return react_default.a.createElement(indicator_ThreeBounce, null); - } - } - }]); - - return Indicator; -}(react_default.a.Component); - -var indicator_ThreeBounce = function ThreeBounce() { - return react_default.a.createElement( - 'div', - { className: 'grv-spinner sk-spinner sk-spinner-three-bounce' }, - react_default.a.createElement('div', { className: 'sk-bounce1' }), - react_default.a.createElement('div', { className: 'sk-bounce2' }), - react_default.a.createElement('div', { className: 'sk-bounce3' }) - ); -}; - -/* harmony default export */ var indicator = (indicator_Indicator); -// CONCATENATED MODULE: ./src/app/components/withFeature.jsx -var withFeature_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var withFeature_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function withFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function withFeature_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function withFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -var withFeature_logger = logger["a" /* default */].create('components/withFeature'); - -var withFeature_withFeature = function withFeature(feature) { - return function (component) { - var _class, _temp; - - return _temp = _class = function (_React$Component) { - withFeature_inherits(WithFeatureWrapper, _React$Component); - - function WithFeatureWrapper(props, context) { - withFeature_classCallCheck(this, WithFeatureWrapper); - - var _this = withFeature_possibleConstructorReturn(this, (WithFeatureWrapper.__proto__ || Object.getPrototypeOf(WithFeatureWrapper)).call(this, props, context)); - - _this._unsubscribeFn = null; - return _this; - } - - withFeature_createClass(WithFeatureWrapper, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _this2 = this; - - try { - this._unsubscribeFn = app_reactor["a" /* default */].observe(feature.initAttemptGetter, function () { - _this2.setState({}); - }); - - app_reactor["a" /* default */].batch(function () { - feature.componentDidMount(); - }); - } catch (err) { - withFeature_logger.error('failed to initialize a feature', err); - } - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this._unsubscribeFn(); - } - }, { - key: 'render', - value: function render() { - if (feature.isProcessing()) { - return react_default.a.createElement(indicator, { delay: 'long', type: 'bounce' }); - } - - if (feature.isFailed()) { - var errorText = feature.getErrorText(); - if (feature.getErrorCode() === RestRespCodeEnum.FORBIDDEN) { - return react_default.a.createElement(msgPage_AccessDenied, { message: errorText }); - } - return react_default.a.createElement(msgPage_Failed, { message: errorText }); - } - - if (!feature.wasInitialized()) { - return null; - } - - var props = this.props; - return react_default.a.createElement(component, withFeature_extends({}, props, { - feature: feature - })); - } - }]); - - return WithFeatureWrapper; - }(react_default.a.Component), _class.displayName = 'withFeatureWrapper', _temp; - }; -}; - -/* harmony default export */ var components_withFeature = (withFeature_withFeature); -// CONCATENATED MODULE: ./src/app/featureBase.js -var featureBase_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function featureBase_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - - - - - - - - - -var _featureId = 0; - -var ensureActionType = function ensureActionType(actionType) { - if (!actionType) { - ++_featureId; - return 'TRYING_TO_INIT_FEATURE_' + _featureId; - } - - return actionType; -}; - -var featureBase_FeatureBase = function () { - function FeatureBase(actionType) { - featureBase_classCallCheck(this, FeatureBase); - - actionType = ensureActionType(actionType); - this.initStatus = makeStatus(ensureActionType(actionType)); - this.initAttemptGetter = Object(getters["e" /* makeGetter */])(actionType); - } - - featureBase_createClass(FeatureBase, [{ - key: 'preload', - value: function preload() { - return jquery_default.a.Deferred().resolve(); - } - }, { - key: 'onload', - value: function onload() {} - }, { - key: 'startProcessing', - value: function startProcessing() { - this.initStatus.start(); - } - }, { - key: 'stopProcessing', - value: function stopProcessing() { - this.initStatus.success(); - } - }, { - key: 'isReady', - value: function isReady() { - return this._getInitAttempt().isSuccess; - } - }, { - key: 'isProcessing', - value: function isProcessing() { - return this._getInitAttempt().isProcessing; - } - }, { - key: 'isFailed', - value: function isFailed() { - return this._getInitAttempt().isFailed; - } - }, { - key: 'wasInitialized', - value: function wasInitialized() { - var attempt = this._getInitAttempt(); - return attempt.isFailed || attempt.isProcessing || attempt.isSuccess; - } - }, { - key: 'componentDidMount', - value: function componentDidMount() {} - }, { - key: 'getErrorText', - value: function getErrorText() { - var _getInitAttempt2 = this._getInitAttempt(), - message = _getInitAttempt2.message; - - return Object(lodash["isObject"])(message) ? message.text : message; - } - }, { - key: 'getErrorCode', - value: function getErrorCode() { - var _getInitAttempt3 = this._getInitAttempt(), - message = _getInitAttempt3.message; - - return Object(lodash["isObject"])(message) ? message.code : null; - } - }, { - key: 'handleAccesDenied', - value: function handleAccesDenied() { - this.handleError(new Error('Access Denied')); - } - }, { - key: 'handleError', - value: function handleError(err) { - var message = api["a" /* default */].getErrorText(err); - if (err.status === RestRespCodeEnum.FORBIDDEN) { - message = { - code: RestRespCodeEnum.FORBIDDEN, - text: message - }; - } - - this.initStatus.fail(message); - } - }, { - key: 'withMe', - value: function withMe(component) { - return components_withFeature(this)(component); - } - }, { - key: '_getInitAttempt', - value: function _getInitAttempt() { - return app_reactor["a" /* default */].evaluate(this.initAttemptGetter); - } - }]); - - return FeatureBase; -}(); - -/* harmony default export */ var featureBase = (featureBase_FeatureBase); -// CONCATENATED MODULE: ./src/app/flux/terminal/getters.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/* harmony default export */ var terminal_getters = ({ - store: ['tlpt_terminal'] -}); -// CONCATENATED MODULE: ./src/app/flux/fileTransfer/actionTypes.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var OPEN = '/flux/fileTransfer:open'; -var CLOSE = '/flux/fileTransfer:close'; -var ADD = '/flux/fileTransfer:add'; -var REMOVE = '/flux/fileTransfer:remove'; -var UPDATE_STATUS = '/flux/fileTransfer:status'; -// CONCATENATED MODULE: ./src/app/flux/fileTransfer/store.js -var fileTransfer_store_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var store_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -function store_objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -function fileTransfer_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function fileTransfer_store_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function fileTransfer_store_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var store_defaultStatus = { - isFailed: false, - isProcessing: false, - isCompleted: false, - error: "" -}; - -var store_File = function (_Record) { - fileTransfer_store_inherits(File, _Record); - - function File(props) { - fileTransfer_store_classCallCheck(this, File); - - props = store_extends({}, props, { - id: new Date().getTime() + props.name - }); - return fileTransfer_store_possibleConstructorReturn(this, (File.__proto__ || Object.getPrototypeOf(File)).call(this, props)); - } - - return File; -}(Object(immutable["Record"])(store_extends({ - id: '', - url: '', - name: '', - isUpload: '', - blob: null -}, store_defaultStatus))); - -var store_FileTransferStore = function (_Record2) { - fileTransfer_store_inherits(FileTransferStore, _Record2); - - function FileTransferStore(params) { - fileTransfer_store_classCallCheck(this, FileTransferStore); - - return fileTransfer_store_possibleConstructorReturn(this, (FileTransferStore.__proto__ || Object.getPrototypeOf(FileTransferStore)).call(this, params)); - } - - fileTransfer_store_createClass(FileTransferStore, [{ - key: 'open', - value: function open(_ref) { - var isUpload = _ref.isUpload, - siteId = _ref.siteId, - serverId = _ref.serverId, - login = _ref.login; - - return this.merge({ - isOpen: true, - isUpload: isUpload, - siteId: siteId, - serverId: serverId, - login: login - }); - } - }, { - key: 'close', - value: function close() { - return new FileTransferStore(); - } - }, { - key: 'makeUrl', - value: function makeUrl(location, filename) { - var siteId = this.siteId, - serverId = this.serverId, - login = this.login; - - - var url = config["a" /* default */].api.getScpUrl({ - siteId: siteId, - serverId: serverId, - login: login, - location: location, - filename: filename - }); - - return url; - } - }, { - key: 'removeFile', - value: function removeFile(id) { - var files = this.files.delete(id); - return this.set('files', files); - } - }, { - key: 'addFile', - value: function addFile(_ref2) { - var location = _ref2.location, - name = _ref2.name, - blob = _ref2.blob, - isUpload = _ref2.isUpload; - - var url = this.makeUrl(location, name); - var file = new store_File({ - url: url, - name: name, - isUpload: isUpload, - blob: blob - }); - - return this.update('files', function (files) { - return files.set(file.id, file); - }); - } - }, { - key: 'updateStatus', - value: function updateStatus(_ref3) { - var id = _ref3.id, - rest = store_objectWithoutProperties(_ref3, ['id']); - - var file = this.files.get(id); - var status = store_extends({}, store_defaultStatus, rest); - - file = file.merge(status); - return this.update('files', function (files) { - return files.set(id, file); - }); - } - }, { - key: 'isTransfering', - value: function isTransfering() { - return this.files.some(function (f) { - return f.isProcessing === true; - }); - } - }]); - - return FileTransferStore; -}(Object(immutable["Record"])({ - isOpen: false, - isUpload: false, - siteId: '', - serverId: '', - login: '', - files: new immutable["OrderedMap"]() -})); - -/* harmony default export */ var fileTransfer_store = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new store_FileTransferStore(); - }, - initialize: function initialize() { - this.on(OPEN, function (state, json) { - return state.open(json); - }); - this.on(CLOSE, function (state) { - return state.close(); - }); - this.on(ADD, function (state, json) { - return state.addFile(json); - }); - this.on(REMOVE, function (state, id) { - return state.removeFile(id); - }); - this.on(UPDATE_STATUS, function (state, json) { - return state.updateStatus(json); - }); - } -})); -// CONCATENATED MODULE: ./src/app/flux/fileTransfer/index.js -function fileTransfer_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var fileTransfer_STORE_NAME = 'tlpt_files'; - -function getFileTransfer() { - return app_reactor["a" /* default */].evaluate([fileTransfer_STORE_NAME]); -} - -var fileTransfer_register = function register(reactor) { - reactor.registerStores(fileTransfer_defineProperty({}, fileTransfer_STORE_NAME, fileTransfer_store)); -}; - -var fileTransfer_getters = { - store: [fileTransfer_STORE_NAME] -}; -// CONCATENATED MODULE: ./src/app/flux/nodes/nodeStore.js -var nodeStore_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var nodeStore_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -function nodeStore_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function nodeStore_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function nodeStore_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var nodeStore_ServerRec = function (_Record) { - nodeStore_inherits(ServerRec, _Record); - - function ServerRec(props) { - nodeStore_classCallCheck(this, ServerRec); - - var tags = new immutable["List"](Object(nuclear["toImmutable"])(props.tags)); - return nodeStore_possibleConstructorReturn(this, (ServerRec.__proto__ || Object.getPrototypeOf(ServerRec)).call(this, nodeStore_extends({}, props, { - tags: tags - }))); - } - - return ServerRec; -}(Object(immutable["Record"])({ - id: '', - siteId: '', - hostname: '', - tags: new immutable["List"](), - addr: '', - tunnel: false -})); - -var nodeStore_NodeStoreRec = function (_Record2) { - nodeStore_inherits(NodeStoreRec, _Record2); - - function NodeStoreRec() { - nodeStore_classCallCheck(this, NodeStoreRec); - - return nodeStore_possibleConstructorReturn(this, (NodeStoreRec.__proto__ || Object.getPrototypeOf(NodeStoreRec)).apply(this, arguments)); - } - - nodeStore_createClass(NodeStoreRec, [{ - key: 'findServer', - value: function findServer(serverId) { - return this.servers.find(function (s) { - return s.id === serverId; - }); - } - }, { - key: 'getSiteServers', - value: function getSiteServers(siteId) { - return this.servers.filter(function (s) { - return s.siteId === siteId; - }); - } - }, { - key: 'addSiteServers', - value: function addSiteServers(jsonItems) { - var list = new immutable["List"]().withMutations(function (state) { - jsonItems.forEach(function (item) { - return state.push(new nodeStore_ServerRec(item)); - }); - return state; - }); - - return list.equals(this.servers) ? this : this.set('servers', list); - } - }]); - - return NodeStoreRec; -}(Object(immutable["Record"])({ - servers: new immutable["List"]() -})); - -function getNodeStore() { - return app_reactor["a" /* default */].evaluate(['tlpt_nodes']); -} - -/* harmony default export */ var nodeStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new nodeStore_NodeStoreRec(); - }, - initialize: function initialize() { - this.on(TLPT_NODES_RECEIVE, function (state, items) { - return state.addSiteServers(items); - }); - } -})); -// EXTERNAL MODULE: ./node_modules/moment/moment.js -var moment = __webpack_require__("wd/R"); -var moment_default = /*#__PURE__*/__webpack_require__.n(moment); - -// CONCATENATED MODULE: ./src/app/lib/term/enums.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var EventTypeEnum = { - START: 'session.start', - JOIN: 'session.join', - END: 'session.end', - PRINT: 'print', - RESIZE: 'resize' -}; - -var TermEventEnum = { - RESIZE: 'terminal.resize', - CLOSE: 'terminal.close', - RESET: 'terminal.reset', - DATA: 'terminal.data', - CONN_CLOSE: 'connection.close' -}; - -var StatusCodeEnum = { - NORMAL: 1000 -}; -// CONCATENATED MODULE: ./src/app/flux/sessions/getters.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -/* -** Getters -*/ -var activeSessionList = [['tlpt_sessions_active'], ['tlpt', 'siteId'], function (sessionList, siteId) { - sessionList = sessionList.filter(function (n) { - return n.get('siteId') === siteId; - }); - return sessionList.valueSeq().map(createActiveListItem).toJS(); -}]; - -var storedSessionList = [['tlpt_sessions_archived'], ['tlpt', 'siteId'], function (sessionList, siteId) { - sessionList = sessionList.filter(function (n) { - return n.get('siteId') === siteId; - }); - return sessionList.valueSeq().map(createStoredListItem).toJS(); -}]; - -var getters_nodeIpById = function nodeIpById(sid) { - return ['tlpt_sessions_events', sid, EventTypeEnum.START, 'addr.local']; -}; -var storedSessionById = function storedSessionById(sid) { - return ['tlpt_sessions_archived', sid]; -}; -var activeSessionById = function activeSessionById(sid) { - return ['tlpt_sessions_active', sid]; -}; -var activePartiesById = function activePartiesById(sid) { - return [['tlpt_sessions_active', sid, 'parties'], function (parties) { - return parties ? parties.toJS() : []; - }]; -}; - -// creates a list of stored sessions which involves collecting the data from other stores -function createStoredListItem(session) { - var sid = session.get('id'); - var siteId = session.siteId, - nodeIp = session.nodeIp, - created = session.created, - server_id = session.server_id, - parties = session.parties, - last_active = session.last_active; - - var duration = moment_default()(last_active).diff(created); - var nodeDisplayText = getNodeIpDisplayText(siteId, server_id, nodeIp); - var createdDisplayText = getCreatedDisplayText(created); - var sessionUrl = config["a" /* default */].getPlayerUrl({ - sid: sid, - siteId: siteId - }); - - return { - active: false, - parties: createParties(parties), - sid: sid, - duration: duration, - siteId: siteId, - sessionUrl: sessionUrl, - created: created, - createdDisplayText: createdDisplayText, - nodeDisplayText: nodeDisplayText, - lastActive: last_active - }; -} - -// creates a list of active sessions which involves collecting the data from other stores -function createActiveListItem(session) { - var sid = session.get('id'); - var parties = createParties(session.parties); - var siteId = session.siteId, - created = session.created, - login = session.login, - last_active = session.last_active, - server_id = session.server_id; - - var duration = moment_default()(last_active).diff(created); - var nodeIp = app_reactor["a" /* default */].evaluate(getters_nodeIpById(sid)); - var nodeDisplayText = getNodeIpDisplayText(siteId, server_id, nodeIp); - var createdDisplayText = getCreatedDisplayText(created); - var sessionUrl = config["a" /* default */].getTerminalLoginUrl({ - sid: sid, - siteId: siteId, - login: login, - serverId: server_id - }); - - return { - active: true, - parties: parties, - sid: sid, - duration: duration, - siteId: siteId, - sessionUrl: sessionUrl, - created: created, - createdDisplayText: createdDisplayText, - nodeDisplayText: nodeDisplayText, - lastActive: last_active - }; -} - -function createParties(partyRecs) { - var parties = partyRecs.toJS(); - return parties.map(function (p) { - var ip = parseIp(p.serverIp); - return p.user + ' [' + ip + ']'; - }); -} - -function getCreatedDisplayText(date) { - return moment_default()(date).format(config["a" /* default */].displayDateFormat); -} - -function getNodeIpDisplayText(siteId, serverId, serverIp) { - var server = getNodeStore().findServer(serverId); - var ipAddress = parseIp(serverIp); - - var displayText = ipAddress; - if (server && server.hostname) { - displayText = server.hostname; - if (ipAddress) { - displayText = displayText + ' [' + ipAddress + ']'; - } - } - - return displayText; -} - -/* harmony default export */ var sessions_getters = ({ - storedSessionList: storedSessionList, - activeSessionList: activeSessionList, - activeSessionById: activeSessionById, - activePartiesById: activePartiesById, - storedSessionById: storedSessionById, - createStoredListItem: createStoredListItem -}); -// CONCATENATED MODULE: ./src/app/flux/terminal/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -var TLPT_TERMINAL_INIT = 'TLPT_TERMINAL_INIT'; -var TLPT_TERMINAL_CLOSE = 'TLPT_TERMINAL_CLOSE'; -var TLPT_TERMINAL_SET_STATUS = 'TLPT_TERMINAL_SET_STATUS'; -// CONCATENATED MODULE: ./src/app/flux/sshHistory/actions.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var actions_saveSshLogin = function saveSshLogin(_ref) { - var login = _ref.login, - serverId = _ref.serverId, - siteId = _ref.siteId; - - app_reactor["a" /* default */].dispatch(ADD_ITEM, { login: login, serverId: serverId, siteId: siteId }); -}; -// CONCATENATED MODULE: ./src/app/flux/terminal/actions.js -var actions_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - -var terminal_actions_logger = logger["a" /* default */].create('flux/terminal'); - -var actions_setStatus = function setStatus(json) { - return app_reactor["a" /* default */].dispatch(TLPT_TERMINAL_SET_STATUS, json); -}; - -function initStore(params) { - var serverId = params.serverId; - - var server = getNodeStore().findServer(serverId); - var hostname = server ? server.hostname : ''; - app_reactor["a" /* default */].dispatch(TLPT_TERMINAL_INIT, actions_extends({}, params, { - hostname: hostname - })); -} - -function createSid(routeParams) { - var login = routeParams.login, - siteId = routeParams.siteId; - - var data = { - session: { - terminal_params: { - w: 45, - h: 5 - }, - login: login - } - }; - - return api["a" /* default */].post(config["a" /* default */].api.getSiteSessionUrl(siteId), data); -} - -function initTerminal(routeParams) { - terminal_actions_logger.info('attempt to open a terminal', routeParams); - - var sid = routeParams.sid; - - - actions_setStatus({ isLoading: true }); - - if (sid) { - var activeSession = app_reactor["a" /* default */].evaluate(sessions_getters.activeSessionById(sid)); - if (activeSession) { - // init store with existing sid - initStore(routeParams); - actions_setStatus({ isReady: true }); - } else { - actions_setStatus({ isNotFound: true }); - } - - return; - } - - createSid(routeParams).done(function (json) { - var sid = json.session.id; - var newRouteParams = actions_extends({}, routeParams, { - sid: sid - }); - initStore(newRouteParams); - actions_setStatus({ isReady: true }); - updateRoute(newRouteParams); - - actions_saveSshLogin(routeParams); - }).fail(function (err) { - var errorText = api["a" /* default */].getErrorText(err); - actions_setStatus({ isError: true, errorText: errorText }); - }); -} - -function actions_close() { - app_reactor["a" /* default */].dispatch(TLPT_TERMINAL_CLOSE); - services_history.push(config["a" /* default */].routes.nodes); -} - -function updateRoute(newRouteParams) { - var routeUrl = config["a" /* default */].getTerminalLoginUrl(newRouteParams); - services_history.push(routeUrl); -} -// CONCATENATED MODULE: ./src/app/flux/userAcl/store.js -var userAcl_store_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function userAcl_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function userAcl_store_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function userAcl_store_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -// sort logins by making 'root' as the first in the list -var sortLogins = function sortLogins(loginList) { - var index = loginList.indexOf('root'); - if (index !== -1) { - loginList = loginList.remove(index); - return loginList.sort().unshift('root'); - } - - return loginList; -}; - -var Access = new immutable["Record"]({ - list: false, - read: false, - edit: false, - create: false, - remove: false -}); - -var store_AccessListRec = function (_Record) { - userAcl_store_inherits(AccessListRec, _Record); - - function AccessListRec() { - var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - userAcl_store_classCallCheck(this, AccessListRec); - - var map = Object(nuclear["toImmutable"])(json); - var sshLogins = new immutable["List"](map.get('sshLogins')); - var params = { - sshLogins: sortLogins(sshLogins), - authConnectors: new Access(map.get('authConnectors')), - trustedClusters: new Access(map.get('trustedClusters')), - roles: new Access(map.get('roles')), - sessions: new Access(map.get('sessions')) - }; - - return userAcl_store_possibleConstructorReturn(this, (AccessListRec.__proto__ || Object.getPrototypeOf(AccessListRec)).call(this, params)); - } - - userAcl_store_createClass(AccessListRec, [{ - key: 'getSessionAccess', - value: function getSessionAccess() { - return this.get('sessions'); - } - }, { - key: 'getRoleAccess', - value: function getRoleAccess() { - return this.get('roles'); - } - }, { - key: 'getConnectorAccess', - value: function getConnectorAccess() { - return this.get('authConnectors'); - } - }, { - key: 'getClusterAccess', - value: function getClusterAccess() { - return this.get('trustedClusters'); - } - }, { - key: 'getSshLogins', - value: function getSshLogins() { - return this.get('sshLogins'); - } - }]); - - return AccessListRec; -}(Object(immutable["Record"])({ - authConnectors: new Access(), - trustedClusters: new Access(), - roles: new Access(), - sessions: new Access(), - sshLogins: new immutable["List"]() -})); - -function getAcl() { - return app_reactor["a" /* default */].evaluate(['tlpt_user_acl']); -} - -/* harmony default export */ var userAcl_store = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new store_AccessListRec(); - }, - initialize: function initialize() { - this.on(RECEIVE_USERACL, function (state, json) { - return new store_AccessListRec(json); - }); - } -})); -// CONCATENATED MODULE: ./src/app/flux/player/actions.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -function actions_open(siteId, sid) { - var routeUrl = config["a" /* default */].getPlayerUrl({ siteId: siteId, sid: sid }); - services_history.push(routeUrl); -} - -function player_actions_close() { - var canListSessions = getAcl().getSessionAccess().read; - var redirect = canListSessions ? config["a" /* default */].routes.sessions : config["a" /* default */].routes.app; - services_history.push(redirect); -} -// CONCATENATED MODULE: ./src/app/flux/fileTransfer/actions.js -var fileTransfer_actions_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -function addFile(json) { - app_reactor["a" /* default */].dispatch(ADD, json); -} - -function removeFile(id) { - app_reactor["a" /* default */].dispatch(REMOVE, id); -} - -function updateStatus(json) { - app_reactor["a" /* default */].dispatch(UPDATE_STATUS, json); -} - -function openUploadDialog(params) { - var json = fileTransfer_actions_extends({}, params, { - isUpload: true - }); - app_reactor["a" /* default */].dispatch(OPEN, json); -} - -function openDownloadDialog(params) { - var json = fileTransfer_actions_extends({}, params, { - isUpload: false - }); - app_reactor["a" /* default */].dispatch(OPEN, json); -} - -function closeDialog() { - app_reactor["a" /* default */].dispatch(CLOSE, {}); -} -// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/index.js -var hoist_non_react_statics = __webpack_require__("/LiH"); -var hoist_non_react_statics_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics); - -// CONCATENATED MODULE: ./src/app/components/connect.jsx -var connect_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var connect_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function connect_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function connect_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function connect_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function connect_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var reactorShape = react["PropTypes"].shape({ - dispatch: react["PropTypes"].func.isRequired, - evaluate: react["PropTypes"].func.isRequired, - evaluateToJS: react["PropTypes"].func.isRequired, - observe: react["PropTypes"].func.isRequired -}); - -function getDisplayName(WrappedComponent) { - return WrappedComponent.displayName || WrappedComponent.name || 'Component'; -} - -function connect(mapFluxToProps, mapStateToProps) { - mapStateToProps = mapStateToProps ? mapStateToProps : function () { - return {}; - }; - return function wrapWithConnect(WrappedComponent) { - var Connect = function (_Component) { - connect_inherits(Connect, _Component); - - function Connect(props, context) { - connect_classCallCheck(this, Connect); - - var _this = connect_possibleConstructorReturn(this, (Connect.__proto__ || Object.getPrototypeOf(Connect)).call(this, props, context)); - - _this.reactor = props.reactor || context.reactor; - _this.unsubscribeFns = []; - _this.updatePropMap(props); - return _this; - } - - connect_createClass(Connect, [{ - key: 'resubscribe', - value: function resubscribe(props) { - this.unsubscribe(); - this.updatePropMap(props); - this.updateState(); - this.subscribe(); - } - }, { - key: 'componentWillMount', - value: function componentWillMount() { - this.updateState(); - this.subscribe(this.props); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.unsubscribe(); - } - }, { - key: 'updatePropMap', - value: function updatePropMap(props) { - this.propMap = mapFluxToProps ? mapFluxToProps(props) : {}; - } - }, { - key: 'updateState', - value: function updateState() { - var propMap = this.propMap; - var stateToSet = {}; - - for (var key in propMap) { - var getter = propMap[key]; - stateToSet[key] = this.reactor.evaluate(getter); - } - - this.setState(stateToSet); - } - }, { - key: 'subscribe', - value: function subscribe() { - var _this2 = this; - - var propMap = this.propMap; - - var _loop = function _loop(key) { - var getter = propMap[key]; - var unsubscribeFn = _this2.reactor.observe(getter, function (val) { - _this2.setState(connect_defineProperty({}, key, val)); - }); - - _this2.unsubscribeFns.push(unsubscribeFn); - }; - - for (var key in propMap) { - _loop(key); - } - } - }, { - key: 'unsubscribe', - value: function unsubscribe() { - if (this.unsubscribeFns.length === 0) { - return; - } - - while (this.unsubscribeFns.length > 0) { - this.unsubscribeFns.shift()(); - } - } - }, { - key: 'render', - value: function render() { - var stateProps = mapStateToProps(this.props); - return Object(react["createElement"])(WrappedComponent, connect_extends({ - reactor: this.reactor - }, stateProps, this.props, this.state)); - } - }]); - - return Connect; - }(react["Component"]); - - Connect.displayName = 'Connect(' + getDisplayName(WrappedComponent) + ')'; - Connect.WrappedComponent = WrappedComponent; - Connect.contextTypes = { - reactor: reactorShape - }; - Connect.propTypes = { - reactor: reactorShape - }; - - return hoist_non_react_statics_default()(Connect, WrappedComponent); - }; -} -// CONCATENATED MODULE: ./src/app/components/terminal/terminalActionBar.jsx -var terminalActionBar_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function terminalActionBar_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function terminalActionBar_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function terminalActionBar_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - -var closeTextStyle = { - width: "30px", - height: "30px", - display: "block", - margin: "0 auto" -}; - -var terminalActionBar_ActionBar = function (_React$Component) { - terminalActionBar_inherits(ActionBar, _React$Component); - - function ActionBar() { - var _ref; - - var _temp, _this, _ret; - - terminalActionBar_classCallCheck(this, ActionBar); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = terminalActionBar_possibleConstructorReturn(this, (_ref = ActionBar.__proto__ || Object.getPrototypeOf(ActionBar)).call.apply(_ref, [this].concat(args))), _this), _this.openFileTransferDialog = function (isUpload) { - var _this$props = _this.props, - store = _this$props.store, - params = _this$props.params; - // disable actions if file transfer dialog is open - - if (store.isOpen) { - return; - } - - if (isUpload) { - openUploadDialog(params); - } else { - openDownloadDialog(params); - } - }, _this.close = function () { - actions_close(); - }, _this.openUploadDialog = function () { - _this.openFileTransferDialog(true); - }, _this.openDownloadDialog = function () { - _this.openFileTransferDialog(false); - }, _temp), terminalActionBar_possibleConstructorReturn(_this, _ret); - } - - terminalActionBar_createClass(ActionBar, [{ - key: 'componentWillUnmount', - value: function componentWillUnmount() { - closeDialog(); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - children = _props.children, - store = _props.store; - var isOpen = store.isOpen; - - - var fileTransferClass = classnames_default()('grv-terminal-actions-files', isOpen && '--isOpen'); - - return react_default.a.createElement( - 'div', - { className: 'grv-terminal-actions' }, - react_default.a.createElement( - 'div', - { title: 'Close', style: closeTextStyle, onClick: this.close }, - react_default.a.createElement(icons_CloseIcon, null) - ), - react_default.a.createElement( - 'div', - { className: 'grv-terminal-actions-participans' }, - children - ), - react_default.a.createElement( - 'div', - { className: fileTransferClass }, - react_default.a.createElement( - 'a', - { title: 'Download files', - className: 'grv-terminal-actions-files-btn m-b-sm', - onClick: this.openDownloadDialog }, - react_default.a.createElement('i', { className: 'fa fa-download' }) - ), - react_default.a.createElement( - 'a', - { title: 'Upload files', - className: 'grv-terminal-actions-files-btn', - onClick: this.openUploadDialog }, - react_default.a.createElement('i', { className: 'fa fa-upload' }) - ) - ) - ); - } - }]); - - return ActionBar; -}(react_default.a.Component); - -function terminalActionBar_mapStateToProps() { - return { - store: fileTransfer_getters.store - }; -} - -/* harmony default export */ var terminalActionBar = (connect(terminalActionBar_mapStateToProps)(Object(lib["withRouter"])(terminalActionBar_ActionBar))); -// EXTERNAL MODULE: ./node_modules/react-addons-css-transition-group/index.js -var react_addons_css_transition_group = __webpack_require__("J21I"); -var react_addons_css_transition_group_default = /*#__PURE__*/__webpack_require__.n(react_addons_css_transition_group); - -// CONCATENATED MODULE: ./src/app/components/terminal/terminalPartyList.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - -var terminalPartyList_PartyList = function PartyList(props) { - var parties = props.parties || []; - var userIcons = parties.map(function (item, index) { - return react_default.a.createElement( - 'div', - { key: index, className: 'animated m-t' }, - react_default.a.createElement(icons_UserIcon, { colorIndex: index, - isDark: true, - name: item.user }) - ); - }); - - return react_default.a.createElement( - react_addons_css_transition_group_default.a, - { className: 'm-t', component: 'div', - transitionEnterTimeout: 500, - transitionLeaveTimeout: 500, - transitionName: { - enter: "fadeIn", - leave: "fadeOut" - } }, - react_default.a.createElement('hr', { className: 'grv-divider m-t' }), - userIcons - ); -}; - -function terminalPartyList_mapStateToProps(props) { - return { - parties: sessions_getters.activePartiesById(props.sid) - }; -} - -/* harmony default export */ var terminalPartyList = (Object(build["connect"])(terminalPartyList_mapStateToProps)(terminalPartyList_PartyList)); -// EXTERNAL MODULE: ./node_modules/xterm/dist/xterm.js -var xterm = __webpack_require__("Q92V"); -var xterm_default = /*#__PURE__*/__webpack_require__.n(xterm); - -// EXTERNAL MODULE: ./node_modules/events/events.js -var events_events = __webpack_require__("+qE3"); - -// EXTERNAL MODULE: ./node_modules/buffer/index.js -var buffer = __webpack_require__("tjlA"); -var buffer_default = /*#__PURE__*/__webpack_require__.n(buffer); - -// CONCATENATED MODULE: ./src/app/lib/term/protobuf.js -var protobuf_slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var protobuf_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function protobuf_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -/** - * convenience constant equal to 2^32. - */ -var TWO_TO_32 = 4294967296; - -var MessageTypeEnum = { - RAW: 'r', - AUDIT: 'a', - SESSION_END: 'c', - RESIZE: 'w' -}; - -var messageFields = { - payload: { - code: 0x1a - }, - - version: { - code: 10, - length: 1, - values: { - v1: 49 - } - }, - - type: { - length: 1, - code: 0x12, - values: { - resize: MessageTypeEnum.RESIZE.charCodeAt(0), - data: MessageTypeEnum.RAW.charCodeAt(0), - event: MessageTypeEnum.AUDIT.charCodeAt(0), - close: MessageTypeEnum.SESSION_END.charCodeAt(0) - } - } -}; - -var protobuf_Protobuf = function () { - function Protobuf() { - protobuf_classCallCheck(this, Protobuf); - } - - protobuf_createClass(Protobuf, [{ - key: 'encode', - value: function encode(messageType, message) { - var buffer = []; - this.encodeVersion(buffer); - this.encodeType(buffer, messageType); - this.encodePayload(buffer, message); - return buffer; - } - }, { - key: 'encodeResizeMessage', - value: function encodeResizeMessage(message) { - return this.encode(messageFields.type.values.resize, message); - } - }, { - key: 'encodeRawMessage', - value: function encodeRawMessage(message) { - return this.encode(messageFields.type.values.data, message); - } - }, { - key: 'encodePayload', - value: function encodePayload(buffer, text) { - // set type - buffer.push(messageFields.payload.code); - - // encode payload - var uintArray = this._textToUintArray(text); - this.encodeVarint(buffer, uintArray.length); - for (var i = 0; i < uintArray.length; i++) { - buffer.push(uintArray[i]); - } - } - }, { - key: 'encodeVersion', - value: function encodeVersion(buffer) { - buffer[0] = messageFields.version.code; - buffer[1] = messageFields.version.length; - buffer[2] = messageFields.version.values.v1; - } - }, { - key: 'encodeType', - value: function encodeType(buffer, typeValue) { - buffer[3] = messageFields.type.code; - buffer[4] = messageFields.type.length; - buffer[5] = typeValue; - } - }, { - key: 'encodeVarint', - value: function encodeVarint(buffer, value) { - var lowBits = value >>> 0; - var highBits = Math.floor((value - lowBits) / TWO_TO_32) >>> 0; - while (highBits > 0 || lowBits > 127) { - buffer.push(lowBits & 0x7f | 0x80); - lowBits = (lowBits >>> 7 | highBits << 25) >>> 0; - highBits = highBits >>> 7; - } - - buffer.push(lowBits); - } - }, { - key: 'decode', - value: function decode(uintArray) { - var version = this.decodeVersion(uintArray); - var type = this.decodeType(uintArray); - var payload = this.decodePayload(uintArray); - return { - version: version, - type: type, - payload: payload - }; - } - }, { - key: 'decodeVersion', - value: function decodeVersion(uintArray) { - if (uintArray[0] === messageFields.version.code && uintArray[1] === messageFields.version.length) { - return String.fromCharCode(uintArray[2]); - } - - throw new Error("invalid version field"); - } - }, { - key: 'decodeType', - value: function decodeType(uintArray) { - if (uintArray[3] === messageFields.type.code && uintArray[4] === messageFields.type.length) { - return String.fromCharCode(uintArray[5]); - } - throw new Error("invalid type field"); - } - }, { - key: 'decodePayload', - value: function decodePayload(uintArray) { - if (!uintArray[6]) { - return ""; - } - - if (uintArray[6] !== messageFields.payload.code) { - throw new Error("invalid payload field"); - } - - var rawPayloadField = uintArray.slice(7); - - var _decodeVarint = this.decodeVarint(rawPayloadField), - _decodeVarint2 = protobuf_slicedToArray(_decodeVarint, 2), - startsAt = _decodeVarint2[0], - payloadLength = _decodeVarint2[1]; - - var payloadBytes = rawPayloadField.slice(startsAt, startsAt + payloadLength); - return this._uintArrayToText(payloadBytes); - } - }, { - key: 'decodeVarint', - value: function decodeVarint(uintArray) { - var x = 0; - var s = 0; - for (var i = 0; i < uintArray.length; i++) { - var b = uintArray[i]; - if (b < 0x80) { - if (i > 9 || i == 9 && b > 1) { - throw new Error("unable to decode varint: overflow"); - } - return [i + 1, x | b << s]; - } - x = x | b & 0x7f << s; - s = s + 7; - } - - throw new Error("unable to decode varint: empty array"); - } - }, { - key: '_textToUintArray', - value: function _textToUintArray(text) { - return buffer_default.a.Buffer(text); - } - }, { - key: '_uintArrayToText', - value: function _uintArrayToText(uintArray) { - // use native TextDecoder if supported - if (window.TextDecoder) { - return new TextDecoder("utf-8").decode(uintArray); - } else { - return buffer_default.a.Buffer(uintArray).toString(); - } - } - }]); - - return Protobuf; -}(); - -// Polyfill for Uint8Array.slice for IE and Safari -if (!Uint8Array.prototype.slice) { - Object.defineProperty(Uint8Array.prototype, 'slice', { - value: Array.prototype.slice - }); -} -// CONCATENATED MODULE: ./src/app/lib/term/tty.js -var tty_slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var tty_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var tty_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function tty_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function tty_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function tty_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var tty_logger = logger["a" /* default */].create('Tty'); - -var defaultOptions = { - buffered: true -}; - -var tty_Tty = function (_EventEmitter) { - tty_inherits(Tty, _EventEmitter); - - function Tty(addressResolver) { - var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - tty_classCallCheck(this, Tty); - - var _this = tty_possibleConstructorReturn(this, (Tty.__proto__ || Object.getPrototypeOf(Tty)).call(this)); - - _this.socket = null; - _this._buffered = true; - _this._addressResolver = null; - - var options = tty_extends({}, defaultOptions, props); - - _this._addressResolver = addressResolver; - _this._buffered = options.buffered; - _this._proto = new protobuf_Protobuf(); - _this._onOpenConnection = _this._onOpenConnection.bind(_this); - _this._onCloseConnection = _this._onCloseConnection.bind(_this); - _this._onMessage = _this._onMessage.bind(_this); - return _this; - } - - tty_createClass(Tty, [{ - key: 'disconnect', - value: function disconnect() { - var reasonCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : StatusCodeEnum.NORMAL; - - if (this.socket !== null) { - this.socket.close(reasonCode); - } - } - }, { - key: 'connect', - value: function connect(w, h) { - var connStr = this._addressResolver.getConnStr(w, h); - this.socket = new WebSocket(connStr); - this.socket.binaryType = 'arraybuffer'; - this.socket.onopen = this._onOpenConnection; - this.socket.onmessage = this._onMessage; - this.socket.onclose = this._onCloseConnection; - } - }, { - key: 'send', - value: function send(data) { - var msg = this._proto.encodeRawMessage(data); - var bytearray = new Uint8Array(msg); - this.socket.send(bytearray.buffer); - } - }, { - key: 'requestResize', - value: function requestResize(w, h) { - tty_logger.info('requesting new screen size', 'w:' + w + ' and h:' + h); - var data = JSON.stringify({ - event: EventTypeEnum.RESIZE, - width: w, - height: h, - size: w + ':' + h - }); - - var encoded = this._proto.encodeResizeMessage(data); - var bytearray = new Uint8Array(encoded); - this.socket.send(bytearray.buffer); - } - }, { - key: '_flushBuffer', - value: function _flushBuffer() { - this.emit(TermEventEnum.DATA, this._attachSocketBuffer); - this._attachSocketBuffer = null; - clearTimeout(this._attachSocketBufferTimer); - this._attachSocketBufferTimer = null; - } - }, { - key: '_pushToBuffer', - value: function _pushToBuffer(data) { - if (this._attachSocketBuffer) { - this._attachSocketBuffer += data; - } else { - this._attachSocketBuffer = data; - setTimeout(this._flushBuffer.bind(this), 10); - } - } - }, { - key: '_onOpenConnection', - value: function _onOpenConnection() { - this.emit('open'); - tty_logger.info('websocket is open'); - } - }, { - key: '_onCloseConnection', - value: function _onCloseConnection(e) { - this.socket.onopen = null; - this.socket.onmessage = null; - this.socket.onclose = null; - this.socket = null; - this.emit(TermEventEnum.CONN_CLOSE, e); - tty_logger.info('websocket is closed'); - } - }, { - key: '_onMessage', - value: function _onMessage(ev) { - try { - var uintArray = new Uint8Array(ev.data); - var msg = this._proto.decode(uintArray); - switch (msg.type) { - case MessageTypeEnum.AUDIT: - this._processAuditPayload(msg.payload); - break; - case MessageTypeEnum.SESSION_END: - this.emit(TermEventEnum.CLOSE, msg.payload); - break; - case MessageTypeEnum.RAW: - if (this._buffered) { - this._pushToBuffer(msg.payload); - } else { - this.emit(TermEventEnum.DATA, msg.payload); - } - break; - default: - throw Error('unknown message type', msg.type); - } - } catch (err) { - tty_logger.error('failed to parse incoming message.', err); - } - } - }, { - key: '_processAuditPayload', - value: function _processAuditPayload(payload) { - var event = JSON.parse(payload); - if (event.event === EventTypeEnum.RESIZE) { - var _event$size$split = event.size.split(':'), - _event$size$split2 = tty_slicedToArray(_event$size$split, 2), - w = _event$size$split2[0], - h = _event$size$split2[1]; - - w = Number(w); - h = Number(h); - this.emit(TermEventEnum.RESIZE, { w: w, h: h }); - } - } - }]); - - return Tty; -}(events_events["EventEmitter"]); - -/* harmony default export */ var tty = (tty_Tty); -// CONCATENATED MODULE: ./src/app/lib/term/terminal.js -var terminal_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function terminal_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var terminal_logger = logger["a" /* default */].create('lib/term/terminal'); -var DISCONNECT_TXT = 'disconnected'; -var GRV_CLASS = 'grv-terminal'; -var WINDOW_RESIZE_DEBOUNCE_DELAY = 200; - -/** - * TtyTerminal is a wrapper on top of xtermjs that handles connections - * and resize events - */ - -var terminal_TtyTerminal = function () { - function TtyTerminal(options) { - terminal_classCallCheck(this, TtyTerminal); - - var addressResolver = options.addressResolver, - el = options.el, - _options$scrollBack = options.scrollBack, - scrollBack = _options$scrollBack === undefined ? 1000 : _options$scrollBack; - - this._el = el; - this.tty = new tty(addressResolver); - this.scrollBack = scrollBack; - this.rows = undefined; - this.cols = undefined; - this.term = null; - this.debouncedResize = Object(lodash["debounce"])(this._requestResize.bind(this), WINDOW_RESIZE_DEBOUNCE_DELAY); - } - - terminal_createClass(TtyTerminal, [{ - key: 'open', - value: function open() { - var _this = this; - - this._el.classList.add(GRV_CLASS); - - // render xtermjs with default values - this.term = new xterm_default.a({ - cols: 15, - rows: 5, - scrollback: this.scrollBack, - cursorBlink: false - }); - - this.term.open(this._el); - - // fit xterm to available space - this.resize(this.cols, this.rows); - - // subscribe to xtermjs output - this.term.on('data', function (data) { - _this.tty.send(data); - }); - - // subscribe to window resize events - window.addEventListener('resize', this.debouncedResize); - - // subscribe to tty - this.tty.on(TermEventEnum.RESET, this.reset.bind(this)); - this.tty.on(TermEventEnum.CONN_CLOSE, this._processClose.bind(this)); - this.tty.on(TermEventEnum.DATA, this._processData.bind(this)); - - // subscribe tty resize event (used by session player) - this.tty.on(TermEventEnum.RESIZE, function (_ref) { - var h = _ref.h, - w = _ref.w; - return _this.resize(w, h); - }); - - this.connect(); - } - }, { - key: 'connect', - value: function connect() { - this.tty.connect(this.cols, this.rows); - } - }, { - key: 'destroy', - value: function destroy() { - window.removeEventListener('resize', this.debouncedResize); - this._disconnect(); - if (this.term !== null) { - this.term.destroy(); - this.term.removeAllListeners(); - } - - this._el.innerHTML = null; - this._el.classList.remove(GRV_CLASS); - } - }, { - key: 'reset', - value: function reset() { - this.term.reset(); - } - }, { - key: 'resize', - value: function resize(cols, rows) { - try { - // if not defined, use the size of the container - if (!Object(lodash["isInteger"])(cols) || !Object(lodash["isInteger"])(rows)) { - var dim = this._getDimensions(); - cols = dim.cols; - rows = dim.rows; - } - - if (cols === this.cols && rows === this.rows) { - return; - } - - this.cols = cols; - this.rows = rows; - this.term.resize(cols, rows); - } catch (err) { - terminal_logger.error('xterm.resize', { w: cols, h: rows }, err); - this.term.reset(); - } - } - }, { - key: '_processData', - value: function _processData(data) { - try { - this.term.write(data); - } catch (err) { - terminal_logger.error('xterm.write', data, err); - // recover xtermjs by resetting it - this.term.reset(); - } - } - }, { - key: '_processClose', - value: function _processClose(e) { - var reason = e.reason; - - var displayText = DISCONNECT_TXT; - if (reason) { - displayText = displayText + ': ' + reason; - } - - displayText = '\x1B[31m' + displayText + '\x1B[m\r\n'; - this.term.write(displayText); - } - }, { - key: '_disconnect', - value: function _disconnect() { - this.tty.disconnect(); - this.tty.removeAllListeners(); - } - }, { - key: '_requestResize', - value: function _requestResize() { - var _getDimensions2 = this._getDimensions(), - cols = _getDimensions2.cols, - rows = _getDimensions2.rows; - - if (!Object(lodash["isInteger"])(cols) || !Object(lodash["isInteger"])(rows)) { - terminal_logger.info('unable to calculate terminal dimensions (container might be hidden) ' + cols + ':' + rows); - return; - } - - // ensure min size - var w = cols < 5 ? 5 : cols; - var h = rows < 5 ? 5 : rows; - - this.resize(w, h); - this.tty.requestResize(w, h); - } - }, { - key: '_getDimensions', - value: function _getDimensions() { - var $terminal = this._el.querySelector('.terminal'); - var $fakeRow = document.createElement('div'); - $fakeRow.innerHTML = ' '; - - $terminal.appendChild($fakeRow); - - var fakeColHeight = $fakeRow.getBoundingClientRect().height; - var fakeColWidth = $fakeRow.firstElementChild.getBoundingClientRect().width; - var width = this._el.clientWidth; - var height = this._el.clientHeight; - var cols = Math.floor(width / fakeColWidth); - var rows = Math.floor(height / fakeColHeight); - - $terminal.removeChild($fakeRow); - return { cols: cols, rows: rows }; - } - }]); - - return TtyTerminal; -}(); - -/* harmony default export */ var terminal = (terminal_TtyTerminal); -// CONCATENATED MODULE: ./src/app/lib/term/ttyAddressResolver.js -var ttyAddressResolver_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var ttyAddressResolver_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function ttyAddressResolver_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var ttyAddressResolver_AddressResolver = function () { - function AddressResolver(params) { - ttyAddressResolver_classCallCheck(this, AddressResolver); - - this._params = { - login: null, - target: function target() { - throw Error('target method is not provided'); - }, - sid: null, - clusterName: null, - ttyUrl: null - }; - - this._params = ttyAddressResolver_extends({}, params); - } - - ttyAddressResolver_createClass(AddressResolver, [{ - key: 'getConnStr', - value: function getConnStr(w, h) { - var _params = this._params, - getTarget = _params.getTarget, - ttyUrl = _params.ttyUrl, - login = _params.login, - sid = _params.sid; - - var params = JSON.stringify(ttyAddressResolver_extends({}, getTarget(), { - login: login, - sid: sid, - term: { h: h, w: w } - })); - - var encoded = window.encodeURI(params); - return this.format(ttyUrl).replace(':params', encoded); - } - }, { - key: 'format', - value: function format(url) { - return url.replace(':fqdm', config["a" /* default */].getWsHostName()).replace(':token', this._params.token).replace(':cluster', this._params.cluster).replace(':sid', this._params.sid); - } - }]); - - return AddressResolver; -}(); - -/* harmony default export */ var ttyAddressResolver = (ttyAddressResolver_AddressResolver); -// CONCATENATED MODULE: ./src/app/components/terminal/terminal.jsx -var terminal_terminal_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function terminal_terminal_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function terminal_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function terminal_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var terminal_Terminal = function (_React$Component) { - terminal_inherits(Terminal, _React$Component); - - function Terminal() { - terminal_terminal_classCallCheck(this, Terminal); - - return terminal_possibleConstructorReturn(this, (Terminal.__proto__ || Object.getPrototypeOf(Terminal)).apply(this, arguments)); - } - - terminal_terminal_createClass(Terminal, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _props = this.props, - onSessionEnd = _props.onSessionEnd, - ttyParams = _props.ttyParams, - title = _props.title; - - var addressResolver = new ttyAddressResolver(ttyParams); - this.terminal = new terminal({ - el: this.refs.container, - addressResolver: addressResolver - }); - - this.terminal.open(); - this.terminal.tty.on(TermEventEnum.CLOSE, onSessionEnd); - - document.title = title; - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.terminal.destroy(); - } - }, { - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'focus', - value: function focus() { - this.terminal.term.focus(); - } - }, { - key: 'render', - value: function render() { - return react_default.a.createElement('div', { ref: 'container' }); - } - }]); - - return Terminal; -}(react_default.a.Component); -// CONCATENATED MODULE: ./src/app/components/files/items.jsx -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var items_Text = function Text(props) { - return react_default.a.createElement( - 'div', - { className: classnames_default()('grv-file-transfer-text', props.className) }, - props.children - ); -}; -// CONCATENATED MODULE: ./src/app/components/files/download.jsx -var download_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function download_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function download_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function download_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var download_FileDownloadSelector = function (_React$Component) { - download_inherits(FileDownloadSelector, _React$Component); - - function FileDownloadSelector() { - var _ref; - - var _temp, _this, _ret; - - download_classCallCheck(this, FileDownloadSelector); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = download_possibleConstructorReturn(this, (_ref = FileDownloadSelector.__proto__ || Object.getPrototypeOf(FileDownloadSelector)).call.apply(_ref, [this].concat(args))), _this), _this.state = { - path: '~/' - }, _this.onChangePath = function (e) { - _this.setState({ - path: e.target.value - }); - }, _this.onDownload = function () { - if (_this.isValidPath(_this.state.path)) { - _this.props.onDownload(_this.state.path); - } - }, _this.onKeyDown = function (event) { - if (event.key === 'Enter') { - event.preventDefault(); - event.stopPropagation(); - _this.onDownload(); - } - }, _temp), download_possibleConstructorReturn(_this, _ret); - } - - download_createClass(FileDownloadSelector, [{ - key: 'isValidPath', - value: function isValidPath(path) { - return path && path[path.length - 1] !== '/'; - } - }, { - key: 'moveCaretAtEnd', - value: function moveCaretAtEnd(e) { - var tmp = e.target.value; - e.target.value = ''; - e.target.value = tmp; - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var path = this.state.path; - - var isBtnDisabled = !this.isValidPath(path); - return react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-header m-b' }, - react_default.a.createElement( - items_Text, - { className: 'm-b' }, - react_default.a.createElement( - 'h4', - null, - 'SCP DOWNLOAD' - ) - ), - react_default.a.createElement( - items_Text, - { className: 'm-b-xs' }, - 'File path' - ), - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-download' }, - react_default.a.createElement('input', { onChange: this.onChangePath, - ref: function ref(e) { - return _this2.inputRef = e; - }, - value: path, - className: 'grv-file-transfer-input m-r-sm', - autoFocus: true, - onFocus: this.moveCaretAtEnd, - onKeyDown: this.onKeyDown - }), - react_default.a.createElement( - 'button', - { className: 'btn btn-sm grv-file-transfer-btn', - style: { width: "105px" }, - disabled: isBtnDisabled, - onClick: this.onDownload }, - 'Download' - ) - ) - ); - } - }]); - - return FileDownloadSelector; -}(react_default.a.Component); -download_FileDownloadSelector.propTypes = { - onDownload: react["PropTypes"].func.isRequired -}; -// CONCATENATED MODULE: ./src/app/components/files/upload.jsx -var upload_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function upload_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function upload_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function upload_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var upload_FileUploadSelector = function (_React$Component) { - upload_inherits(FileUploadSelector, _React$Component); - - function FileUploadSelector() { - var _ref; - - var _temp, _this, _ret; - - upload_classCallCheck(this, FileUploadSelector); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = upload_possibleConstructorReturn(this, (_ref = FileUploadSelector.__proto__ || Object.getPrototypeOf(FileUploadSelector)).call.apply(_ref, [this].concat(args))), _this), _this.state = { - files: [], - remoteLocation: "~/" - }, _this.onFileSelected = function (e) { - _this.addFiles([], e.target.files); - _this.inputRef.focus(); - }, _this.onFilePathChanged = function (e) { - _this.setState({ - remoteLocation: e.target.value - }); - }, _this.onUpload = function () { - var _this$state = _this.state, - files = _this$state.files, - remoteLocation = _this$state.remoteLocation; - - for (var i = 0; i < files.length; i++) { - _this.props.onUpload(remoteLocation, files[i].name, files[i]); - } - - _this.setState({ files: [] }); - _this.setFocus(); - }, _this.onOpenFilePicker = function () { - // reset all selected files - _this.fileSelectorRef.value = ""; - _this.fileSelectorRef.click(); - }, _this.onDrop = function (e) { - e.preventDefault(); - e.stopPropagation(); - _this.addFiles(_this.state.files, e.dataTransfer.files); - _this.setFocus(); - }, _this.onKeyDown = function (event) { - if (event.key === 'Enter') { - event.preventDefault(); - event.stopPropagation(); - _this.onOpenFilePicker(); - } - }, _temp), upload_possibleConstructorReturn(_this, _ret); - } - - upload_createClass(FileUploadSelector, [{ - key: 'componentWillUnmount', - value: function componentWillUnmount() { - document.removeEventListener('drop', this.onDocumentDrop); - document.removeEventListener('dragover', this.preventDefault); - } - }, { - key: 'componentDidMount', - value: function componentDidMount() { - document.addEventListener('dragover', this.preventDefault, false); - document.addEventListener('drop', this.onDocumentDrop, false); - } - }, { - key: 'preventDefault', - value: function preventDefault(e) { - e.preventDefault(); - } - }, { - key: 'onDocumentDrop', - value: function onDocumentDrop(e) { - if (this.refDropzone && this.refDropzone.contains(e.target)) { - return; - } - - e.preventDefault(); - e.dataTransfer.effectAllowed = 'none'; - e.dataTransfer.dropEffect = 'none'; - } - }, { - key: 'setFocus', - value: function setFocus() { - this.inputRef.focus(); - } - }, { - key: 'moveCaretAtEnd', - value: function moveCaretAtEnd(e) { - var tmp = e.target.value; - e.target.value = ''; - e.target.value = tmp; - } - }, { - key: 'addFiles', - value: function addFiles(files) { - var blobs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - for (var i = 0; i < blobs.length; i++) { - files.push(blobs[i]); - } - - this.setState({ - files: files - }); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _state = this.state, - remoteLocation = _state.remoteLocation, - files = _state.files; - - var isDldBtnDisabled = !remoteLocation || files.length === 0; - var hasFiles = files.length > 0; - - return react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-header m-b' }, - react_default.a.createElement( - items_Text, - { className: 'm-b' }, - react_default.a.createElement( - 'h4', - null, - 'SCP UPLOAD' - ) - ), - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-upload' }, - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-upload-selected-files', - ref: function ref(e) { - return _this2.refDropzone = e; - }, - onDragOver: function onDragOver(e) { - return e.preventDefault(); - }, - onDrop: this.onDrop - }, - !hasFiles && react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'a', - { onClick: this.onOpenFilePicker }, - 'Select files' - ), - ' to upload or drag & drop them here' - ), - hasFiles && react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'a', - { onClick: this.onOpenFilePicker }, - ' ', - files.length, - ' files selected ' - ) - ) - ), - react_default.a.createElement( - items_Text, - { className: 'm-b-xs m-t' }, - 'Upload destination' - ), - react_default.a.createElement( - 'div', - { style: { display: "flex" } }, - react_default.a.createElement('input', { className: 'grv-file-transfer-input m-r-sm', - ref: function ref(e) { - return _this2.inputRef = e; - }, - value: remoteLocation, - autoFocus: true, - onFocus: this.moveCaretAtEnd, - onChange: this.onFilePathChanged, - onKeyDown: this.onKeyDown - }), - react_default.a.createElement( - 'button', - { className: 'btn btn-sm grv-file-transfer-btn', - style: { width: "105px" }, - disabled: isDldBtnDisabled, - onClick: this.onUpload }, - 'Upload' - ) - ), - react_default.a.createElement('input', { ref: function ref(e) { - return _this2.fileSelectorRef = e; - }, type: 'file', - multiple: true, - style: { display: "none" }, - accept: '*.*', - name: 'file', - onChange: this.onFileSelected - }) - ) - ); - } - }]); - - return FileUploadSelector; -}(react_default.a.Component); -upload_FileUploadSelector.propTypes = { - onUpload: react["PropTypes"].func.isRequired -}; -// CONCATENATED MODULE: ./src/app/services/fileTransfer.js -var fileTransfer_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function fileTransfer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function fileTransfer_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function fileTransfer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - - - - - -var fileTransfer_logger = logger["a" /* default */].create('api/fileTransfer'); - -var REQ_FAILED_TXT = 'Network request failed'; - -var Transfer = function (_EventEmitter) { - fileTransfer_inherits(Transfer, _EventEmitter); - - function Transfer() { - fileTransfer_classCallCheck(this, Transfer); - - var _this = fileTransfer_possibleConstructorReturn(this, (Transfer.__proto__ || Object.getPrototypeOf(Transfer)).call(this)); - - _this._xhr = new XMLHttpRequest(); - var xhr = _this._xhr; - - xhr.onload = function () { - var status = xhr.status; - - if (status === 200) { - _this.handleSuccess(xhr); - return; - } - - _this.handleError(xhr); - }; - - xhr.onerror = function () { - _this.emit('error', new Error(REQ_FAILED_TXT)); - }; - - xhr.ontimeout = function () { - _this.emit('error', new Error(REQ_FAILED_TXT)); - }; - - xhr.onabort = function () { - _this.emit('error', new DOMException('Aborted', 'AbortError')); - }; - return _this; - } - - fileTransfer_createClass(Transfer, [{ - key: 'abort', - value: function abort() { - this._xhr.abort(); - } - }, { - key: 'onProgress', - value: function onProgress(cb) { - this.on('progress', cb); - } - }, { - key: 'onCompleted', - value: function onCompleted(cb) { - this.on('completed', cb); - } - }, { - key: 'onError', - value: function onError(cb) { - this.on('error', cb); - } - }, { - key: 'handleSuccess', - value: function handleSuccess() { - throw Error('not implemented'); - } - }, { - key: 'handleError', - value: function handleError(xhr) { - var errText = fileTransfer_getErrorText(xhr.response); - this.emit('error', new Error(errText)); - } - }, { - key: 'handleProgress', - value: function handleProgress(e) { - var progress = 0; - // if Content-Length is present - if (e.lengthComputable) { - progress = Math.round(e.loaded / e.total * 100); - } else { - var done = e.position || e.loaded; - var total = e.totalSize || e.total; - progress = Math.floor(done / total * 1000) / 10; - } - - this.emit('progress', progress); - } - }]); - - return Transfer; -}(events_events["EventEmitter"]); - -var fileTransfer_Uploader = function (_Transfer) { - fileTransfer_inherits(Uploader, _Transfer); - - function Uploader() { - fileTransfer_classCallCheck(this, Uploader); - - return fileTransfer_possibleConstructorReturn(this, (Uploader.__proto__ || Object.getPrototypeOf(Uploader)).call(this)); - } - - fileTransfer_createClass(Uploader, [{ - key: 'handleSuccess', - value: function handleSuccess() { - this.emit('completed'); - } - }, { - key: 'do', - value: function _do(url, blob) { - var _this3 = this; - - this._xhr.upload.addEventListener('progress', function (e) { - _this3.handleProgress(e); - }); - - this._xhr.open('post', url, true); - api["a" /* default */].setAuthHeaders(this._xhr); - api["a" /* default */].setNoCacheHeaders(this._xhr); - this._xhr.send(blob); - } - }]); - - return Uploader; -}(Transfer); - -var fileTransfer_Downloader = function (_Transfer2) { - fileTransfer_inherits(Downloader, _Transfer2); - - function Downloader() { - fileTransfer_classCallCheck(this, Downloader); - - return fileTransfer_possibleConstructorReturn(this, (Downloader.__proto__ || Object.getPrototypeOf(Downloader)).call(this)); - } - - fileTransfer_createClass(Downloader, [{ - key: 'do', - value: function _do(url) { - var _this5 = this; - - this._xhr.open('get', url, true); - this._xhr.onprogress = function (e) { - _this5.handleProgress(e); - }; - - api["a" /* default */].setAuthHeaders(this._xhr); - this._xhr.responseType = 'blob'; - this._xhr.send(); - } - }, { - key: 'handleSuccess', - value: function handleSuccess(xhr) { - var fileName = getDispositionFileName(xhr); - if (!fileName) { - this.emit('error', new Error("Bad response")); - } else { - this.emit('completed', { - fileName: fileName, - blob: xhr.response - }); - } - } - - // parses blob response to get an error text - - }, { - key: 'handleError', - value: function handleError(xhr) { - var _this6 = this; - - var reader = new FileReader(); - - reader.onerror = function (err) { - _this6.emit('error', err); - }; - - reader.onload = function () { - var text = fileTransfer_getErrorText(reader.result); - _this6.emit('error', new Error(text)); - }; - - reader.readAsText(xhr.response); - } - }]); - - return Downloader; -}(Transfer); - -function getDispositionFileName(xhr) { - var fileName = ""; - var disposition = xhr.getResponseHeader("Content-Disposition"); - if (disposition) { - var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; - var matches = filenameRegex.exec(disposition); - if (matches != null && matches[1]) { - fileName = matches[1].replace(/['"]/g, ''); - } - } - - return decodeURIComponent(fileName); -} - -// TODO: as backend may return errors in different -// formats, look at different JSON structures to retreive the error message -function fileTransfer_getErrorText(response, responseText) { - var errText = 'Bad request'; - if (!response) { - return responseText || errText; - } - - try { - var json = JSON.parse(response); - if (json.message) { - return json.message; - } - - if (responseText) { - return responseText; - } - } catch (err) { - fileTransfer_logger.error('faild to parse error message', err); - } - - return errText; -} -// CONCATENATED MODULE: ./src/app/components/files/withHttpRequest.jsx -var withHttpRequest_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var withHttpRequest_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function withHttpRequest_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function withHttpRequest_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function withHttpRequest_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var withHttpRequest_withHttpRequest = function withHttpRequest(httpCtor) { - return function (component) { - var _class, _temp; - - return _temp = _class = function (_React$Component) { - withHttpRequest_inherits(WithHttpRequestWrapper, _React$Component); - - function WithHttpRequestWrapper(props, context) { - withHttpRequest_classCallCheck(this, WithHttpRequestWrapper); - - var _this = withHttpRequest_possibleConstructorReturn(this, (WithHttpRequestWrapper.__proto__ || Object.getPrototypeOf(WithHttpRequestWrapper)).call(this, props, context)); - - _this.state = { - progress: "0", - response: null - }; - - _this.onRemove = function () { - removeFile(_this.fileId); - }; - - _this.http = new httpCtor(); - _this.fileId = props.file.id; - _this.fileBlob = props.file.blob; - _this.fileUrl = props.file.url; - return _this; - } - - withHttpRequest_createClass(WithHttpRequestWrapper, [{ - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.http.removeAllListeners(); - this.http.abort(); - } - }, { - key: 'componentDidMount', - value: function componentDidMount() { - var _this2 = this; - - var handleProgress = function handleProgress(completed) { - _this2.setState({ progress: completed }); - }; - - var handleCompleted = function handleCompleted(response) { - _this2.state.response = response; - updateStatus({ - id: _this2.fileId, - isCompleted: true - }); - }; - - var handleFailed = function handleFailed(err) { - updateStatus({ - id: _this2.fileId, - isFailed: true, - error: err.message - }); - }; - - updateStatus({ - id: this.fileId, - isProcessing: true - }); - - this.http.onProgress(handleProgress); - this.http.onCompleted(handleCompleted); - this.http.onError(handleFailed); - this.http.do(this.fileUrl, this.fileBlob); - } - }, { - key: 'render', - value: function render() { - var _state = this.state, - response = _state.response, - progress = _state.progress; - - return react_default.a.createElement(component, withHttpRequest_extends({}, this.props, { - onRemove: this.onRemove, - httpResponse: response, - httpProgress: progress - })); - } - }]); - - return WithHttpRequestWrapper; - }(react_default.a.Component), _class.displayName = 'WithHttpRequestWrapper', _temp; - }; -}; - -/* harmony default export */ var files_withHttpRequest = (withHttpRequest_withHttpRequest); -// CONCATENATED MODULE: ./src/app/components/files/fileTransfer.jsx -var files_fileTransfer_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function files_fileTransfer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function files_fileTransfer_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function files_fileTransfer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - -var fileTransfer_FileTransfer = function FileTransfer(_ref) { - var files = _ref.files; - - if (files.length === 0) { - return null; - } - - var $files = files.map(function (file) { - var key = file.id; - return file.isUpload ? react_default.a.createElement(FileToSend, { key: key, file: file }) : react_default.a.createElement(FileToReceive, { key: key, file: file }); - }); - - return react_default.a.createElement( - 'div', - { className: 'm-t-sm' }, - react_default.a.createElement('div', { className: 'grv-file-transfer-header m-b-sm' }), - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-file-list-cols' }, - react_default.a.createElement( - items_Text, - null, - ' File ' - ), - react_default.a.createElement( - items_Text, - null, - 'Status ' - ), - react_default.a.createElement( - 'div', - null, - ' ' - ) - ), - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-content' }, - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-file-list' }, - $files - ) - ) - ); -}; - -var fileTransfer_File = function (_Component) { - files_fileTransfer_inherits(File, _Component); - - function File() { - var _ref2; - - var _temp, _this, _ret; - - files_fileTransfer_classCallCheck(this, File); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = files_fileTransfer_possibleConstructorReturn(this, (_ref2 = File.__proto__ || Object.getPrototypeOf(File)).call.apply(_ref2, [this].concat(args))), _this), _this.savedToDisk = false, _this.onRemove = function () { - _this.props.onRemove(); - }, _temp), files_fileTransfer_possibleConstructorReturn(_this, _ret); - } - - files_fileTransfer_createClass(File, [{ - key: 'componentDidUpdate', - value: function componentDidUpdate() { - var _props$file = this.props.file, - isCompleted = _props$file.isCompleted, - isUpload = _props$file.isUpload; - - if (isCompleted && !isUpload) { - this.saveToDisk(this.props.httpResponse); - } - } - }, { - key: 'saveToDisk', - value: function saveToDisk(_ref3) { - var fileName = _ref3.fileName, - blob = _ref3.blob; - - if (this.savedToDisk) { - return; - } - - this.savedToDisk = true; - - // if IE11 - if (window.navigator.msSaveOrOpenBlob) { - window.navigator.msSaveOrOpenBlob(blob, fileName); - return; - } - - var a = document.createElement("a"); - a.href = window.URL.createObjectURL(blob); - a.download = fileName; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - } - }, { - key: 'render', - value: function render() { - var _props$file2 = this.props.file, - name = _props$file2.name, - isFailed = _props$file2.isFailed, - isProcessing = _props$file2.isProcessing, - isCompleted = _props$file2.isCompleted, - error = _props$file2.error; - var httpProgress = this.props.httpProgress; - - - var className = classnames_default()("grv-file-transfer-file-list-item", isFailed && "--failed", isProcessing && "--processing", isCompleted && "--completed"); - - return react_default.a.createElement( - 'div', - { className: className }, - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-file-path' }, - name, - isFailed && react_default.a.createElement( - 'div', - null, - ' ', - error, - ' ' - ) - ), - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-file-status' }, - isFailed && react_default.a.createElement( - 'div', - null, - 'failed' - ), - isProcessing && react_default.a.createElement( - 'div', - null, - httpProgress, - '%' - ), - isCompleted && react_default.a.createElement( - items_Text, - null, - 'completed' - ) - ), - isProcessing && react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-file-close' }, - react_default.a.createElement( - 'a', - { onClick: this.onRemove }, - 'cancel' - ) - ) - ); - } - }]); - - return File; -}(react["Component"]); - -fileTransfer_File.propTypes = { - file: react["PropTypes"].object.isRequired, - onRemove: react["PropTypes"].func.isRequired, - httpResponse: react["PropTypes"].object -}; -var FileToSend = files_withHttpRequest(fileTransfer_Uploader)(fileTransfer_File); -var FileToReceive = files_withHttpRequest(fileTransfer_Downloader)(fileTransfer_File); -// CONCATENATED MODULE: ./src/app/components/files/index.jsx -var files_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function files_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function files_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function files_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var files_FileTransferDialog = function (_Component) { - files_inherits(FileTransferDialog, _Component); - - function FileTransferDialog() { - var _ref; - - var _temp, _this, _ret; - - files_classCallCheck(this, FileTransferDialog); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = files_possibleConstructorReturn(this, (_ref = FileTransferDialog.__proto__ || Object.getPrototypeOf(FileTransferDialog)).call.apply(_ref, [this].concat(args))), _this), _this.onDownload = function (location) { - _this.transfer(location, location, false); - }, _this.onUpload = function (location, filename, blob) { - _this.transfer(location, filename, true, blob); - }, _this.onKeyDown = function (e) { - // escape - if (e.keyCode !== 27) { - return; - } - - e.preventDefault(); - e.stopPropagation(); - - _this.onClose(); - }, _this.onClose = function () { - var isTransfering = _this.props.store.isTransfering(); - if (!isTransfering) { - _this.props.onClose(); - } - - if (isTransfering && window.confirm("Are you sure you want to cancel file transfers?")) { - _this.props.onClose(); - } - }, _temp), files_possibleConstructorReturn(_this, _ret); - } - - files_createClass(FileTransferDialog, [{ - key: 'transfer', - value: function transfer(location, name, isUpload) { - var blob = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; - - this.props.onTransfer({ - location: location, - name: name, - isUpload: isUpload, - blob: blob - }); - } - }, { - key: 'render', - value: function render() { - var store = this.props.store; - - if (!store.isOpen) { - return null; - } - - var files = store.files, - isUpload = store.isUpload; - - var latestFirst = files.toArray().reverse(); - return react_default.a.createElement( - 'div', - { className: 'grv-file-transfer p-sm', onKeyDown: this.onKeyDown }, - !isUpload && react_default.a.createElement(download_FileDownloadSelector, { onDownload: this.onDownload }), - isUpload && react_default.a.createElement(upload_FileUploadSelector, { onUpload: this.onUpload }), - react_default.a.createElement(fileTransfer_FileTransfer, { files: latestFirst }), - react_default.a.createElement( - 'div', - { className: 'grv-file-transfer-footer' }, - react_default.a.createElement( - 'button', - { onClick: this.onClose, - className: 'btn btn-sm grv-file-transfer-btn' }, - 'Close' - ) - ) - ); - } - }]); - - return FileTransferDialog; -}(react["Component"]); -files_FileTransferDialog.propTypes = { - store: react["PropTypes"].object.isRequired, - onTransfer: react["PropTypes"].func.isRequired, - onClose: react["PropTypes"].func.isRequired -}; -// CONCATENATED MODULE: ./src/app/components/terminal/index.jsx -var terminal_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var components_terminal_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function components_terminal_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function components_terminal_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function components_terminal_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - - -var terminal_Page = function (_React$Component) { - components_terminal_inherits(Page, _React$Component); - - function Page(props) { - components_terminal_classCallCheck(this, Page); - - var _this = components_terminal_possibleConstructorReturn(this, (Page.__proto__ || Object.getPrototypeOf(Page)).call(this, props)); - - _this.startNew = function () { - var newRouteParams = terminal_extends({}, _this.props.routeParams, { - sid: undefined - }); - - updateRoute(newRouteParams); - initTerminal(newRouteParams); - }; - - _this.replay = function () { - var _this$props$routePara = _this.props.routeParams, - siteId = _this$props$routePara.siteId, - sid = _this$props$routePara.sid; - - actions_open(siteId, sid); - }; - - _this.onCloseFileTransfer = function () { - closeDialog(); - if (_this.termRef) { - _this.termRef.focus(); - } - }; - - return _this; - } - - components_terminal_createClass(Page, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var _this2 = this; - - setTimeout(function () { - return initTerminal(_this2.props.routeParams); - }, 0); - } - }, { - key: 'render', - value: function render() { - var _this3 = this; - - var _props = this.props, - termStore = _props.termStore, - fileStore = _props.fileStore; - var status = termStore.status, - sid = termStore.sid; - - var title = termStore.getServerLabel(); - - var $content = null; - var $leftPanelContent = null; - - if (status.isLoading) { - $content = react_default.a.createElement(indicator, { type: 'bounce' }); - } - - if (status.isError) { - $content = react_default.a.createElement(terminal_ErrorIndicator, { text: status.errorText }); - } - - if (status.isNotFound) { - $content = react_default.a.createElement(terminal_SidNotFoundError, { - onReplay: this.replay, - onNew: this.startNew }); - } - - if (status.isReady) { - var ttyParams = termStore.getTtyParams(); - $content = react_default.a.createElement(terminal_Terminal, { ref: function ref(e) { - return _this3.termRef = e; - }, - title: title, - onSessionEnd: actions_close, - ttyParams: ttyParams }); - $leftPanelContent = react_default.a.createElement(terminalPartyList, { sid: sid }); - } - - return react_default.a.createElement( - 'div', - null, - react_default.a.createElement(files_FileTransferDialog, { - store: fileStore, - onClose: this.onCloseFileTransfer, - onTransfer: addFile - }), - react_default.a.createElement( - 'div', - { className: 'grv-terminalhost' }, - react_default.a.createElement( - terminalActionBar, - null, - $leftPanelContent - ), - react_default.a.createElement( - 'div', - { className: 'grv-terminalhost-server-info' }, - react_default.a.createElement( - 'h3', - null, - title - ) - ), - $content - ) - ); - } - }]); - - return Page; -}(react_default.a.Component); - -var terminal_ErrorIndicator = function ErrorIndicator(_ref) { - var text = _ref.text; - return react_default.a.createElement( - 'div', - { className: 'grv-terminalhost-indicator-error' }, - react_default.a.createElement('i', { className: 'fa fa-exclamation-triangle fa-3x text-warning' }), - react_default.a.createElement( - 'div', - { className: 'm-l' }, - react_default.a.createElement( - 'strong', - null, - 'Connection error' - ), - react_default.a.createElement( - 'div', - null, - react_default.a.createElement( - 'small', - null, - text - ) - ) - ) - ); -}; - -var terminal_SidNotFoundError = function SidNotFoundError(_ref2) { - var onNew = _ref2.onNew, - onReplay = _ref2.onReplay; - return react_default.a.createElement( - 'div', - { className: 'grv-terminalhost-indicator-error' }, - react_default.a.createElement( - 'div', - { className: 'text-center' }, - react_default.a.createElement( - 'strong', - null, - 'The session is no longer active' - ), - react_default.a.createElement( - 'div', - { className: 'm-t' }, - react_default.a.createElement( - 'button', - { onClick: onNew, className: 'btn btn-sm btn-primary m-r' }, - ' Start New ' - ), - react_default.a.createElement( - 'button', - { onClick: onReplay, className: 'btn btn-sm btn-primary' }, - ' Replay ' - ) - ) - ) - ); -}; - -function terminal_mapStateToProps() { - return { - termStore: terminal_getters.store, - fileStore: fileTransfer_getters.store - }; -} - -/* harmony default export */ var components_terminal = (Object(build["connect"])(terminal_mapStateToProps)(terminal_Page)); -// CONCATENATED MODULE: ./src/app/features/featureSsh.js -var featureSsh_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function featureSsh_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function featureSsh_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function featureSsh_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - -var sshRoutes = [{ - path: config["a" /* default */].routes.nodes, - title: "Nodes", - component: main -}, { - path: config["a" /* default */].routes.terminal, - title: "Terminal", - components: { - CurrentSessionHost: components_terminal - } -}]; - -var sshNavItem = { - icon: 'fa fa-share-alt', - to: config["a" /* default */].routes.nodes, - title: 'Nodes' -}; - -var featureSsh_SshFeature = function (_FeatureBase) { - featureSsh_inherits(SshFeature, _FeatureBase); - - function SshFeature(routes) { - featureSsh_classCallCheck(this, SshFeature); - - var _this = featureSsh_possibleConstructorReturn(this, (SshFeature.__proto__ || Object.getPrototypeOf(SshFeature)).call(this)); - - routes.push.apply(routes, sshRoutes); - return _this; - } - - featureSsh_createClass(SshFeature, [{ - key: 'onload', - value: function onload() { - addNavItem(sshNavItem); - } - }]); - - return SshFeature; -}(featureBase); - -/* harmony default export */ var featureSsh = (featureSsh_SshFeature); -// EXTERNAL MODULE: ./src/app/flux/storedSessionsFilter/actions.js -var storedSessionsFilter_actions = __webpack_require__("VW/0"); - -// EXTERNAL MODULE: ./src/app/flux/storedSessionsFilter/getters.js -var storedSessionsFilter_getters = __webpack_require__("F+qq"); - -// CONCATENATED MODULE: ./src/app/components/dataProvider.jsx -var dataProvider_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function dataProvider_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function dataProvider_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function dataProvider_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var DEFAULT_INTERVAL = 3000; // every 3 sec - -var DataProvider = function (_Component) { - dataProvider_inherits(DataProvider, _Component); - - function DataProvider(props) { - dataProvider_classCallCheck(this, DataProvider); - - var _this = dataProvider_possibleConstructorReturn(this, (DataProvider.__proto__ || Object.getPrototypeOf(DataProvider)).call(this, props)); - - _this._timerId = null; - _this._request = null; - - _this._intervalTime = props.time || DEFAULT_INTERVAL; - return _this; - } - - dataProvider_createClass(DataProvider, [{ - key: 'fetch', - value: function fetch() { - var _this2 = this; - - // do not refetch if still in progress - if (this._request) { - return; - } - - this._request = this.props.onFetch().always(function () { - _this2._request = null; - }); - } - }, { - key: 'componentDidMount', - value: function componentDidMount() { - this.fetch(); - this._timerId = setInterval(this.fetch.bind(this), this._intervalTime); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - clearInterval(this._timerId); - } - }, { - key: 'render', - value: function render() { - return null; - } - }]); - - return DataProvider; -}(react["Component"]); - -/* harmony default export */ var dataProvider = (DataProvider); -// EXTERNAL MODULE: ./src/app/flux/storedSessionsFilter/index.js -var flux_storedSessionsFilter = __webpack_require__("BBHA"); - -// CONCATENATED MODULE: ./src/app/components/layout.jsx -var layout_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -function layout_objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var styles = { - flex: { - display: 'flex' - }, - - justify: { - start: { - justifyContent: 'flex-start' - }, - - end: { - justifyContent: 'flex-end' - }, - - between: { - justifyContent: 'space-between' - } - }, - - align: { - center: { - alignItems: 'center' - }, - - start: { - alignItems: 'flex-start' - }, - - end: { - alignItems: 'flex-end' - }, - - baseline: { - alignItems: 'baseline' - } - }, - - dir: { - - row: { - flexDirection: 'row' - }, - - col: { - flexDirection: 'column' - } - } -}; - -var getStyle = function getStyle(_ref) { - var _ref$dir = _ref.dir, - dir = _ref$dir === undefined ? 'col' : _ref$dir, - _ref$align = _ref.align, - align = _ref$align === undefined ? 'start' : _ref$align, - _ref$justify = _ref.justify, - justify = _ref$justify === undefined ? 'start' : _ref$justify, - _ref$style = _ref.style, - style = _ref$style === undefined ? {} : _ref$style; - - return layout_extends({}, style, styles.flex, styles.dir[dir], styles.justify[justify], styles.align[align]); -}; - -var layout_Flex = function Flex(_ref2) { - var _ref2$className = _ref2.className, - className = _ref2$className === undefined ? '' : _ref2$className, - children = _ref2.children, - props = layout_objectWithoutProperties(_ref2, ['className', 'children']); - - return react_default.a.createElement( - 'div', - { className: className, style: getStyle(props) }, - children - ); -}; - -/* harmony default export */ var layout = ({ - Flex: layout_Flex -}); -// EXTERNAL MODULE: ./node_modules/react-overlays/lib/index.js -var react_overlays_lib = __webpack_require__("X2Fi"); - -// CONCATENATED MODULE: ./src/app/components/overlayTrigger.jsx -var overlayTrigger_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function overlayTrigger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function overlayTrigger_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function overlayTrigger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var triggerType = react_default.a.PropTypes.oneOf(['click', 'hover', 'focus']); - -var propTypes = { - - trigger: react_default.a.PropTypes.oneOfType([triggerType, react_default.a.PropTypes.arrayOf(triggerType)]), - - delay: react_default.a.PropTypes.number, - - delayShow: react_default.a.PropTypes.number, - - delayHide: react_default.a.PropTypes.number, - - defaultOverlayShown: react_default.a.PropTypes.bool, - - overlay: react_default.a.PropTypes.node.isRequired, - - onBlur: react_default.a.PropTypes.func, - - onClick: react_default.a.PropTypes.func, - - onFocus: react_default.a.PropTypes.func, - - onMouseOut: react_default.a.PropTypes.func, - - onMouseOver: react_default.a.PropTypes.func, - - target: react_default.a.PropTypes.oneOf([null]), - - onHide: react_default.a.PropTypes.oneOf([null]), - - show: react_default.a.PropTypes.oneOf([null]) -}; - -var defaultProps = { - defaultOverlayShown: false, - trigger: ['hover', 'focus'] -}; - -var overlayTrigger_OverlayTrigger = function (_React$Component) { - overlayTrigger_inherits(OverlayTrigger, _React$Component); - - function OverlayTrigger(props, context) { - overlayTrigger_classCallCheck(this, OverlayTrigger); - - var _this = overlayTrigger_possibleConstructorReturn(this, (OverlayTrigger.__proto__ || Object.getPrototypeOf(OverlayTrigger)).call(this, props, context)); - - _this.getElement = _this.getElement.bind(_this); - _this.handleToggle = _this.handleToggle.bind(_this); - _this.handleHide = _this.handleHide.bind(_this); - _this.state = { - show: props.defaultOverlayShown - }; - return _this; - } - - overlayTrigger_createClass(OverlayTrigger, [{ - key: 'handleToggle', - value: function handleToggle() { - if (this.state.show) { - this.hide(); - } else { - this.show(); - } - } - }, { - key: 'handleHide', - value: function handleHide() { - this.hide(); - } - }, { - key: 'show', - value: function show() { - this.setState({ show: true }); - } - }, { - key: 'hide', - value: function hide() { - this.setState({ show: false }); - } - }, { - key: 'getElement', - value: function getElement() { - return react_dom_default.a.findDOMNode(this); - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var _props = this.props, - _props$container = _props.container, - container = _props$container === undefined ? this : _props$container, - placement = _props.placement, - overlay = _props.overlay; - - return react_default.a.createElement( - 'div', - { onClick: this.handleToggle }, - this.props.children, - react_default.a.createElement( - react_overlays_lib["Overlay"], - { - rootClose: true, - placement: placement, - show: this.state.show, - onHide: this.handleHide, - target: function target() { - return _this2.getElement(); - }, - container: container }, - overlay - ) - ); - } - }]); - - return OverlayTrigger; -}(react_default.a.Component); - -overlayTrigger_OverlayTrigger.propTypes = propTypes; -overlayTrigger_OverlayTrigger.defaultProps = defaultProps; - -/* harmony default export */ var overlayTrigger = (overlayTrigger_OverlayTrigger); -// CONCATENATED MODULE: ./src/app/components/moreButton.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var moreButton_classes = { - 'btn grv-btn-details': true -}; - -var moreButton_MoreButton = function MoreButton(props) { - return react_default.a.createElement( - 'button', - { className: classnames_default()(props.className, moreButton_classes) }, - react_default.a.createElement( - 'span', - null, - '\u2026' - ) - ); -}; - -moreButton_MoreButton.WithOverlay = function (props) { - return react_default.a.createElement( - overlayTrigger, - props, - react_default.a.createElement(moreButton_MoreButton, null) - ); -}; - -/* harmony default export */ var moreButton = (moreButton_MoreButton); -// CONCATENATED MODULE: ./src/app/components/popover.jsx -var popover_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var popover_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function popover_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function popover_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function popover_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function popover_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var popover_propTypes = { - placement: react_default.a.PropTypes.oneOf(['top', 'right', 'bottom', 'left']), - positionTop: react_default.a.PropTypes.oneOfType([react_default.a.PropTypes.number, react_default.a.PropTypes.string]), - positionLeft: react_default.a.PropTypes.oneOfType([react_default.a.PropTypes.number, react_default.a.PropTypes.string]), - arrowOffsetTop: react_default.a.PropTypes.oneOfType([react_default.a.PropTypes.number, react_default.a.PropTypes.string]), - arrowOffsetLeft: react_default.a.PropTypes.oneOfType([react_default.a.PropTypes.number, react_default.a.PropTypes.string]), - title: react_default.a.PropTypes.node -}; - -var popover_defaultProps = { - placement: 'right' -}; - -var popover_Popover = function (_React$Component) { - popover_inherits(Popover, _React$Component); - - function Popover() { - popover_classCallCheck(this, Popover); - - return popover_possibleConstructorReturn(this, (Popover.__proto__ || Object.getPrototypeOf(Popover)).apply(this, arguments)); - } - - popover_createClass(Popover, [{ - key: 'render', - value: function render() { - var _props = this.props, - placement = _props.placement, - positionTop = _props.positionTop, - positionLeft = _props.positionLeft, - arrowOffsetTop = _props.arrowOffsetTop, - arrowOffsetLeft = _props.arrowOffsetLeft, - title = _props.title, - className = _props.className, - style = _props.style, - children = _props.children; - - - var classes = popover_defineProperty({ - 'popover': true - }, placement, true); - - var outerStyle = popover_extends({ - display: 'block', - top: positionTop, - left: positionLeft - }, style); - - var arrowStyle = { - top: arrowOffsetTop, - left: arrowOffsetLeft - }; - - return react_default.a.createElement( - 'div', - { - role: 'tooltip', - className: classnames_default()(className, classes), - style: outerStyle }, - react_default.a.createElement('div', { className: 'arrow', style: arrowStyle }), - title && react_default.a.createElement( - 'h3', - { className: 'popover-title' }, - title - ), - react_default.a.createElement( - 'div', - { className: 'popover-content' }, - children - ) - ); - } - }]); - - return Popover; -}(react_default.a.Component); - -popover_Popover.propTypes = popover_propTypes; -popover_Popover.defaultProps = popover_defaultProps; - -/* harmony default export */ var popover = (popover_Popover); -// CONCATENATED MODULE: ./src/app/components/sessions/listItems.jsx -function listItems_objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - -var listItems_DateCreatedCell = function DateCreatedCell(_ref) { - var rowIndex = _ref.rowIndex, - data = _ref.data, - props = listItems_objectWithoutProperties(_ref, ['rowIndex', 'data']); - - var createdDisplayText = data[rowIndex].createdDisplayText; - - return react_default.a.createElement( - table_TableCell, - props, - createdDisplayText - ); -}; - -var listItems_DurationCell = function DurationCell(_ref2) { - var rowIndex = _ref2.rowIndex, - data = _ref2.data, - props = listItems_objectWithoutProperties(_ref2, ['rowIndex', 'data']); - - var duration = data[rowIndex].duration; - - var displayDate = moment_default.a.duration(duration).humanize(); - return react_default.a.createElement( - table_TableCell, - props, - displayDate - ); -}; - -var listItems_SingleUserCell = function SingleUserCell(_ref3) { - var rowIndex = _ref3.rowIndex, - data = _ref3.data, - props = listItems_objectWithoutProperties(_ref3, ['rowIndex', 'data']); - - var user = data[rowIndex].user; - - return react_default.a.createElement( - table_TableCell, - props, - react_default.a.createElement( - 'span', - { className: 'grv-sessions-user label label-default' }, - user - ) - ); -}; - -var listItems_UsersCell = function UsersCell(_ref4) { - var rowIndex = _ref4.rowIndex, - data = _ref4.data, - props = listItems_objectWithoutProperties(_ref4, ['rowIndex', 'data']); - - var _data$rowIndex = data[rowIndex], - parties = _data$rowIndex.parties, - user = _data$rowIndex.user; - - var $users = react_default.a.createElement( - 'div', - { className: 'grv-sessions-user' }, - user - ); - - if (parties.length > 0) { - $users = parties.map(function (item, itemIndex) { - return react_default.a.createElement( - 'div', - { key: itemIndex, className: 'grv-sessions-user' }, - item - ); - }); - } - - return react_default.a.createElement( - table_TableCell, - props, - react_default.a.createElement( - 'div', - null, - $users - ) - ); -}; - -var listItems_sessionInfo = function sessionInfo(sid) { - return react_default.a.createElement( - popover, - { className: 'grv-sessions-stored-details' }, - react_default.a.createElement( - 'div', - null, - sid - ) - ); -}; - -var listItems_SessionIdCell = function SessionIdCell(_ref5) { - var rowIndex = _ref5.rowIndex, - canJoin = _ref5.canJoin, - data = _ref5.data, - container = _ref5.container, - props = listItems_objectWithoutProperties(_ref5, ['rowIndex', 'canJoin', 'data', 'container']); - - var _data$rowIndex2 = data[rowIndex], - sessionUrl = _data$rowIndex2.sessionUrl, - active = _data$rowIndex2.active, - sid = _data$rowIndex2.sid; - - var isDisabled = active && !canJoin; - var sidShort = sid.slice(0, 8); - var actionText = active ? 'join' : 'play'; - - var btnClass = classnames_default()('btn btn-xs m-r-sm', { - 'btn-primary': !active, - 'btn-warning': active, - 'disabled': isDisabled - }); - - return react_default.a.createElement( - table_TableCell, - props, - react_default.a.createElement( - layout.Flex, - { dir: 'row', align: 'center' }, - isDisabled && react_default.a.createElement( - 'button', - { className: btnClass }, - actionText - ), - !isDisabled && react_default.a.createElement( - lib["Link"], - { to: sessionUrl, className: btnClass, type: 'button' }, - actionText - ), - react_default.a.createElement( - 'span', - { style: { width: "75px" } }, - sidShort - ), - react_default.a.createElement(moreButton.WithOverlay, { - trigger: 'click', - placement: 'bottom', - container: container, - overlay: listItems_sessionInfo(sid) }) - ) - ); -}; - -var listItems_NodeCell = function NodeCell(_ref6) { - var rowIndex = _ref6.rowIndex, - data = _ref6.data, - props = listItems_objectWithoutProperties(_ref6, ['rowIndex', 'data']); - - var nodeDisplayText = data[rowIndex].nodeDisplayText; - - return react_default.a.createElement( - table_TableCell, - props, - nodeDisplayText - ); -}; - - -// CONCATENATED MODULE: ./src/app/components/datePicker.jsx -var datePicker_slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var DateRangePicker = react_default.a.createClass({ - displayName: 'DateRangePicker', - getDates: function getDates() { - var startDate = jquery_default()(this.refs.dpPicker1).datepicker('getDate'); - var endDate = jquery_default()(this.refs.dpPicker2).datepicker('getDate'); - return [startDate, moment_default()(endDate).endOf('day').toDate()]; - }, - setDates: function setDates(_ref) { - var startDate = _ref.startDate, - endDate = _ref.endDate; - - jquery_default()(this.refs.dpPicker1).datepicker('setDate', startDate); - jquery_default()(this.refs.dpPicker2).datepicker('setDate', endDate); - }, - getDefaultProps: function getDefaultProps() { - return { - startDate: moment_default()().startOf('month').toDate(), - endDate: moment_default()().endOf('month').toDate(), - onChange: function onChange() {} - }; - }, - componentWillUnmount: function componentWillUnmount() { - jquery_default()(this.refs.dp).datepicker('destroy'); - }, - componentWillReceiveProps: function componentWillReceiveProps(newProps) { - var _getDates = this.getDates(), - _getDates2 = datePicker_slicedToArray(_getDates, 2), - startDate = _getDates2[0], - endDate = _getDates2[1]; - - if (!(isSame(startDate, newProps.startDate) && isSame(endDate, newProps.endDate))) { - this.setDates(newProps); - } - }, - shouldComponentUpdate: function shouldComponentUpdate() { - return false; - }, - componentDidMount: function componentDidMount() { - this.onChange = Object(lodash["debounce"])(this.onChange, 1); - jquery_default()(this.refs.rangePicker).datepicker({ - todayBtn: 'linked', - keyboardNavigation: false, - forceParse: false, - calendarWeeks: true, - autoclose: true - }); - - this.setDates(this.props); - - jquery_default()(this.refs.rangePicker).datepicker().on('changeDate', this.onChange); - }, - onChange: function onChange() { - var _getDates3 = this.getDates(), - _getDates4 = datePicker_slicedToArray(_getDates3, 2), - startDate = _getDates4[0], - endDate = _getDates4[1]; - - if (!(isSame(startDate, this.props.startDate) && isSame(endDate, this.props.endDate))) { - this.props.onChange({ startDate: startDate, endDate: endDate }); - } - }, - render: function render() { - return react_default.a.createElement( - 'div', - { className: 'grv-datepicker input-group input-group-sm input-daterange', ref: 'rangePicker' }, - react_default.a.createElement('input', { ref: 'dpPicker1', type: 'text', className: 'input-sm form-control', name: 'start' }), - react_default.a.createElement( - 'span', - { className: 'input-group-addon' }, - 'to' - ), - react_default.a.createElement('input', { ref: 'dpPicker2', type: 'text', className: 'input-sm form-control', name: 'end' }) - ); - } -}); - -function isSame(date1, date2) { - return moment_default()(date1).isSame(date2, 'day'); -} - -/* harmony default export */ var datePicker = (DateRangePicker); -// CONCATENATED MODULE: ./src/app/components/sessions/sessionList.jsx -var sessionList_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function sessionList_toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function sessionList_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function sessionList_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function sessionList_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function sessionList_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - -var sessionList_SessionList = function (_React$Component) { - sessionList_inherits(SessionList, _React$Component); - - function SessionList(props) { - sessionList_classCallCheck(this, SessionList); - - var _this = sessionList_possibleConstructorReturn(this, (SessionList.__proto__ || Object.getPrototypeOf(SessionList)).call(this, props)); - - _this.searchableProps = ['nodeDisplayText', 'createdDisplayText', 'sid', 'parties']; - _this._mounted = false; - - _this.onSearchChange = function (value) { - _this.state.searchValue = value; - _this.setState(_this.state); - }; - - _this.onSortChange = function (columnKey, sortDir) { - _this.state.colSortDirs = sessionList_defineProperty({}, columnKey, sortDir); - _this.setState(_this.state); - }; - - _this.onRangePickerChange = function (_ref) { - var startDate = _ref.startDate, - endDate = _ref.endDate; - - /** - * as date picker uses timeouts its important to ensure that - * component is still mounted when data picker triggers an update - */ - if (_this._mounted) { - flux_storedSessionsFilter["actions"].setTimeRange(startDate, endDate); - } - }; - - if (props.storage) { - _this.state = props.storage.findByKey('SessionList'); - } - - if (!_this.state) { - _this.state = { searchValue: '', colSortDirs: { created: 'ASC' } }; - } - return _this; - } - - sessionList_createClass(SessionList, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this._mounted = true; - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this._mounted = false; - if (this.props.storage) { - this.props.storage.save('SessionList', this.state); - } - } - }, { - key: 'searchAndFilterCb', - value: function searchAndFilterCb(targetValue, searchValue, propName) { - if (propName === 'parties') { - targetValue = targetValue || []; - return targetValue.join('').toLocaleUpperCase().indexOf(searchValue) !== -1; - } - } - }, { - key: 'sortAndFilter', - value: function sortAndFilter(data) { - var _this2 = this; - - var filtered = data.filter(function (obj) { - return isMatch(obj, _this2.state.searchValue, { - searchableProps: _this2.searchableProps, - cb: _this2.searchAndFilterCb - }); - }); - - var columnKey = Object.getOwnPropertyNames(this.state.colSortDirs)[0]; - var sortDir = this.state.colSortDirs[columnKey]; - var sorted = Object(lodash["sortBy"])(filtered, columnKey); - if (sortDir === SortTypes.ASC) { - sorted = sorted.reverse(); - } - - return sorted; - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - filter = _props.filter, - storedSessions = _props.storedSessions, - activeSessions = _props.activeSessions; - var start = filter.start, - end = filter.end; - - var canJoin = config["a" /* default */].canJoinSessions; - var searchValue = this.state.searchValue; - - var stored = storedSessions.filter(function (item) { - return moment_default()(item.created).isBetween(start, end); - }); - - var active = activeSessions.filter(function (item) { - return item.parties.length > 0; - }).filter(function (item) { - return moment_default()(item.created).isBetween(start, end); - }); - - stored = this.sortAndFilter(stored); - active = this.sortAndFilter(active); - - // always display active sessions first - var data = [].concat(sessionList_toConsumableArray(active), sessionList_toConsumableArray(stored)); - return react_default.a.createElement( - 'div', - { className: 'grv-sessions-stored m-t' }, - react_default.a.createElement( - 'div', - { className: 'grv-header' }, - react_default.a.createElement( - 'div', - { className: 'grv-flex m-b-md', style: { justifyContent: "space-between" } }, - react_default.a.createElement( - 'div', - { className: 'grv-flex' }, - react_default.a.createElement( - 'h2', - { className: 'text-center' }, - ' Sessions ' - ) - ), - react_default.a.createElement( - 'div', - { className: 'grv-flex' }, - react_default.a.createElement(clusterSelector, null), - react_default.a.createElement(inputSearch, { autoFocus: true, value: searchValue, onChange: this.onSearchChange }), - react_default.a.createElement( - 'div', - { className: 'm-l-sm' }, - react_default.a.createElement(datePicker, { startDate: start, endDate: end, onChange: this.onRangePickerChange }) - ) - ) - ) - ), - react_default.a.createElement( - 'div', - { className: 'grv-content' }, - data.length === 0 ? react_default.a.createElement(table_EmptyIndicator, { text: 'No matching sessions found' }) : react_default.a.createElement( - table_Table, - { - data: data, - rowCount: data.length }, - react_default.a.createElement(Column, { - header: react_default.a.createElement( - table_TableCell, - { className: 'grv-sessions-col-sid' }, - ' Session ID ' - ), - cell: react_default.a.createElement(listItems_SessionIdCell, { canJoin: canJoin, container: this }) - }), - react_default.a.createElement(Column, { - header: react_default.a.createElement( - table_TableCell, - null, - ' User ' - ), - cell: react_default.a.createElement(listItems_UsersCell, null) - }), - react_default.a.createElement(Column, { - columnKey: 'nodeIp', - header: react_default.a.createElement( - table_TableCell, - { className: 'grv-sessions-stored-col-ip' }, - 'Node' - ), - cell: react_default.a.createElement(listItems_NodeCell, null) - }), - react_default.a.createElement(Column, { - columnKey: 'created', - header: react_default.a.createElement(table_SortHeaderCell, { - sortDir: this.state.colSortDirs.created, - onSortChange: this.onSortChange, - title: 'Created (UTC)' - }), - cell: react_default.a.createElement(listItems_DateCreatedCell, null) - }), - react_default.a.createElement(Column, { - columnKey: 'duration', - header: react_default.a.createElement(table_SortHeaderCell, { - sortDir: this.state.colSortDirs.duration, - onSortChange: this.onSortChange, - title: 'Duration' - }), - cell: react_default.a.createElement(listItems_DurationCell, null) - }) - ) - ) - ); - } - }]); - - return SessionList; -}(react_default.a.Component); - -/* harmony default export */ var sessionList = (sessionList_SessionList); -// CONCATENATED MODULE: ./src/app/components/sessions/main.jsx -var main_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function main_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function main_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function main_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - -var main_Sessions = function (_React$Component) { - main_inherits(Sessions, _React$Component); - - function Sessions() { - var _ref; - - var _temp, _this, _ret; - - main_classCallCheck(this, Sessions); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = main_possibleConstructorReturn(this, (_ref = Sessions.__proto__ || Object.getPrototypeOf(Sessions)).call.apply(_ref, [this].concat(args))), _this), _this.refresh = function () { - return Object(storedSessionsFilter_actions["fetchSiteEventsWithinTimeRange"])(); - }, _temp), main_possibleConstructorReturn(_this, _ret); - } - - main_createClass(Sessions, [{ - key: 'render', - value: function render() { - var _props = this.props, - siteId = _props.siteId, - storedSessions = _props.storedSessions, - activeSessions = _props.activeSessions, - storedSessionsFilter = _props.storedSessionsFilter; - - var title = siteId + ' \xB7 Sessions'; - return react_default.a.createElement( - DocumentTitle, - { title: title }, - react_default.a.createElement( - 'div', - { className: 'grv-page grv-sessions' }, - react_default.a.createElement(sessionList, { - storage: this.props.storage, - activeSessions: activeSessions, - storedSessions: storedSessions, - filter: storedSessionsFilter - }), - react_default.a.createElement(dataProvider, { onFetch: this.refresh }) - ) - ); - } - }]); - - return Sessions; -}(react_default.a.Component); - -function main_mapFluxToProps() { - return { - siteId: app_getters["a" /* default */].siteId, - activeSessions: sessions_getters.activeSessionList, - storedSessions: sessions_getters.storedSessionList, - storedSessionsFilter: storedSessionsFilter_getters["default"].filter - }; -} - -var SessionsWithStorage = components_withStorage(main_Sessions); - -/* harmony default export */ var sessions_main = (connect(main_mapFluxToProps)(SessionsWithStorage)); -// EXTERNAL MODULE: ./node_modules/perfect-scrollbar/jquery.js -var perfect_scrollbar_jquery = __webpack_require__("Se41"); -var perfect_scrollbar_jquery_default = /*#__PURE__*/__webpack_require__.n(perfect_scrollbar_jquery); - -// EXTERNAL MODULE: ./node_modules/react-slider/react-slider.js -var react_slider = __webpack_require__("uz9f"); -var react_slider_default = /*#__PURE__*/__webpack_require__.n(react_slider); - -// CONCATENATED MODULE: ./src/app/lib/term/ttyPlayer.js -var ttyPlayer_slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var ttyPlayer_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function ttyPlayer_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function ttyPlayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function ttyPlayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -var ttyPlayer_logger = logger["a" /* default */].create('TtyPlayer'); -var STREAM_START_INDEX = 0; -var URL_PREFIX_EVENTS = '/events'; -var PLAY_SPEED = 5; -var Buffer = buffer_default.a.Buffer; - -var MAX_SIZE = 5242880; // 5mg - -var ttyPlayer_EventProvider = function () { - function EventProvider(_ref) { - var url = _ref.url; - - ttyPlayer_classCallCheck(this, EventProvider); - - this.url = url; - this.events = []; - } - - ttyPlayer_createClass(EventProvider, [{ - key: 'getDuration', - value: function getDuration() { - var eventCount = this.events.length; - if (eventCount === 0) { - return 0; - } - - return this.events[eventCount - 1].msNormalized; - } - }, { - key: 'init', - value: function init() { - var _this = this; - - return this._fetchEvents().then(function (events) { - _this.events = events; - var printEvents = _this.events.filter(onlyPrintEvents); - if (printEvents.length === 0) { - return; - } - - return _this._fetchContent(printEvents).then(function (buffer) { - _this._populatePrintEvents(buffer, printEvents); - }); - }); - } - }, { - key: '_fetchEvents', - value: function _fetchEvents() { - var _this2 = this; - - var url = this.url + URL_PREFIX_EVENTS; - return api["a" /* default */].get(url).then(function (json) { - if (!json.events) { - return []; - } - - return _this2._createEvents(json.events); - }); - } - }, { - key: '_fetchContent', - value: function _fetchContent(events) { - // calclulate the size of the session in bytes to know how many - // chunks to load due to maximum chunk size. - var offset = events[0].offset; - var end = events.length - 1; - var totalSize = events[end].offset - offset + events[end].bytes; - var chunkCount = Math.ceil(totalSize / MAX_SIZE); - - // create a fetch request for each chunk - var promises = []; - for (var i = 0; i < chunkCount; i++) { - var url = this.url + '/stream?offset=' + offset + '&bytes=' + MAX_SIZE; - promises.push(api["a" /* default */].ajax({ - url: url, - processData: true, - dataType: 'text' - })); - - offset = offset + MAX_SIZE; - } - - // fetch all session chunks and then merge them in one - return jquery_default.a.when.apply(jquery_default.a, promises).then(function () { - for (var _len = arguments.length, responses = Array(_len), _key = 0; _key < _len; _key++) { - responses[_key] = arguments[_key]; - } - - responses = promises.length === 1 ? [[responses]] : responses; - var allBytes = responses.reduce(function (byteStr, r) { - return byteStr + r[0]; - }, ''); - return new Buffer(allBytes); - }); - } - }, { - key: '_populatePrintEvents', - value: function _populatePrintEvents(buffer, events) { - var byteStrOffset = events[0].bytes; - events[0].data = buffer.slice(0, byteStrOffset).toString('utf8'); - for (var i = 1; i < events.length; i++) { - var bytes = events[i].bytes; - - events[i].data = buffer.slice(byteStrOffset, byteStrOffset + bytes).toString('utf8'); - byteStrOffset += bytes; - } - } - }, { - key: '_createEvents', - value: function _createEvents(json) { - var w = void 0, - h = void 0; - var events = []; - - // filter print events and ensure that each has the right screen size and valid values - for (var i = 0; i < json.length; i++) { - var _json$i = json[i], - ms = _json$i.ms, - event = _json$i.event, - offset = _json$i.offset, - time = _json$i.time, - bytes = _json$i.bytes; - - // grab new screen size for the next events - - if (event === EventTypeEnum.RESIZE || event === EventTypeEnum.START) { - var _json$i$size$split = json[i].size.split(':'); - - var _json$i$size$split2 = ttyPlayer_slicedToArray(_json$i$size$split, 2); - - w = _json$i$size$split2[0]; - h = _json$i$size$split2[1]; - } - - // session has ended, stop here - if (event === EventTypeEnum.END) { - var start = new Date(events[0].time); - var end = new Date(time); - var duration = end.getTime() - start.getTime(); - events.push({ - eventType: event, - ms: duration, - time: new Date(time) - }); - - break; - } - - // process only PRINT events - if (event !== EventTypeEnum.PRINT) { - continue; - } - - events.push({ - eventType: EventTypeEnum.PRINT, - ms: ms, - bytes: bytes, - offset: offset, - data: null, - w: Number(w), - h: Number(h), - time: new Date(time) - }); - } - - return this._normalizeEventsByTime(events); - } - }, { - key: '_normalizeEventsByTime', - value: function _normalizeEventsByTime(events) { - if (!events || events.length === 0) { - return []; - } - - events.forEach(function (e) { - e.displayTime = formatDisplayTime(e.ms); - e.ms = e.ms > 0 ? Math.floor(e.ms / 10) : 0; - e.msNormalized = e.ms; - }); - - var cur = events[0]; - var tmp = []; - for (var i = 1; i < events.length; i++) { - var sameSize = cur.w === events[i].w && cur.h === events[i].h; - var delay = events[i].ms - cur.ms; - - // merge events with tiny delay - if (delay < 2 && sameSize) { - cur.bytes += events[i].bytes; - continue; - } - - // avoid long delays between chunks - events[i].msNormalized = cur.msNormalized + shortenTime(delay); - - tmp.push(cur); - cur = events[i]; - } - - if (tmp.indexOf(cur) === -1) { - tmp.push(cur); - } - - return tmp; - } - }]); - - return EventProvider; -}(); - -function formatDisplayTime(ms) { - if (ms <= 0) { - return '00:00'; - } - - var totalSec = Math.floor(ms / 1000); - var totalDays = totalSec % 31536000 % 86400; - var h = Math.floor(totalDays / 3600); - var m = Math.floor(totalDays % 3600 / 60); - var s = totalDays % 3600 % 60; - - m = m > 9 ? m : '0' + m; - s = s > 9 ? s : '0' + s; - h = h > 0 ? h + ':' : ''; - - return '' + h + m + ':' + s; -} - -function shortenTime(value) { - if (value >= 25 && value < 50) { - return 25; - } else if (value >= 50 && value < 100) { - return 50; - } else if (value >= 100) { - return 100; - } else { - return value; - } -} - -function onlyPrintEvents(e) { - return e.eventType === EventTypeEnum.PRINT; -} - -var ttyPlayer_TtyPlayer = function (_Tty) { - ttyPlayer_inherits(TtyPlayer, _Tty); - - function TtyPlayer(_ref2) { - var url = _ref2.url; - - ttyPlayer_classCallCheck(this, TtyPlayer); - - var _this3 = ttyPlayer_possibleConstructorReturn(this, (TtyPlayer.__proto__ || Object.getPrototypeOf(TtyPlayer)).call(this, {})); - - _this3.currentEventIndex = 0; - _this3.current = 0; - _this3.duration = 0; - _this3.isPlaying = false; - _this3.isError = false; - _this3.isReady = false; - _this3.isLoading = true; - _this3.errText = ''; - - _this3._posToEventIndexMap = []; - _this3._eventProvider = new ttyPlayer_EventProvider({ url: url }); - return _this3; - } - - // override - - - ttyPlayer_createClass(TtyPlayer, [{ - key: 'send', - value: function send() {} - - // override - - }, { - key: 'connect', - value: function connect() { - var _this4 = this; - - this._setStatusFlag({ isLoading: true }); - this._eventProvider.init().then(function () { - _this4._init(); - _this4._setStatusFlag({ isReady: true }); - }).fail(function (err) { - ttyPlayer_logger.error('unable to init event provider', err); - _this4.handleError(err); - }).always(this._change.bind(this)); - - this._change(); - } - }, { - key: 'handleError', - value: function handleError(err) { - this._setStatusFlag({ - isError: true, - errText: api["a" /* default */].getErrorText(err) - }); - } - }, { - key: '_init', - value: function _init() { - var _this5 = this; - - this.duration = this._eventProvider.getDuration(); - this._eventProvider.events.forEach(function (item) { - return _this5._posToEventIndexMap.push(item.msNormalized); - }); - } - }, { - key: 'move', - value: function move(newPos) { - if (!this.isReady) { - return; - } - - if (newPos === undefined) { - newPos = this.current + 1; - } - - if (newPos < 0) { - newPos = 0; - } - - if (newPos > this.duration) { - this.stop(); - } - - var newEventIndex = this._getEventIndex(newPos) + 1; - - if (newEventIndex === this.currentEventIndex) { - this.current = newPos; - this._change(); - return; - } - - var isRewind = this.currentEventIndex > newEventIndex; - - try { - // we cannot playback the content within terminal so instead: - // 1. tell terminal to reset. - // 2. tell terminal to render 1 huge chunk that has everything up to current - // location. - if (isRewind) { - this.emit(TermEventEnum.RESET); - } - - var from = isRewind ? 0 : this.currentEventIndex; - var to = newEventIndex; - var events = this._eventProvider.events.slice(from, to); - var printEvents = events.filter(onlyPrintEvents); - - this._display(printEvents); - this.currentEventIndex = newEventIndex; - this.current = newPos; - this._change(); - } catch (err) { - ttyPlayer_logger.error('move', err); - this.handleError(err); - } - } - }, { - key: 'stop', - value: function stop() { - this.isPlaying = false; - this.timer = clearInterval(this.timer); - this._change(); - } - }, { - key: 'play', - value: function play() { - if (this.isPlaying) { - return; - } - - this.isPlaying = true; - - // start from the beginning if at the end - if (this.current >= this.duration) { - this.current = STREAM_START_INDEX; - this.emit(TermEventEnum.RESET); - } - - this.timer = setInterval(this.move.bind(this), PLAY_SPEED); - this._change(); - } - }, { - key: 'getCurrentTime', - value: function getCurrentTime() { - if (this.currentEventIndex) { - var displayTime = this._eventProvider.events[this.currentEventIndex - 1].displayTime; - - return displayTime; - } else { - return '--:--'; - } - } - }, { - key: 'getEventCount', - value: function getEventCount() { - return this._eventProvider.events.length; - } - }, { - key: '_display', - value: function _display(events) { - if (!events || events.length === 0) { - return; - } - - var groups = [{ - data: [events[0].data], - w: events[0].w, - h: events[0].h - }]; - - var cur = groups[0]; - - // group events by screen size and construct 1 chunk of data per group - for (var i = 1; i < events.length; i++) { - if (cur.w === events[i].w && cur.h === events[i].h) { - cur.data.push(events[i].data); - } else { - cur = { - data: [events[i].data], - w: events[i].w, - h: events[i].h - }; - - groups.push(cur); - } - } - - // render each group - for (var _i = 0; _i < groups.length; _i++) { - var str = groups[_i].data.join(''); - var _groups$_i = groups[_i], - h = _groups$_i.h, - w = _groups$_i.w; - - if (str.length > 0) { - this.emit(TermEventEnum.RESIZE, { h: h, w: w }); - this.emit(TermEventEnum.DATA, str); - } - } - } - }, { - key: '_setStatusFlag', - value: function _setStatusFlag(newStatus) { - var _newStatus$isReady = newStatus.isReady, - isReady = _newStatus$isReady === undefined ? false : _newStatus$isReady, - _newStatus$isError = newStatus.isError, - isError = _newStatus$isError === undefined ? false : _newStatus$isError, - _newStatus$isLoading = newStatus.isLoading, - isLoading = _newStatus$isLoading === undefined ? false : _newStatus$isLoading, - _newStatus$errText = newStatus.errText, - errText = _newStatus$errText === undefined ? '' : _newStatus$errText; - - - this.isReady = isReady; - this.isError = isError; - this.isLoading = isLoading; - this.errText = errText; - } - }, { - key: '_getEventIndex', - value: function _getEventIndex(num) { - var arr = this._posToEventIndexMap; - var low = 0; - var hi = arr.length - 1; - - while (hi - low > 1) { - var mid = Math.floor((low + hi) / 2); - if (arr[mid] < num) { - low = mid; - } else { - hi = mid; - } - } - - if (num - arr[low] <= arr[hi] - num) { - return low; - } - - return hi; - } - }, { - key: '_change', - value: function _change() { - this.emit('change'); - } - }]); - - return TtyPlayer; -}(tty); - -/* harmony default export */ var ttyPlayer = (ttyPlayer_TtyPlayer); - -// CONCATENATED MODULE: ./src/app/components/player/items.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var items_ErrorIndicator = function ErrorIndicator(_ref) { - var text = _ref.text; - return react_default.a.createElement( - "div", - { className: "grv-terminalhost-indicator-error" }, - react_default.a.createElement("i", { className: "fa fa-exclamation-triangle fa-3x text-warning" }), - react_default.a.createElement( - "div", - { className: "m-l" }, - react_default.a.createElement( - "strong", - null, - text || "Error" - ) - ) - ); -}; - -var items_WarningIndicator = function WarningIndicator(_ref2) { - var text = _ref2.text; - return react_default.a.createElement( - "div", - { className: "grv-terminalhost-indicator-error" }, - react_default.a.createElement( - "h3", - null, - text - ) - ); -}; -// CONCATENATED MODULE: ./src/app/components/player/player.jsx -var player_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -function player_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function player_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function player_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - -perfect_scrollbar_jquery_default()(jquery_default.a); - -var player_Terminal = function (_GrvTerminal) { - player_inherits(Terminal, _GrvTerminal); - - function Terminal(tty, el) { - player_classCallCheck(this, Terminal); - - var _this = player_possibleConstructorReturn(this, (Terminal.__proto__ || Object.getPrototypeOf(Terminal)).call(this, { el: el, scrollBack: 1000 })); - - _this.tty = tty; - return _this; - } - - player_createClass(Terminal, [{ - key: 'connect', - value: function connect() {} - }, { - key: 'open', - value: function open() { - _get(Terminal.prototype.__proto__ || Object.getPrototypeOf(Terminal.prototype), 'open', this).call(this); - jquery_default()(this._el).perfectScrollbar(); - } - }, { - key: 'resize', - value: function resize(cols, rows) { - // ensure that cursor is visible as xterm hides it on blur event - this.term.cursorState = 1; - _get(Terminal.prototype.__proto__ || Object.getPrototypeOf(Terminal.prototype), 'resize', this).call(this, cols, rows); - jquery_default()(this._el).perfectScrollbar('update'); - } - }, { - key: 'destroy', - value: function destroy() { - _get(Terminal.prototype.__proto__ || Object.getPrototypeOf(Terminal.prototype), 'destroy', this).call(this); - jquery_default()(this._el).perfectScrollbar('destroy'); - } - }, { - key: '_disconnect', - value: function _disconnect() {} - }, { - key: '_requestResize', - value: function _requestResize() {} - }]); - - return Terminal; -}(terminal); - -var player_Content = function (_React$Component) { - player_inherits(Content, _React$Component); - - function Content() { - player_classCallCheck(this, Content); - - return player_possibleConstructorReturn(this, (Content.__proto__ || Object.getPrototypeOf(Content)).apply(this, arguments)); - } - - player_createClass(Content, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var tty = this.props.tty; - this.terminal = new player_Terminal(tty, this.refs.container); - this.terminal.open(); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.terminal.destroy(); - } - }, { - key: 'render', - value: function render() { - var isLoading = this.props.tty.isLoading; - // need to hide the terminal cursor while fetching for events - var style = { - visibility: isLoading ? "hidden" : "initial" - }; - - return react_default.a.createElement('div', { style: style, ref: 'container' }); - } - }]); - - return Content; -}(react_default.a.Component); - -player_Content.propTypes = { - tty: react_default.a.PropTypes.object.isRequired -}; - -var player_ControlPanel = function (_React$Component2) { - player_inherits(ControlPanel, _React$Component2); - - function ControlPanel() { - player_classCallCheck(this, ControlPanel); - - return player_possibleConstructorReturn(this, (ControlPanel.__proto__ || Object.getPrototypeOf(ControlPanel)).apply(this, arguments)); - } - - player_createClass(ControlPanel, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var el = react_dom_default.a.findDOMNode(this); - var btn = el.querySelector('.grv-session-player-controls button'); - btn && btn.focus(); - } - }, { - key: 'render', - value: function render() { - var _props = this.props, - isPlaying = _props.isPlaying, - min = _props.min, - max = _props.max, - value = _props.value, - onChange = _props.onChange, - onToggle = _props.onToggle, - time = _props.time; - - var btnClass = isPlaying ? 'fa fa-stop' : 'fa fa-play'; - return react_default.a.createElement( - 'div', - { className: 'grv-session-player-controls' }, - react_default.a.createElement( - 'button', - { className: 'btn', onClick: onToggle }, - react_default.a.createElement('i', { className: btnClass }) - ), - react_default.a.createElement( - 'div', - { className: 'grv-session-player-controls-time' }, - time - ), - react_default.a.createElement( - 'div', - { className: 'grv-flex-column' }, - react_default.a.createElement(react_slider_default.a, { - min: min, - max: max, - value: value, - onChange: onChange, - defaultValue: 1, - withBars: true, - className: 'grv-slider' }) - ) - ); - } - }]); - - return ControlPanel; -}(react_default.a.Component); - -var player_Player = function (_React$Component3) { - player_inherits(Player, _React$Component3); - - function Player(props) { - player_classCallCheck(this, Player); - - var _this4 = player_possibleConstructorReturn(this, (Player.__proto__ || Object.getPrototypeOf(Player)).call(this, props)); - - _this4.updateState = function () { - var newState = _this4.calculateState(); - _this4.setState(newState); - }; - - _this4.onTogglePlayStop = function () { - if (_this4.state.isPlaying) { - _this4.tty.stop(); - } else { - _this4.tty.play(); - } - }; - - _this4.onMove = function (value) { - _this4.tty.move(value); - }; - - var url = _this4.props.url; - - _this4.tty = new ttyPlayer_TtyPlayer({ url: url }); - _this4.state = _this4.calculateState(); - return _this4; - } - - player_createClass(Player, [{ - key: 'calculateState', - value: function calculateState() { - return { - eventCount: this.tty.getEventCount(), - duration: this.tty.duration, - min: 1, - time: this.tty.getCurrentTime(), - isLoading: this.tty.isLoading, - isPlaying: this.tty.isPlaying, - isError: this.tty.isError, - errText: this.tty.errText, - current: this.tty.current, - canPlay: this.tty.length > 1 - }; - } - }, { - key: 'componentDidMount', - value: function componentDidMount() { - this.tty.on('change', this.updateState); - this.tty.connect(); - this.tty.play(); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.tty.stop(); - this.tty.removeAllListeners(); - } - }, { - key: 'render', - value: function render() { - var _state = this.state, - isPlaying = _state.isPlaying, - isLoading = _state.isLoading, - isError = _state.isError, - errText = _state.errText, - time = _state.time, - min = _state.min, - duration = _state.duration, - current = _state.current, - eventCount = _state.eventCount; - - - if (isError) { - return react_default.a.createElement(items_ErrorIndicator, { text: errText }); - } - - if (!isLoading && eventCount === 0) { - return react_default.a.createElement(items_WarningIndicator, { text: 'The recording for this session is not available.' }); - } - - return react_default.a.createElement( - 'div', - { className: 'grv-session-player-content' }, - react_default.a.createElement(player_Content, { tty: this.tty }), - isLoading && react_default.a.createElement(indicator, null), - eventCount > 0 && react_default.a.createElement(player_ControlPanel, { - isPlaying: isPlaying, - time: time, - min: min, - max: duration, - value: current, - onToggle: this.onTogglePlayStop, - onChange: this.onMove }) - ); - } - }]); - - return Player; -}(react_default.a.Component); -// CONCATENATED MODULE: ./src/app/components/player/playerHost.jsx -var playerHost_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function playerHost_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function playerHost_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function playerHost_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -var playerHost_PlayerHost = function (_React$Component) { - playerHost_inherits(PlayerHost, _React$Component); - - function PlayerHost() { - playerHost_classCallCheck(this, PlayerHost); - - return playerHost_possibleConstructorReturn(this, (PlayerHost.__proto__ || Object.getPrototypeOf(PlayerHost)).apply(this, arguments)); - } - - playerHost_createClass(PlayerHost, [{ - key: 'componentWillMount', - value: function componentWillMount() { - var _props$params = this.props.params, - sid = _props$params.sid, - siteId = _props$params.siteId; - - this.url = config["a" /* default */].api.getFetchSessionUrl({ siteId: siteId, sid: sid }); - } - }, { - key: 'render', - value: function render() { - if (!this.url) { - return null; - } - - var siteId = this.props.params.siteId; - - var title = siteId + ' \xB7 Player'; - return react_default.a.createElement( - DocumentTitle, - { title: title }, - react_default.a.createElement( - 'div', - { className: 'grv-terminalhost grv-session-player' }, - react_default.a.createElement( - 'div', - { className: 'grv-session-player-actions m-t-md' }, - react_default.a.createElement( - 'div', - { title: 'Close', style: playerHost_closeTextStyle, onClick: player_actions_close }, - react_default.a.createElement(icons_CloseIcon, null) - ) - ), - react_default.a.createElement(player_Player, { url: this.url }) - ) - ); - } - }]); - - return PlayerHost; -}(react_default.a.Component); - -var playerHost_closeTextStyle = { - width: "30px", - height: "30px", - display: "block", - margin: "0 auto" -}; - -/* harmony default export */ var playerHost = (playerHost_PlayerHost); -// CONCATENATED MODULE: ./src/app/features/featureAudit.js -var featureAudit_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function featureAudit_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function featureAudit_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function featureAudit_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - -var auditNavItem = { - icon: 'fa fa-group', - to: config["a" /* default */].routes.sessions, - title: 'Sessions' -}; - -var featureAudit_AuditFeature = function (_FeatureBase) { - featureAudit_inherits(AuditFeature, _FeatureBase); - - featureAudit_createClass(AuditFeature, [{ - key: 'componentDidMount', - value: function componentDidMount() { - this.init(); - } - }, { - key: 'init', - value: function init() { - var _this2 = this; - - if (!this.wasInitialized()) { - app_reactor["a" /* default */].batch(function () { - _this2.startProcessing(); - Object(storedSessionsFilter_actions["fetchSiteEventsWithinTimeRange"])().done(_this2.stopProcessing.bind(_this2)).fail(_this2.handleError.bind(_this2)); - }); - } - } - }]); - - function AuditFeature(routes) { - featureAudit_classCallCheck(this, AuditFeature); - - var _this = featureAudit_possibleConstructorReturn(this, (AuditFeature.__proto__ || Object.getPrototypeOf(AuditFeature)).call(this)); - - var auditRoutes = [{ - path: config["a" /* default */].routes.sessions, - title: "Sessions", - component: _this.withMe(sessions_main) - }, { - path: config["a" /* default */].routes.player, - title: "Player", - components: { - CurrentSessionHost: playerHost - } - }]; - - routes.push.apply(routes, auditRoutes); - return _this; - } - - featureAudit_createClass(AuditFeature, [{ - key: 'onload', - value: function onload() { - var sessAccess = getAcl().getSessionAccess(); - if (sessAccess.list) { - addNavItem(auditNavItem); - this.init(); - } - } - }]); - - return AuditFeature; -}(featureBase); - -/* harmony default export */ var featureAudit = (featureAudit_AuditFeature); -// CONCATENATED MODULE: ./src/app/featureActivator.js -var featureActivator_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function featureActivator_toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -function featureActivator_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var featureActivator_logger = logger["a" /* default */].create('featureActivator'); - -/** - * Invokes methods on a group of registered features. - * - */ - -var featureActivator_FeactureActivator = function () { - function FeactureActivator() { - featureActivator_classCallCheck(this, FeactureActivator); - - this._features = []; - } - - featureActivator_createClass(FeactureActivator, [{ - key: 'register', - value: function register(feature) { - if (!feature) { - throw Error('Feature is undefined'); - } - - this._features.push(feature); - } - - /** - * to be called during app initialization. Becomes useful if feature wants to be - * part of app initialization flow. - */ - - }, { - key: 'preload', - value: function preload(context) { - var promises = this._features.map(function (f) { - var featurePromise = jquery_default.a.Deferred(); - // feature should handle failed promises thus always resolve. - f.init(context).always(function () { - featurePromise.resolve(); - }); - - return featurePromise; - }); - - return jquery_default.a.when.apply(jquery_default.a, featureActivator_toConsumableArray(promises)); - } - }, { - key: 'onload', - value: function onload(context) { - var _this = this; - - this._features.forEach(function (f) { - _this._invokeOnload(f, context); - }); - } - }, { - key: 'getFirstAvailable', - value: function getFirstAvailable() { - return this._features.find(function (f) { - return !f.isFailed(); - }); - } - }, { - key: 'getFeatures', - value: function getFeatures() { - return this._features; - } - }, { - key: '_invokeOnload', - value: function _invokeOnload(f) { - try { - for (var _len = arguments.length, props = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - props[_key - 1] = arguments[_key]; - } - - f.onload.apply(f, props); - } catch (err) { - featureActivator_logger.error('failed to invoke feature onload()', err); - } - } - }]); - - return FeactureActivator; -}(); - -/* harmony default export */ var app_featureActivator = (featureActivator_FeactureActivator); -// CONCATENATED MODULE: ./src/app/flux/settings/getters.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/* harmony default export */ var settings_getters = ({ - store: ['tlpt_settings'] -}); -// CONCATENATED MODULE: ./src/app/components/settings/main.jsx -var settings_main_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function settings_main_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function settings_main_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function settings_main_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var main_Separator = function Separator() { - return react_default.a.createElement('div', { className: 'grv-settings-header-line-solid m-t-sm m-b-sm' }); -}; - -var main_Settings = function (_React$Component) { - settings_main_inherits(Settings, _React$Component); - - function Settings() { - settings_main_classCallCheck(this, Settings); - - return settings_main_possibleConstructorReturn(this, (Settings.__proto__ || Object.getPrototypeOf(Settings)).apply(this, arguments)); - } - - settings_main_createClass(Settings, [{ - key: 'renderHeaderItem', - value: function renderHeaderItem(item, key) { - var to = item.to, - isIndex = item.isIndex, - title = item.title; - - var className = this.context.router.isActive(to, isIndex) ? "active" : ""; - return react_default.a.createElement( - 'li', - { key: key, className: className }, - react_default.a.createElement( - lib["Link"], - { to: to }, - react_default.a.createElement( - 'h2', - { className: 'm-b-xxs' }, - title - ) - ), - react_default.a.createElement(main_Separator, null) - ); - } - }, { - key: 'render', - value: function render() { - var store = this.props.store; - - var $headerItems = store.getNavItems().map(this.renderHeaderItem.bind(this)); - - if (!store.isReady()) { - return null; - } - - return react_default.a.createElement( - 'div', - { className: 'grv-page grv-settings' }, - react_default.a.createElement( - 'ul', - { className: 'grv-settings-header-menu' }, - $headerItems - ), - $headerItems.length > 0 && react_default.a.createElement(main_Separator, null), - this.props.children - ); - } - }]); - - return Settings; -}(react_default.a.Component); - -main_Settings.contextTypes = { - router: react["PropTypes"].object.isRequired -}; - - -function settings_main_mapStateToProps() { - return { - store: settings_getters.store - }; -} - -/* harmony default export */ var settings_main = (Object(build["connect"])(settings_main_mapStateToProps)(main_Settings)); -// CONCATENATED MODULE: ./src/app/flux/settings/actionTypes.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var INIT = 'SETTINGS_INIT'; -var actionTypes_ADD_NAV_ITEM = 'SETTINGS_ADD_NAV_ITEM'; -var SET_RES_TO_DELETE = 'SETTINGS_SET_RES_TO_DELETE'; -// CONCATENATED MODULE: ./src/app/flux/settings/actions.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -function actions_addNavItem(navItem) { - app_reactor["a" /* default */].dispatch(actionTypes_ADD_NAV_ITEM, navItem); -} - -function initSettings(featureActivator) { - // init only once - var store = app_reactor["a" /* default */].evaluate(settings_getters.store); - if (store.isReady()) { - return; - } - - featureActivator.onload(); - app_reactor["a" /* default */].dispatch(INIT, {}); - initSettingsStatus.success(); -} -// CONCATENATED MODULE: ./src/app/components/settings/index.jsx -var settings_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function settings_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function settings_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function settings_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var settings_SettingsIndex = function (_React$Component) { - settings_inherits(SettingsIndex, _React$Component); - - function SettingsIndex() { - settings_classCallCheck(this, SettingsIndex); - - return settings_possibleConstructorReturn(this, (SettingsIndex.__proto__ || Object.getPrototypeOf(SettingsIndex)).apply(this, arguments)); - } - - settings_createClass(SettingsIndex, [{ - key: 'componentDidMount', - value: function componentDidMount() { - var route = this.getAvailableRoute(); - if (route) { - this.props.router.replace({ pathname: route }); - } - } - }, { - key: 'getAvailableRoute', - value: function getAvailableRoute() { - var items = this.props.store.getNavItems(); - if (items && items[0]) { - return items[0].to; - } - - return null; - } - }, { - key: 'render', - value: function render() { - return react_default.a.createElement(msgPage_AccessDenied, null); - } - }]); - - return SettingsIndex; -}(react_default.a.Component); - -settings_SettingsIndex.propTypes = { - router: react_default.a.PropTypes.object.isRequired, - store: react_default.a.PropTypes.object.isRequired, - location: react_default.a.PropTypes.object.isRequired -}; - - -function settings_mapStateToProps() { - return { - store: settings_getters.store - }; -} - -/* harmony default export */ var components_settings = (connect(settings_mapStateToProps)(settings_SettingsIndex)); -// CONCATENATED MODULE: ./src/app/features/settings/featureSettings.js -var featureSettings_get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - -var featureSettings_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function featureSettings_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function featureSettings_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function featureSettings_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - -var settingsNavItem = { - icon: 'fa fa-wrench', - to: config["a" /* default */].routes.settingsBase, - title: 'Settings' - - /** - * Describes nested features within Settings - */ -};var SettingsFeatureBase = function (_FeatureBase) { - featureSettings_inherits(SettingsFeatureBase, _FeatureBase); - - function SettingsFeatureBase(props) { - featureSettings_classCallCheck(this, SettingsFeatureBase); - - return featureSettings_possibleConstructorReturn(this, (SettingsFeatureBase.__proto__ || Object.getPrototypeOf(SettingsFeatureBase)).call(this, props)); - } - - featureSettings_createClass(SettingsFeatureBase, [{ - key: 'isEnabled', - value: function isEnabled() { - return true; - } - }]); - - return SettingsFeatureBase; -}(featureBase); - -var featureSettings_SettingsFeature = function (_FeatureBase2) { - featureSettings_inherits(SettingsFeature, _FeatureBase2); - - featureSettings_createClass(SettingsFeature, [{ - key: 'addChild', - value: function addChild(feature) { - if (!(feature instanceof SettingsFeatureBase)) { - throw Error('feature must implement SettingsFeatureBase'); - } - - this.featureActivator.register(feature); - } - }]); - - function SettingsFeature(routes) { - featureSettings_classCallCheck(this, SettingsFeature); - - var _this2 = featureSettings_possibleConstructorReturn(this, (SettingsFeature.__proto__ || Object.getPrototypeOf(SettingsFeature)).call(this, constants["d" /* TRYING_TO_INIT_SETTINGS */])); - - _this2.featureActivator = new app_featureActivator(); - _this2.childRoutes = []; - - var settingsRoutes = { - path: config["a" /* default */].routes.settingsBase, - component: featureSettings_get(SettingsFeature.prototype.__proto__ || Object.getPrototypeOf(SettingsFeature.prototype), 'withMe', _this2).call(_this2, settings_main), - indexRoute: { - // need index component to handle default redirect to available nested feature - component: components_settings - }, - childRoutes: _this2.childRoutes - }; - - routes.push(settingsRoutes); - return _this2; - } - - featureSettings_createClass(SettingsFeature, [{ - key: 'componentDidMount', - value: function componentDidMount() { - try { - initSettings(this.featureActivator); - } catch (err) { - this.handleError(err); - } - } - }, { - key: 'onload', - value: function onload() { - var features = this.featureActivator.getFeatures(); - var some = features.some(function (f) { - return f.isEnabled(); - }); - if (some) { - addNavItem(settingsNavItem); - } - } - }]); - - return SettingsFeature; -}(featureBase); - -/* harmony default export */ var featureSettings = (featureSettings_SettingsFeature); -// CONCATENATED MODULE: ./src/app/features/index.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -// CONCATENATED MODULE: ./src/app/features/settings/flags.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -function isAccountEnabled() { - return getUser().isSso() == false; -} -// CONCATENATED MODULE: ./src/app/components/alerts.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -var alerts_Danger = function Danger(props) { - return react_default.a.createElement( - 'div', - { className: classnames_default()("grv-alert grv-alert-danger", props.className) }, - props.children - ); -}; - -var alerts_Info = function Info(props) { - return react_default.a.createElement( - 'div', - { className: classnames_default()("grv-alert grv-alert-info", props.className) }, - props.children - ); -}; - -var alerts_Success = function Success(props) { - return react_default.a.createElement( - 'div', - { className: classnames_default()("grv-alert grv-alert-success", props.className) }, - ' ', - react_default.a.createElement('i', { className: 'fa fa-check m-r-xs' }), - ' ', - props.children - ); -}; -// CONCATENATED MODULE: ./src/app/flux/settingsAccount/actions.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - -var settingsAccount_actions_logger = logger["a" /* default */].create("flux/settingsAccount/actions"); - -function actions_changePasswordWithU2f(oldPsw, newPsw) { - var promise = services_auth.changePasswordWithU2f(oldPsw, newPsw); - _handleChangePasswordPromise(promise); -} - -function actions_changePassword(oldPass, newPass, token) { - var promise = services_auth.changePassword(oldPass, newPass, token); - _handleChangePasswordPromise(promise); -} - -function resetPasswordChangeAttempt() { - changePasswordStatus.clear(); -} - -function _handleChangePasswordPromise(promise) { - changePasswordStatus.start(); - return promise.done(function () { - changePasswordStatus.success(); - }).fail(function (err) { - var msg = api["a" /* default */].getErrorText(err); - settingsAccount_actions_logger.error("change password", err); - changePasswordStatus.fail(msg); - // logout a user in case of access denied error - // (most likely a user exceeded a number of allowed attempts) - if (err.status == 403) { - services_session.logout(); - } - }); -} -// CONCATENATED MODULE: ./src/app/components/settings/accountTab.jsx -var accountTab_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var accountTab_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function accountTab_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function accountTab_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function accountTab_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - -var accountTab_Separator = function Separator() { - return react_default.a.createElement('div', { className: 'grv-settings-header-line-solid m-t-sm m-b-sm' }); -}; - -var accountTab_Label = function Label(_ref) { - var text = _ref.text; - return react_default.a.createElement( - 'label', - { style: { width: "150px", fontWeight: "normal" }, className: ' m-t-xs' }, - ' ', - text, - ' ' - ); -}; - -var accountTab_defaultState = { - oldPass: '', - newPass: '', - newPassConfirmed: '', - token: '' -}; - -var accountTab_AccountTab = function (_React$Component) { - accountTab_inherits(AccountTab, _React$Component); - - function AccountTab() { - var _ref2; - - var _temp, _this, _ret; - - accountTab_classCallCheck(this, AccountTab); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = accountTab_possibleConstructorReturn(this, (_ref2 = AccountTab.__proto__ || Object.getPrototypeOf(AccountTab)).call.apply(_ref2, [this].concat(args))), _this), _this.hasBeenClicked = false, _this.state = accountTab_extends({}, accountTab_defaultState), _this.onClick = function (e) { - e.preventDefault(); - if (_this.isValid()) { - var _this$state = _this.state, - oldPass = _this$state.oldPass, - newPass = _this$state.newPass, - token = _this$state.token; - - _this.hasBeenClicked = true; - if (_this.props.auth2faType === Auth2faTypeEnum.UTF) { - _this.props.onChangePassWithU2f(oldPass, newPass); - } else { - _this.props.onChangePass(oldPass, newPass, token); - } - } - }, _this.onKeyPress = function (e) { - if (e.key === 'Enter' && e.target.value) { - _this.onClick(e); - } - }, _temp), accountTab_possibleConstructorReturn(_this, _ret); - } - - accountTab_createClass(AccountTab, [{ - key: 'componentDidMount', - value: function componentDidMount() { - jquery_default()(this.refs.form).validate({ - rules: { - newPass: { - minlength: 6, - required: true - }, - newPassConfirmed: { - required: true, - equalTo: this.refs.newPass - } - }, - messages: { - passwordConfirmed: { - minlength: jquery_default.a.validator.format('Enter at least {0} characters'), - equalTo: 'Enter the same password as above' - } - } - }); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.props.onDestory && this.props.onDestory(); - } - }, { - key: 'isValid', - value: function isValid() { - var $form = jquery_default()(this.refs.form); - return $form.length === 0 || $form.valid(); - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(nextProps) { - var isSuccess = nextProps.attempt.isSuccess; - - if (isSuccess && this.hasBeenClicked) { - // reset all input fields on success - this.hasBeenClicked = false; - this.setState(accountTab_defaultState); - } - } - }, { - key: 'isU2f', - value: function isU2f() { - return this.props.auth2faType === Auth2faTypeEnum.UTF; - } - }, { - key: 'isOtp', - value: function isOtp() { - return this.props.auth2faType === Auth2faTypeEnum.OTP; - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - var isOtpEnabled = this.isOtp(); - var _props$attempt = this.props.attempt, - isFailed = _props$attempt.isFailed, - isProcessing = _props$attempt.isProcessing, - isSuccess = _props$attempt.isSuccess, - message = _props$attempt.message; - var _state = this.state, - oldPass = _state.oldPass, - newPass = _state.newPass, - newPassConfirmed = _state.newPassConfirmed; - - var waitForU2fKeyResponse = isProcessing && this.isU2f(); - - return react_default.a.createElement( - 'div', - { title: 'Change Password', className: 'm-t-sm grv-settings-account' }, - react_default.a.createElement( - 'h3', - { className: 'no-margins' }, - 'Change Password' - ), - react_default.a.createElement(accountTab_Separator, null), - react_default.a.createElement( - 'div', - { className: 'm-b m-l-xl', style: { maxWidth: "500px" } }, - react_default.a.createElement( - 'form', - { ref: 'form', onKeyPress: this.onKeyPress }, - react_default.a.createElement( - 'div', - null, - isFailed && react_default.a.createElement( - alerts_Danger, - { className: 'm-b-sm' }, - ' ', - message, - ' ' - ), - isSuccess && react_default.a.createElement( - alerts_Success, - { className: 'm-b-sm' }, - ' Your password has been changed ' - ), - waitForU2fKeyResponse && react_default.a.createElement( - alerts_Info, - { className: 'm-b-sm' }, - ' Insert your U2F key and press the button on the key ' - ) - ), - react_default.a.createElement( - layout.Flex, - { dir: 'row', className: 'm-t' }, - react_default.a.createElement(accountTab_Label, { text: 'Current Password:' }), - react_default.a.createElement( - 'div', - { style: { flex: "1" } }, - react_default.a.createElement('input', { - autoFocus: true, - type: 'password', - value: oldPass, - onChange: function onChange(e) { - return _this2.setState({ - oldPass: e.target.value - }); - }, - className: 'form-control required' }) - ) - ), - isOtpEnabled && react_default.a.createElement( - layout.Flex, - { dir: 'row', className: 'm-t-sm' }, - react_default.a.createElement(accountTab_Label, { text: '2nd factor token:' }), - react_default.a.createElement( - 'div', - { style: { flex: "1" } }, - react_default.a.createElement('input', { autoComplete: 'off', - style: { width: "100px" }, - value: this.state.token, - onChange: function onChange(e) { - return _this2.setState({ - 'token': e.target.value - }); - }, - className: 'form-control required', name: 'token' - }) - ) - ), - react_default.a.createElement( - layout.Flex, - { dir: 'row', className: 'm-t-lg' }, - react_default.a.createElement(accountTab_Label, { text: 'New Password:' }), - react_default.a.createElement( - 'div', - { style: { flex: "1" } }, - react_default.a.createElement('input', { - value: newPass, - onChange: function onChange(e) { - return _this2.setState({ - newPass: e.target.value - }); - }, - ref: 'newPass', - type: 'password', - name: 'newPass', - className: 'form-control' - }) - ) - ), - react_default.a.createElement( - layout.Flex, - { dir: 'row', className: 'm-t-sm' }, - react_default.a.createElement(accountTab_Label, { text: 'Confirm Password:' }), - react_default.a.createElement( - 'div', - { style: { flex: "1" } }, - react_default.a.createElement('input', { - type: 'password', - value: newPassConfirmed, - onChange: function onChange(e) { - return _this2.setState({ - newPassConfirmed: e.target.value - }); - }, - name: 'newPassConfirmed', - className: 'form-control' - }) - ) - ) - ) - ), - react_default.a.createElement( - 'button', - { disabled: isProcessing, onClick: this.onClick, type: 'submit', className: 'btn btn-sm btn-primary block' }, - 'Update' - ) - ); - } - }]); - - return AccountTab; -}(react_default.a.Component); - -accountTab_AccountTab.propTypes = { - attempt: react_default.a.PropTypes.object.isRequired, - onChangePass: react_default.a.PropTypes.func.isRequired, - onChangePassWithU2f: react_default.a.PropTypes.func.isRequired -}; - - -function accountTab_mapFluxToProps() { - return { - attempt: user_getters.pswChangeAttempt - }; -} - -function accountTab_mapStateToProps() { - return { - auth2faType: config["a" /* default */].getAuth2faType(), - onChangePass: actions_changePassword, - onChangePassWithU2f: actions_changePasswordWithU2f, - onDestory: resetPasswordChangeAttempt - }; -} - -/* harmony default export */ var accountTab = (connect(accountTab_mapFluxToProps, accountTab_mapStateToProps)(accountTab_AccountTab)); -// CONCATENATED MODULE: ./src/app/features/settings/featureSettingsAccount.js -var featureSettingsAccount_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function featureSettingsAccount_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function featureSettingsAccount_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function featureSettingsAccount_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -var featureUrl = config["a" /* default */].routes.settingsAccount; - -var featureSettingsAccount_AccountFeature = function (_SettingsFeatureBase) { - featureSettingsAccount_inherits(AccountFeature, _SettingsFeatureBase); - - function AccountFeature(routes) { - featureSettingsAccount_classCallCheck(this, AccountFeature); - - var _this = featureSettingsAccount_possibleConstructorReturn(this, (AccountFeature.__proto__ || Object.getPrototypeOf(AccountFeature)).call(this)); - - var route = { - path: featureUrl, - component: _this.withMe(documentTitle_withDocTitle('Account', accountTab)) - }; - - routes.push(route); - return _this; - } - - featureSettingsAccount_createClass(AccountFeature, [{ - key: 'isEnabled', - value: function isEnabled() { - return isAccountEnabled(); - } - }, { - key: 'init', - value: function init() { - if (!this.wasInitialized()) { - this.stopProcessing(); - } - } - }, { - key: 'onload', - value: function onload() { - if (!this.isEnabled()) { - return; - } - - var navItem = { - to: featureUrl, - title: "Account" - }; - - actions_addNavItem(navItem); - this.init(); - } - }]); - - return AccountFeature; -}(SettingsFeatureBase); - -/* harmony default export */ var featureSettingsAccount = (featureSettingsAccount_AccountFeature); -// CONCATENATED MODULE: ./src/app/features/settings/index.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -/** - * Adds nested feature to given Settings feature - * @param {*instance of Settings feature} settings - */ -var append = function append(settings, fctor) { - var f = new fctor(settings.childRoutes); - settings.addChild(f); -}; - -var settings_createSettings = function createSettings(routes) { - var settings = new featureSettings(routes); - append(settings, featureSettingsAccount); - return settings; -}; -// CONCATENATED MODULE: ./src/app/services/browser.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -function detectPlatform() { - var userAgent = window.navigator.userAgent; - return { - isWin: userAgent.indexOf('Windows') >= 0, - isMac: userAgent.indexOf('Macintosh') >= 0, - isLinux: userAgent.indexOf('Linux') >= 0 - }; -} - -var platform = detectPlatform(); -// CONCATENATED MODULE: ./src/app/flux/app/appStore.js -var appStore_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function appStore_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function appStore_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function appStore_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var AppRec = function (_Record) { - appStore_inherits(AppRec, _Record); - - function AppRec(props) { - appStore_classCallCheck(this, AppRec); - - return appStore_possibleConstructorReturn(this, (AppRec.__proto__ || Object.getPrototypeOf(AppRec)).call(this, props)); - } - - appStore_createClass(AppRec, [{ - key: 'setSiteId', - value: function setSiteId(siteId) { - return this.set('siteId', siteId); - } - }, { - key: 'getClusterName', - value: function getClusterName() { - return this.get('siteId'); - } - }, { - key: 'getNavItems', - value: function getNavItems() { - return this.navItems.toJS(); - } - }, { - key: 'addNavItem', - value: function addNavItem(navItem) { - return this.set('navItems', this.navItems.push(navItem)); - } - }]); - - return AppRec; -}(Object(immutable["Record"])({ - siteId: null, - navItems: new immutable["List"]() -})); - -function getStore() { - return app_reactor["a" /* default */].evaluate(['tlpt']); -} - -/* harmony default export */ var appStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new AppRec(); - }, - initialize: function initialize() { - this.on(SET_SITE_ID, function (state, siteId) { - return state.setSiteId(siteId); - }); - this.on(ADD_NAV_ITEM, function (state, navItem) { - return state.addNavItem(navItem); - }); - } -})); -// CONCATENATED MODULE: ./src/app/components/navLeftBar.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - -function NavLeftBar(props) { - var items = getStore().getNavItems(); - var name = getUser().getName(); - var $items = items.map(function (i, index) { - var className = props.router.isActive(i.to) ? 'active' : ''; - return react_default.a.createElement( - 'li', - { key: index, className: className, title: i.title }, - react_default.a.createElement( - lib["IndexLink"], - { to: i.to }, - react_default.a.createElement('i', { className: i.icon }) - ) - ); - }); - - $items.push(react_default.a.createElement( - 'li', - { key: $items.length, title: 'help' }, - react_default.a.createElement( - 'a', - { href: config["a" /* default */].helpUrl, target: '_blank' }, - react_default.a.createElement('i', { className: 'fa fa-question' }) - ) - )); - - $items.push(react_default.a.createElement( - 'li', - { key: $items.length, title: 'logout' }, - react_default.a.createElement( - 'a', - { href: '#', onClick: user_actions.logout }, - react_default.a.createElement('i', { className: 'fa fa-sign-out', style: { marginRight: 0 } }) - ) - )); - - return react_default.a.createElement( - 'nav', - { className: 'grv-nav navbar-default', role: 'navigation' }, - react_default.a.createElement( - 'ul', - { className: 'nav text-center', id: 'side-menu' }, - react_default.a.createElement( - 'li', - null, - react_default.a.createElement(icons_UserIcon, { name: name }) - ), - $items - ) - ); -} - -NavLeftBar.propTypes = { - router: react_default.a.PropTypes.object.isRequired -}; -// CONCATENATED MODULE: ./src/app/components/app.jsx -var app_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function app_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function app_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function app_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - -var app_App = function (_Component) { - app_inherits(App, _Component); - - function App() { - var _ref; - - var _temp, _this, _ret; - - app_classCallCheck(this, App); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = app_possibleConstructorReturn(this, (_ref = App.__proto__ || Object.getPrototypeOf(App)).call.apply(_ref, [this].concat(args))), _this), _this.onRefresh = function () { - return Object(sessions_actions["a" /* fetchActiveSessions */])(); - }, _temp), app_possibleConstructorReturn(_this, _ret); - } - - app_createClass(App, [{ - key: 'render', - value: function render() { - var _props = this.props, - router = _props.router, - initAttempt = _props.initAttempt; - var isProcessing = initAttempt.isProcessing, - isSuccess = initAttempt.isSuccess, - isFailed = initAttempt.isFailed, - message = initAttempt.message; - - - if (isProcessing) { - return react_default.a.createElement(indicator, { type: 'bounce' }); - } - - if (isFailed) { - return react_default.a.createElement(msgPage_Failed, { message: message }); - } - - var className = classnames_default()('grv-tlpt grv-flex grv-flex-row', { - '--isLinux': platform.isLinux, - '--isWin': platform.isWin, - '--isMac': platform.isMac - }); - - if (isSuccess) { - return react_default.a.createElement( - 'div', - { className: className }, - react_default.a.createElement(dataProvider, { onFetch: this.onRefresh, time: 3000 }), - this.props.CurrentSessionHost, - react_default.a.createElement(NavLeftBar, { router: router }), - this.props.children - ); - } - - return null; - } - }]); - - return App; -}(react["Component"]); - -function app_mapStateToProps() { - return { - initAttempt: app_getters["a" /* default */].initAttempt - }; -} - -/* harmony default export */ var app = (Object(build["connect"])(app_mapStateToProps)(app_App)); -// EXTERNAL MODULE: ./src/styles/grv.scss -var grv = __webpack_require__("7WIf"); - -// CONCATENATED MODULE: ./src/app/flux/terminal/store.js -var terminal_store_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function terminal_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function terminal_store_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function terminal_store_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - -var TermStatusRec = new immutable["Record"]({ - isReady: false, - isLoading: false, - isNotFound: false, - isError: false, - errorText: undefined -}); - -var store_TermRec = function (_Record) { - terminal_store_inherits(TermRec, _Record); - - function TermRec() { - terminal_store_classCallCheck(this, TermRec); - - return terminal_store_possibleConstructorReturn(this, (TermRec.__proto__ || Object.getPrototypeOf(TermRec)).apply(this, arguments)); - } - - terminal_store_createClass(TermRec, [{ - key: 'getClusterName', - value: function getClusterName() { - return this.siteId; - } - }, { - key: 'getTtyParams', - value: function getTtyParams() { - var _localStorage$getBear = localStorage["b" /* default */].getBearerToken(), - accessToken = _localStorage$getBear.accessToken; - - var server_id = this.serverId; - return { - login: this.login, - sid: this.sid, - token: accessToken, - ttyUrl: config["a" /* default */].api.ttyWsAddr, - cluster: this.siteId, - getTarget: function getTarget() { - return { server_id: server_id }; - } - }; - } - }, { - key: 'getServerLabel', - value: function getServerLabel() { - if (this.hostname && this.login) { - return this.login + '@' + this.hostname; - } - - if (this.serverId && this.login) { - return this.login + '@' + this.serverId; - } - - return ''; - } - }]); - - return TermRec; -}(Object(immutable["Record"])({ - status: TermStatusRec(), - hostname: null, - login: null, - siteId: null, - serverId: null, - sid: null -})); - -/* harmony default export */ var terminal_store = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new store_TermRec(); - }, - initialize: function initialize() { - this.on(TLPT_TERMINAL_INIT, store_init); - this.on(TLPT_TERMINAL_CLOSE, store_close); - this.on(TLPT_TERMINAL_SET_STATUS, changeStatus); - } -})); - -function store_close() { - return new store_TermRec(); -} - -function store_init(state, json) { - return new store_TermRec(json); -} - -function changeStatus(state, status) { - return state.setIn(['status'], new TermStatusRec(status)); -} -// CONCATENATED MODULE: ./src/app/flux/settings/store.js -var settings_store_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function settings_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function settings_store_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function settings_store_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var SettingsRec = function (_Record) { - settings_store_inherits(SettingsRec, _Record); - - function SettingsRec(params) { - settings_store_classCallCheck(this, SettingsRec); - - return settings_store_possibleConstructorReturn(this, (SettingsRec.__proto__ || Object.getPrototypeOf(SettingsRec)).call(this, params)); - } - - settings_store_createClass(SettingsRec, [{ - key: 'isReady', - value: function isReady() { - return this.isInitialized; - } - }, { - key: 'getNavItems', - value: function getNavItems() { - return this.navItems.toJS(); - } - }, { - key: 'addNavItem', - value: function addNavItem(navItem) { - return this.set('navItems', this.navItems.push(navItem)); - } - }]); - - return SettingsRec; -}(Object(immutable["Record"])({ - isInitialized: false, - navItems: new immutable["List"]() -})); - -/* harmony default export */ var settings_store = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new SettingsRec(); - }, - initialize: function initialize() { - this.on(INIT, function (state) { - return state.set('isInitialized', true); - }); - this.on(actionTypes_ADD_NAV_ITEM, function (state, navItem) { - return state.addNavItem(navItem); - }); - } -})); -// EXTERNAL MODULE: ./src/app/flux/status/statusStore.js -var statusStore = __webpack_require__("PVWJ"); - -// CONCATENATED MODULE: ./src/app/flux/user/userStore.js -var userStore_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function userStore_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function userStore_possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function userStore_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var userStore_UserRec = function (_Record) { - userStore_inherits(UserRec, _Record); - - function UserRec(params) { - userStore_classCallCheck(this, UserRec); - - return userStore_possibleConstructorReturn(this, (UserRec.__proto__ || Object.getPrototypeOf(UserRec)).call(this, params)); - } - - userStore_createClass(UserRec, [{ - key: 'isSso', - value: function isSso() { - return this.get('authType') === AuthTypeEnum.SSO; - } - }, { - key: 'getName', - value: function getName() { - return this.get('name'); - } - }]); - - return UserRec; -}(Object(immutable["Record"])({ - name: '', - authType: '' -})); - -/* harmony default export */ var userStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return Object(nuclear["toImmutable"])(null); - }, - initialize: function initialize() { - this.on(RECEIVE_USER, receiveUser); - } -})); - -function receiveUser(state, json) { - return new userStore_UserRec(json); -} -// CONCATENATED MODULE: ./src/app/flux/user/userInviteStore.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var userInviteStore_Invite = new immutable["Record"]({ - invite_token: '', - user: '', - qr: '' -}); - -/* harmony default export */ var userInviteStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return Object(nuclear["toImmutable"])(null); - }, - initialize: function initialize() { - this.on(RECEIVE_INVITE, receiveInvite); - } -})); - -function receiveInvite(state, json) { - return new userInviteStore_Invite(json); -} -// CONCATENATED MODULE: ./src/app/flux/sites/siteStore.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -var Site = Object(immutable["Record"])({ - name: null, - status: false -}); - -/* harmony default export */ var siteStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return new immutable["List"](); - }, - initialize: function initialize() { - this.on(RECEIVE_CLUSTERS, receiveSites); - } -})); - -function receiveSites(state, json) { - return Object(nuclear["toImmutable"])(json).map(function (o) { - return new Site(o); - }); -} -// EXTERNAL MODULE: ./src/app/flux/sessions/actionTypes.js -var sessions_actionTypes = __webpack_require__("zMbK"); - -// CONCATENATED MODULE: ./src/app/flux/sessions/eventStore.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - -/* harmony default export */ var eventStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return Object(nuclear["toImmutable"])({}); - }, - initialize: function initialize() { - this.on(sessions_actionTypes["b" /* RECEIVE_SITE_EVENTS */], receive); - } -})); - -function receive(state, _ref) { - var json = _ref.json; - - var jsonEvents = json || []; - return state.withMutations(function (state) { - jsonEvents.forEach(function (item) { - var sid = item.sid, - event = item.event; - - - if (!state.has(sid)) { - state.set(sid, Object(nuclear["toImmutable"])({})); - } - - state.setIn([sid, event], Object(nuclear["toImmutable"])(item)); - }); - }); -} -// CONCATENATED MODULE: ./src/app/flux/sessions/archivedSessionStore.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var StoredSessionRec = Object(immutable["Record"])({ - id: undefined, - user: undefined, - created: undefined, - nodeIp: undefined, - last_active: undefined, - server_id: undefined, - siteId: undefined, - parties: Object(immutable["List"])() -}); - -/* harmony default export */ var archivedSessionStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return Object(nuclear["toImmutable"])({}); - }, - initialize: function initialize() { - this.on(sessions_actionTypes["b" /* RECEIVE_SITE_EVENTS */], archivedSessionStore_receive); - } -})); - -// uses events to build stored session objects -function archivedSessionStore_receive(state, _ref) { - var siteId = _ref.siteId, - json = _ref.json; - - var jsonEvents = json || []; - var tmp = {}; - return state.withMutations(function (state) { - jsonEvents.forEach(function (item) { - if (item.event !== EventTypeEnum.START && item.event !== EventTypeEnum.END) { - return; - } - - var sid = item.sid, - user = item.user, - time = item.time, - event = item.event, - server_id = item.server_id; - - - tmp[sid] = tmp[sid] || {}; - tmp[sid].id = sid; - tmp[sid].user = user; - tmp[sid].siteId = siteId; - - if (event === EventTypeEnum.START) { - tmp[sid].created = time; - tmp[sid].server_id = server_id; - tmp[sid].nodeIp = item['addr.local']; - tmp[sid].parties = [{ - user: user, - serverIp: item['addr.remote'] - }]; - } - - // update the store only with new items - if (event === EventTypeEnum.END && !state.has(sid)) { - tmp[sid].last_active = time; - state.set(sid, new StoredSessionRec(Object(nuclear["toImmutable"])(tmp[sid]))); - } - }); - }); -} -// CONCATENATED MODULE: ./src/app/flux/sessions/activeSessionStore.js -var activeSessionStore_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var ActiveSessionRec = Object(immutable["Record"])({ - id: undefined, - namespace: undefined, - login: undefined, - created: undefined, - last_active: undefined, - server_id: undefined, - siteId: undefined, - parties: Object(immutable["List"])() -}); - -var PartyRecord = Object(immutable["Record"])({ - user: undefined, - serverIp: undefined, - serverId: undefined -}); - -var activeSessionStore_defaultState = function defaultState() { - return Object(nuclear["toImmutable"])({}); -}; - -/* harmony default export */ var activeSessionStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - return activeSessionStore_defaultState(); - }, - initialize: function initialize() { - this.on(sessions_actionTypes["a" /* RECEIVE_ACTIVE_SESSIONS */], activeSessionStore_receive); - } -})); - -function activeSessionStore_receive(state, _ref) { - var siteId = _ref.siteId, - json = _ref.json; - - var jsonArray = json || []; - var newState = activeSessionStore_defaultState().withMutations(function (newState) { - return jsonArray.forEach(function (item) { - var rec = createSessionRec(siteId, item); - newState.set(rec.id, rec); - }); - }); - - return newState.equals(state) ? state : newState; -} - -function createSessionRec(siteId, json) { - var parties = activeSessionStore_createParties(json.parties); - var rec = new ActiveSessionRec(Object(nuclear["toImmutable"])(activeSessionStore_extends({}, json, { - siteId: siteId, - parties: parties - }))); - - return rec; -} - -function activeSessionStore_createParties(jsonArray) { - jsonArray = jsonArray || []; - var list = new immutable["List"](); - return list.withMutations(function (list) { - jsonArray.forEach(function (item) { - var party = new PartyRecord({ - user: item.user, - serverIp: item.remote_addr, - serverId: item.server_id - }); - - list.push(party); - }); - }); -} -// EXTERNAL MODULE: ./src/app/flux/storedSessionsFilter/actionTypes.js -var storedSessionsFilter_actionTypes = __webpack_require__("OcN7"); - -// CONCATENATED MODULE: ./src/app/flux/storedSessionsFilter/storedSessionFilterStore.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - -/* harmony default export */ var storedSessionFilterStore = (Object(nuclear["Store"])({ - getInitialState: function getInitialState() { - var end = moment_default()(new Date()).endOf('day').toDate(); - var start = moment_default()(end).subtract(3, 'day').startOf('day').toDate(); - var state = { - start: start, - end: end - }; - - return Object(nuclear["toImmutable"])(state); - }, - initialize: function initialize() { - this.on(storedSessionsFilter_actionTypes["a" /* TLPT_STORED_SESSINS_FILTER_SET_RANGE */], setRange); - } -})); - -function setRange(state, newState) { - return state.merge(newState); -} -// CONCATENATED MODULE: ./src/app/flux/index.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - - - - - - - -store_register(app_reactor["a" /* default */]); -misc_store_register(app_reactor["a" /* default */]); -fileTransfer_register(app_reactor["a" /* default */]); - -app_reactor["a" /* default */].registerStores({ - 'tlpt_settings': settings_store, - 'tlpt': appStore, - 'tlpt_terminal': terminal_store, - 'tlpt_nodes': nodeStore, - 'tlpt_user': userStore, - 'tlpt_user_invite': userInviteStore, - 'tlpt_user_acl': userAcl_store, - 'tlpt_sites': siteStore, - 'tlpt_status': statusStore["b" /* default */], - 'tlpt_sessions_events': eventStore, - 'tlpt_sessions_archived': archivedSessionStore, - 'tlpt_sessions_active': activeSessionStore, - 'tlpt_sessions_filter': storedSessionFilterStore -}); -// EXTERNAL MODULE: ./node_modules/bootstrap-sass/assets/javascripts/bootstrap.js -var bootstrap = __webpack_require__("VSY+"); - -// EXTERNAL MODULE: ./src/assets/js/datepicker.js -var datepicker = __webpack_require__("hQgP"); - -// CONCATENATED MODULE: ./src/app/vendor.js -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -// CONCATENATED MODULE: ./src/app/index.jsx -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - - - - - - - - - - - - - -config["a" /* default */].init(window.GRV_CONFIG); -services_history.init(); - -var featureRoutes = []; -var src_app_featureActivator = new app_featureActivator(); - -src_app_featureActivator.register(new featureSsh(featureRoutes)); -src_app_featureActivator.register(new featureAudit(featureRoutes)); -src_app_featureActivator.register(settings_createSettings(featureRoutes)); - -var app_onEnterApp = function onEnterApp(nextState) { - var siteId = nextState.params.siteId; - - initApp(siteId, src_app_featureActivator); -}; - -var app_routes = [{ - path: config["a" /* default */].routes.app, - onEnter: user_actions.ensureUser, - component: app, - childRoutes: [{ - onEnter: app_onEnterApp, - childRoutes: featureRoutes - }] -}]; - -var app_Root = function Root() { - return react_default.a.createElement( - build["Provider"], - { reactor: app_reactor["a" /* default */] }, - react_default.a.createElement(lib["Router"], { history: services_history.original(), routes: addRoutes(app_routes) }) - ); -}; - -/* harmony default export */ var src_app = (app_Root); -// CONCATENATED MODULE: ./src/boot.js -/* -Copyright 2018 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - - - - -var boot_render = function render(Component) { - react_dom_default.a.render(react_default.a.createElement( - react_hot_loader["AppContainer"], - null, - react_default.a.createElement(Component, null) - ), document.getElementById('app')); -}; - -boot_render(src_app); - -if (false) {} - -/***/ }), - -/***/ "tGXY": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return START; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SUCCESS; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return FAIL; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CLEAR; }); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var START = 'TLPT_STATUS_START'; -var SUCCESS = 'TLPT_STATUS_SUCCESS'; -var FAIL = 'TLPT_STATUS_FAIL'; -var CLEAR = 'TLPT_STATUS_CLEAR'; - -/***/ }), - -/***/ "xSHT": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var nuclear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("L7e8"); -/* harmony import */ var nuclear_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(nuclear_js__WEBPACK_IMPORTED_MODULE_0__); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - - - -var CSS = 'color: blue'; - -// reactor options -var options = { - debug: "production" === 'development' -}; - -var logger = { - dispatchStart: function dispatchStart(reactorState, actionType, payload) { - window.console.log('%creactor.dispatch("' + actionType + '", ', CSS, payload, ')'); - }, - - - dispatchError: function dispatchError(reactorState, error) { - window.console.debug('Dispatch error: ' + error); - }, - - dispatchEnd: function dispatchEnd(reactorState, state, dirtyStores) { - var stateChanges = state.filter(function (val, key) { - return dirtyStores.contains(key); - }); - window.console.log('%cupdated store -> ', CSS, stateChanges.toJS()); - } -}; - -if (options.debug) { - options.logger = logger; -} - -var reactor = new nuclear_js__WEBPACK_IMPORTED_MODULE_0__["Reactor"](options); -window.reactor = reactor; - -/* harmony default export */ __webpack_exports__["a"] = (reactor); - -/***/ }), - -/***/ "zMbK": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RECEIVE_ACTIVE_SESSIONS; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return RECEIVE_SITE_EVENTS; }); -/* -Copyright 2015 Gravitational, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -var RECEIVE_ACTIVE_SESSIONS = 'TLPT_SESSIONS_RECEIVE_ACTIVE'; -var RECEIVE_SITE_EVENTS = 'TLPT_SESSIONS_RECEIVE_EVENTS'; - -/***/ }) - -/******/ }); \ No newline at end of file diff --git a/web/dist/app/assets/fonts/fontawesome-webfont.eot b/web/dist/app/assets/fonts/fontawesome-webfont.eot deleted file mode 100644 index 9b6afaedc0f..00000000000 Binary files a/web/dist/app/assets/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/web/dist/app/assets/fonts/fontawesome-webfont.svg b/web/dist/app/assets/fonts/fontawesome-webfont.svg deleted file mode 100644 index d05688e9e28..00000000000 --- a/web/dist/app/assets/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/web/dist/app/assets/fonts/fontawesome-webfont.ttf b/web/dist/app/assets/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 26dea7951a7..00000000000 Binary files a/web/dist/app/assets/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/web/dist/app/assets/fonts/fontawesome-webfont.woff b/web/dist/app/assets/fonts/fontawesome-webfont.woff deleted file mode 100644 index dc35ce3c2cf..00000000000 Binary files a/web/dist/app/assets/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/web/dist/app/assets/fonts/fontawesome-webfont.woff2 b/web/dist/app/assets/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 500e5172534..00000000000 Binary files a/web/dist/app/assets/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/web/dist/app/assets/img/img-54ca7c.png b/web/dist/app/assets/img/img-54ca7c.png deleted file mode 100644 index 8a80b1edf99..00000000000 Binary files a/web/dist/app/assets/img/img-54ca7c.png and /dev/null differ diff --git a/web/dist/app/favicon.ico b/web/dist/app/favicon.ico deleted file mode 100644 index e2de620f0c0..00000000000 Binary files a/web/dist/app/favicon.ico and /dev/null differ diff --git a/web/dist/app/styles.f0d4056308cafd8d7d57.css b/web/dist/app/styles.f0d4056308cafd8d7d57.css deleted file mode 100644 index 74817f76d9e..00000000000 --- a/web/dist/app/styles.f0d4056308cafd8d7d57.css +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * animate.css -http://daneden.me/animate - * Version - 3.5.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2016 Daniel Eden - */.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.flipOutX,.animated.flipOutY,.animated.bounceIn,.animated.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{from,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -30px, 0);transform:translate3d(0, -30px, 0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -15px, 0);transform:translate3d(0, -15px, 0)}90%{-webkit-transform:translate3d(0, -4px, 0);transform:translate3d(0, -4px, 0)}}@keyframes bounce{from,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -30px, 0);transform:translate3d(0, -30px, 0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);-webkit-transform:translate3d(0, -15px, 0);transform:translate3d(0, -15px, 0)}90%{-webkit-transform:translate3d(0, -4px, 0);transform:translate3d(0, -4px, 0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{from,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{from,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.05, 1.05, 1.05);transform:scale3d(1.05, 1.05, 1.05)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes pulse{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}50%{-webkit-transform:scale3d(1.05, 1.05, 1.05);transform:scale3d(1.05, 1.05, 1.05)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}30%{-webkit-transform:scale3d(1.25, 0.75, 1);transform:scale3d(1.25, 0.75, 1)}40%{-webkit-transform:scale3d(0.75, 1.25, 1);transform:scale3d(0.75, 1.25, 1)}50%{-webkit-transform:scale3d(1.15, 0.85, 1);transform:scale3d(1.15, 0.85, 1)}65%{-webkit-transform:scale3d(0.95, 1.05, 1);transform:scale3d(0.95, 1.05, 1)}75%{-webkit-transform:scale3d(1.05, 0.95, 1);transform:scale3d(1.05, 0.95, 1)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes rubberBand{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}30%{-webkit-transform:scale3d(1.25, 0.75, 1);transform:scale3d(1.25, 0.75, 1)}40%{-webkit-transform:scale3d(0.75, 1.25, 1);transform:scale3d(0.75, 1.25, 1)}50%{-webkit-transform:scale3d(1.15, 0.85, 1);transform:scale3d(1.15, 0.85, 1)}65%{-webkit-transform:scale3d(0.95, 1.05, 1);transform:scale3d(0.95, 1.05, 1)}75%{-webkit-transform:scale3d(1.05, 0.95, 1);transform:scale3d(1.05, 0.95, 1)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px, 0, 0);transform:translate3d(-10px, 0, 0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px, 0, 0);transform:translate3d(10px, 0, 0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px, 0, 0);transform:translate3d(-10px, 0, 0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px, 0, 0);transform:translate3d(10px, 0, 0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0, 0, 1, 15deg);transform:rotate3d(0, 0, 1, 15deg)}40%{-webkit-transform:rotate3d(0, 0, 1, -10deg);transform:rotate3d(0, 0, 1, -10deg)}60%{-webkit-transform:rotate3d(0, 0, 1, 5deg);transform:rotate3d(0, 0, 1, 5deg)}80%{-webkit-transform:rotate3d(0, 0, 1, -5deg);transform:rotate3d(0, 0, 1, -5deg)}to{-webkit-transform:rotate3d(0, 0, 1, 0deg);transform:rotate3d(0, 0, 1, 0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0, 0, 1, 15deg);transform:rotate3d(0, 0, 1, 15deg)}40%{-webkit-transform:rotate3d(0, 0, 1, -10deg);transform:rotate3d(0, 0, 1, -10deg)}60%{-webkit-transform:rotate3d(0, 0, 1, 5deg);transform:rotate3d(0, 0, 1, 5deg)}80%{-webkit-transform:rotate3d(0, 0, 1, -5deg);transform:rotate3d(0, 0, 1, -5deg)}to{-webkit-transform:rotate3d(0, 0, 1, 0deg);transform:rotate3d(0, 0, 1, 0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}10%,20%{-webkit-transform:scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);transform:scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes tada{from{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}10%,20%{-webkit-transform:scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);transform:scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)}to{-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);transform:translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg)}30%{-webkit-transform:translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);transform:translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)}45%{-webkit-transform:translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);transform:translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)}60%{-webkit-transform:translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);transform:translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)}75%{-webkit-transform:translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);transform:translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)}to{-webkit-transform:none;transform:none}}@keyframes wobble{from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);transform:translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg)}30%{-webkit-transform:translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);transform:translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)}45%{-webkit-transform:translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);transform:translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)}60%{-webkit-transform:translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);transform:translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)}75%{-webkit-transform:translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);transform:translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)}to{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{from,11.1%,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-0.78125deg) skewY(-0.78125deg);transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-0.1953125deg) skewY(-0.1953125deg);transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}@keyframes jello{from,11.1%,to{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-0.78125deg) skewY(-0.78125deg);transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-0.1953125deg) skewY(-0.1953125deg);transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{from,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}20%{-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}40%{-webkit-transform:scale3d(0.9, 0.9, 0.9);transform:scale3d(0.9, 0.9, 0.9)}60%{opacity:1;-webkit-transform:scale3d(1.03, 1.03, 1.03);transform:scale3d(1.03, 1.03, 1.03)}80%{-webkit-transform:scale3d(0.97, 0.97, 0.97);transform:scale3d(0.97, 0.97, 0.97)}to{opacity:1;-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}@keyframes bounceIn{from,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}20%{-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}40%{-webkit-transform:scale3d(0.9, 0.9, 0.9);transform:scale3d(0.9, 0.9, 0.9)}60%{opacity:1;-webkit-transform:scale3d(1.03, 1.03, 1.03);transform:scale3d(1.03, 1.03, 1.03)}80%{-webkit-transform:scale3d(0.97, 0.97, 0.97);transform:scale3d(0.97, 0.97, 0.97)}to{opacity:1;-webkit-transform:scale3d(1, 1, 1);transform:scale3d(1, 1, 1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;-webkit-transform:translate3d(0, -3000px, 0);transform:translate3d(0, -3000px, 0)}60%{opacity:1;-webkit-transform:translate3d(0, 25px, 0);transform:translate3d(0, 25px, 0)}75%{-webkit-transform:translate3d(0, -10px, 0);transform:translate3d(0, -10px, 0)}90%{-webkit-transform:translate3d(0, 5px, 0);transform:translate3d(0, 5px, 0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInDown{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;-webkit-transform:translate3d(0, -3000px, 0);transform:translate3d(0, -3000px, 0)}60%{opacity:1;-webkit-transform:translate3d(0, 25px, 0);transform:translate3d(0, 25px, 0)}75%{-webkit-transform:translate3d(0, -10px, 0);transform:translate3d(0, -10px, 0)}90%{-webkit-transform:translate3d(0, 5px, 0);transform:translate3d(0, 5px, 0)}to{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;-webkit-transform:translate3d(-3000px, 0, 0);transform:translate3d(-3000px, 0, 0)}60%{opacity:1;-webkit-transform:translate3d(25px, 0, 0);transform:translate3d(25px, 0, 0)}75%{-webkit-transform:translate3d(-10px, 0, 0);transform:translate3d(-10px, 0, 0)}90%{-webkit-transform:translate3d(5px, 0, 0);transform:translate3d(5px, 0, 0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;-webkit-transform:translate3d(-3000px, 0, 0);transform:translate3d(-3000px, 0, 0)}60%{opacity:1;-webkit-transform:translate3d(25px, 0, 0);transform:translate3d(25px, 0, 0)}75%{-webkit-transform:translate3d(-10px, 0, 0);transform:translate3d(-10px, 0, 0)}90%{-webkit-transform:translate3d(5px, 0, 0);transform:translate3d(5px, 0, 0)}to{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}from{opacity:0;-webkit-transform:translate3d(3000px, 0, 0);transform:translate3d(3000px, 0, 0)}60%{opacity:1;-webkit-transform:translate3d(-25px, 0, 0);transform:translate3d(-25px, 0, 0)}75%{-webkit-transform:translate3d(10px, 0, 0);transform:translate3d(10px, 0, 0)}90%{-webkit-transform:translate3d(-5px, 0, 0);transform:translate3d(-5px, 0, 0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}from{opacity:0;-webkit-transform:translate3d(3000px, 0, 0);transform:translate3d(3000px, 0, 0)}60%{opacity:1;-webkit-transform:translate3d(-25px, 0, 0);transform:translate3d(-25px, 0, 0)}75%{-webkit-transform:translate3d(10px, 0, 0);transform:translate3d(10px, 0, 0)}90%{-webkit-transform:translate3d(-5px, 0, 0);transform:translate3d(-5px, 0, 0)}to{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}from{opacity:0;-webkit-transform:translate3d(0, 3000px, 0);transform:translate3d(0, 3000px, 0)}60%{opacity:1;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0)}75%{-webkit-transform:translate3d(0, 10px, 0);transform:translate3d(0, 10px, 0)}90%{-webkit-transform:translate3d(0, -5px, 0);transform:translate3d(0, -5px, 0)}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}@keyframes bounceInUp{from,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}from{opacity:0;-webkit-transform:translate3d(0, 3000px, 0);transform:translate3d(0, 3000px, 0)}60%{opacity:1;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0)}75%{-webkit-transform:translate3d(0, 10px, 0);transform:translate3d(0, 10px, 0)}90%{-webkit-transform:translate3d(0, -5px, 0);transform:translate3d(0, -5px, 0)}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(0.9, 0.9, 0.9);transform:scale3d(0.9, 0.9, 0.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}to{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(0.9, 0.9, 0.9);transform:scale3d(0.9, 0.9, 0.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1, 1.1, 1.1);transform:scale3d(1.1, 1.1, 1.1)}to{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0, 10px, 0);transform:translate3d(0, 10px, 0)}40%,45%{opacity:1;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0)}to{opacity:0;-webkit-transform:translate3d(0, 2000px, 0);transform:translate3d(0, 2000px, 0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0, 10px, 0);transform:translate3d(0, 10px, 0)}40%,45%{opacity:1;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0)}to{opacity:0;-webkit-transform:translate3d(0, 2000px, 0);transform:translate3d(0, 2000px, 0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px, 0, 0);transform:translate3d(20px, 0, 0)}to{opacity:0;-webkit-transform:translate3d(-2000px, 0, 0);transform:translate3d(-2000px, 0, 0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px, 0, 0);transform:translate3d(20px, 0, 0)}to{opacity:0;-webkit-transform:translate3d(-2000px, 0, 0);transform:translate3d(-2000px, 0, 0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px, 0, 0);transform:translate3d(-20px, 0, 0)}to{opacity:0;-webkit-transform:translate3d(2000px, 0, 0);transform:translate3d(2000px, 0, 0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px, 0, 0);transform:translate3d(-20px, 0, 0)}to{opacity:0;-webkit-transform:translate3d(2000px, 0, 0);transform:translate3d(2000px, 0, 0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0, -10px, 0);transform:translate3d(0, -10px, 0)}40%,45%{opacity:1;-webkit-transform:translate3d(0, 20px, 0);transform:translate3d(0, 20px, 0)}to{opacity:0;-webkit-transform:translate3d(0, -2000px, 0);transform:translate3d(0, -2000px, 0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0, -10px, 0);transform:translate3d(0, -10px, 0)}40%,45%{opacity:1;-webkit-transform:translate3d(0, 20px, 0);transform:translate3d(0, 20px, 0)}to{opacity:0;-webkit-transform:translate3d(0, -2000px, 0);transform:translate3d(0, -2000px, 0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0, -2000px, 0);transform:translate3d(0, -2000px, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0, -2000px, 0);transform:translate3d(0, -2000px, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px, 0, 0);transform:translate3d(-2000px, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px, 0, 0);transform:translate3d(-2000px, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px, 0, 0);transform:translate3d(2000px, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px, 0, 0);transform:translate3d(2000px, 0, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0, 2000px, 0);transform:translate3d(0, 2000px, 0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0, 2000px, 0);transform:translate3d(0, 2000px, 0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, 2000px, 0);transform:translate3d(0, 2000px, 0)}}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, 2000px, 0);transform:translate3d(0, 2000px, 0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px, 0, 0);transform:translate3d(-2000px, 0, 0)}}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px, 0, 0);transform:translate3d(-2000px, 0, 0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px, 0, 0);transform:translate3d(2000px, 0, 0)}}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px, 0, 0);transform:translate3d(2000px, 0, 0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, -2000px, 0);transform:translate3d(0, -2000px, 0)}}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(0, -2000px, 0);transform:translate3d(0, -2000px, 0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -360deg);transform:perspective(400px) rotate3d(0, 1, 0, -360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(0.95, 0.95, 0.95);transform:perspective(400px) scale3d(0.95, 0.95, 0.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -360deg);transform:perspective(400px) rotate3d(0, 1, 0, -360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(0.95, 0.95, 0.95);transform:perspective(400px) scale3d(0.95, 0.95, 0.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg);transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg);transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, 90deg);transform:perspective(400px) rotate3d(0, 1, 0, 90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -20deg);transform:perspective(400px) rotate3d(0, 1, 0, -20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, 10deg);transform:perspective(400px) rotate3d(0, 1, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -5deg);transform:perspective(400px) rotate3d(0, 1, 0, -5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, 90deg);transform:perspective(400px) rotate3d(0, 1, 0, 90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -20deg);transform:perspective(400px) rotate3d(0, 1, 0, -20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, 10deg);transform:perspective(400px) rotate3d(0, 1, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -5deg);transform:perspective(400px) rotate3d(0, 1, 0, -5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transform:perspective(400px) rotate3d(1, 0, 0, -20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transform:perspective(400px) rotate3d(1, 0, 0, 90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible !important;backface-visibility:visible !important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -15deg);transform:perspective(400px) rotate3d(0, 1, 0, -15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, 90deg);transform:perspective(400px) rotate3d(0, 1, 0, 90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, -15deg);transform:perspective(400px) rotate3d(0, 1, 0, -15deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(0, 1, 0, 90deg);transform:perspective(400px) rotate3d(0, 1, 0, 90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%, 0, 0) skewX(-30deg);transform:translate3d(100%, 0, 0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%, 0, 0) skewX(-30deg);transform:translate3d(100%, 0, 0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%, 0, 0) skewX(30deg);transform:translate3d(100%, 0, 0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}to{-webkit-transform:translate3d(100%, 0, 0) skewX(30deg);transform:translate3d(100%, 0, 0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0, 0, 1, -200deg);transform:rotate3d(0, 0, 1, -200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0, 0, 1, -200deg);transform:rotate3d(0, 0, 1, -200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, -90deg);transform:rotate3d(0, 0, 1, -90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, -90deg);transform:rotate3d(0, 0, 1, -90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0, 0, 1, 200deg);transform:rotate3d(0, 0, 1, 200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0, 0, 1, 200deg);transform:rotate3d(0, 0, 1, 200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, 90deg);transform:rotate3d(0, 0, 1, 90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0, 0, 1, 90deg);transform:rotate3d(0, 0, 1, 90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0, 0, 1, 80deg);transform:rotate3d(0, 0, 1, 80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0, 0, 1, 60deg);transform:rotate3d(0, 0, 1, 60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0, 700px, 0);transform:translate3d(0, 700px, 0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0, 0, 1, 80deg);transform:rotate3d(0, 0, 1, 80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0, 0, 1, 60deg);transform:rotate3d(0, 0, 1, 60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0, 700px, 0);transform:translate3d(0, 700px, 0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);transform:translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);transform:translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg)}to{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);transform:translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg)}}@keyframes rollOut{from{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);transform:translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}60%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(0.3, 0.3, 0.3);transform:scale3d(0.3, 0.3, 0.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}to{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}to{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0)}to{opacity:0;-webkit-transform:scale(0.1) translate3d(-2000px, 0, 0);transform:scale(0.1) translate3d(-2000px, 0, 0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0)}to{opacity:0;-webkit-transform:scale(0.1) translate3d(-2000px, 0, 0);transform:scale(0.1) translate3d(-2000px, 0, 0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0)}to{opacity:0;-webkit-transform:scale(0.1) translate3d(2000px, 0, 0);transform:scale(0.1) translate3d(2000px, 0, 0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0)}to{opacity:0;-webkit-transform:scale(0.1) translate3d(2000px, 0, 0);transform:scale(0.1) translate3d(2000px, 0, 0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}to{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);transform:scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);-webkit-animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);animation-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19)}to{opacity:0;-webkit-transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);transform:scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1);animation-timing-function:cubic-bezier(0.175, 0.885, 0.32, 1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);visibility:visible}to{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}to{visibility:hidden;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}/*! - * Datepicker for Bootstrap v1.6.0 (https://github.com/eternicode/bootstrap-datepicker) - * - * Copyright 2012 Stefan Petre - * Improvements by Andrew Rowls - * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - */.datepicker{border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0;padding:4px}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(0,0,0,0.15);border-top:0;border-bottom-color:rgba(0,0,0,0.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid rgba(0,0,0,0.15)}.datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #ffffff}.datepicker>div{display:none}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.old,.datepicker table tr td.new{color:#777777}.datepicker table tr td.day:hover,.datepicker table tr td.focused{background:#eeeeee;cursor:pointer}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:none;color:#777777;cursor:default}.datepicker table tr td.highlighted{color:#000000;background-color:#d9edf7;border-color:#85c5e5;border-radius:0}.datepicker table tr td.highlighted:focus,.datepicker table tr td.highlighted.focus{color:#000000;background-color:#afd9ee;border-color:#298fc2}.datepicker table tr td.highlighted:hover{color:#000000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted:active,.datepicker table tr td.highlighted.active{color:#000000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted:active:hover,.datepicker table tr td.highlighted.active:hover,.datepicker table tr td.highlighted:active:focus,.datepicker table tr td.highlighted.active:focus,.datepicker table tr td.highlighted:active.focus,.datepicker table tr td.highlighted.active.focus{color:#000000;background-color:#91cbe8;border-color:#298fc2}.datepicker table tr td.highlighted.disabled:hover,.datepicker table tr td.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.highlighted:hover,.datepicker table tr td.highlighted.disabled:focus,.datepicker table tr td.highlighted[disabled]:focus,fieldset[disabled] .datepicker table tr td.highlighted:focus,.datepicker table tr td.highlighted.disabled.focus,.datepicker table tr td.highlighted[disabled].focus,fieldset[disabled] .datepicker table tr td.highlighted.focus{background-color:#d9edf7;border-color:#85c5e5}.datepicker table tr td.highlighted.focused{background:#afd9ee}.datepicker table tr td.highlighted.disabled,.datepicker table tr td.highlighted.disabled:active{background:#d9edf7;color:#777777}.datepicker table tr td.today{color:#000000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today:focus,.datepicker table tr td.today.focus{color:#000000;background-color:#ffc966;border-color:#b37400}.datepicker table tr td.today:hover{color:#000000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today:active,.datepicker table tr td.today.active{color:#000000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today:active:hover,.datepicker table tr td.today.active:hover,.datepicker table tr td.today:active:focus,.datepicker table tr td.today.active:focus,.datepicker table tr td.today:active.focus,.datepicker table tr td.today.active.focus{color:#000000;background-color:#ffbc42;border-color:#b37400}.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today:hover,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today[disabled]:focus,fieldset[disabled] .datepicker table tr td.today:focus,.datepicker table tr td.today.disabled.focus,.datepicker table tr td.today[disabled].focus,fieldset[disabled] .datepicker table tr td.today.focus{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.focused{background:#ffc966}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:active{background:#ffdb99;color:#777777}.datepicker table tr td.range{color:#000000;background-color:#eeeeee;border-color:#bbbbbb;border-radius:0}.datepicker table tr td.range:focus,.datepicker table tr td.range.focus{color:#000000;background-color:#d5d5d5;border-color:#7c7c7c}.datepicker table tr td.range:hover{color:#000000;background-color:#d5d5d5;border-color:#9d9d9d}.datepicker table tr td.range:active,.datepicker table tr td.range.active{color:#000000;background-color:#d5d5d5;border-color:#9d9d9d}.datepicker table tr td.range:active:hover,.datepicker table tr td.range.active:hover,.datepicker table tr td.range:active:focus,.datepicker table tr td.range.active:focus,.datepicker table tr td.range:active.focus,.datepicker table tr td.range.active.focus{color:#000000;background-color:#c3c3c3;border-color:#7c7c7c}.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range[disabled]:hover,fieldset[disabled] .datepicker table tr td.range:hover,.datepicker table tr td.range.disabled:focus,.datepicker table tr td.range[disabled]:focus,fieldset[disabled] .datepicker table tr td.range:focus,.datepicker table tr td.range.disabled.focus,.datepicker table tr td.range[disabled].focus,fieldset[disabled] .datepicker table tr td.range.focus{background-color:#eeeeee;border-color:#bbbbbb}.datepicker table tr td.range.focused{background:#d5d5d5}.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:active{background:#eeeeee;color:#777777}.datepicker table tr td.range.highlighted{color:#000000;background-color:#e4eef3;border-color:#9dc1d3}.datepicker table tr td.range.highlighted:focus,.datepicker table tr td.range.highlighted.focus{color:#000000;background-color:#c1d7e3;border-color:#4b88a6}.datepicker table tr td.range.highlighted:hover{color:#000000;background-color:#c1d7e3;border-color:#73a6c0}.datepicker table tr td.range.highlighted:active,.datepicker table tr td.range.highlighted.active{color:#000000;background-color:#c1d7e3;border-color:#73a6c0}.datepicker table tr td.range.highlighted:active:hover,.datepicker table tr td.range.highlighted.active:hover,.datepicker table tr td.range.highlighted:active:focus,.datepicker table tr td.range.highlighted.active:focus,.datepicker table tr td.range.highlighted:active.focus,.datepicker table tr td.range.highlighted.active.focus{color:#000000;background-color:#a8c8d8;border-color:#4b88a6}.datepicker table tr td.range.highlighted.disabled:hover,.datepicker table tr td.range.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.highlighted:hover,.datepicker table tr td.range.highlighted.disabled:focus,.datepicker table tr td.range.highlighted[disabled]:focus,fieldset[disabled] .datepicker table tr td.range.highlighted:focus,.datepicker table tr td.range.highlighted.disabled.focus,.datepicker table tr td.range.highlighted[disabled].focus,fieldset[disabled] .datepicker table tr td.range.highlighted.focus{background-color:#e4eef3;border-color:#9dc1d3}.datepicker table tr td.range.highlighted.focused{background:#c1d7e3}.datepicker table tr td.range.highlighted.disabled,.datepicker table tr td.range.highlighted.disabled:active{background:#e4eef3;color:#777777}.datepicker table tr td.range.today{color:#000000;background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.range.today:focus,.datepicker table tr td.range.today.focus{color:#000000;background-color:#f4b747;border-color:#815608}.datepicker table tr td.range.today:hover{color:#000000;background-color:#f4b747;border-color:#bf800c}.datepicker table tr td.range.today:active,.datepicker table tr td.range.today.active{color:#000000;background-color:#f4b747;border-color:#bf800c}.datepicker table tr td.range.today:active:hover,.datepicker table tr td.range.today.active:hover,.datepicker table tr td.range.today:active:focus,.datepicker table tr td.range.today.active:focus,.datepicker table tr td.range.today:active.focus,.datepicker table tr td.range.today.active.focus{color:#000000;background-color:#f2aa25;border-color:#815608}.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today:hover,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today[disabled]:focus,fieldset[disabled] .datepicker table tr td.range.today:focus,.datepicker table tr td.range.today.disabled.focus,.datepicker table tr td.range.today[disabled].focus,fieldset[disabled] .datepicker table tr td.range.today.focus{background-color:#f7ca77;border-color:#f1a417}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:active{background:#f7ca77;color:#777777}.datepicker table tr td.selected,.datepicker table tr td.selected.highlighted{color:#ffffff;background-color:#777777;border-color:#555555;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td.selected:focus,.datepicker table tr td.selected.highlighted:focus,.datepicker table tr td.selected.focus,.datepicker table tr td.selected.highlighted.focus{color:#ffffff;background-color:#5e5e5e;border-color:#161616}.datepicker table tr td.selected:hover,.datepicker table tr td.selected.highlighted:hover{color:#ffffff;background-color:#5e5e5e;border-color:#373737}.datepicker table tr td.selected:active,.datepicker table tr td.selected.highlighted:active,.datepicker table tr td.selected.active,.datepicker table tr td.selected.highlighted.active{color:#ffffff;background-color:#5e5e5e;border-color:#373737}.datepicker table tr td.selected:active:hover,.datepicker table tr td.selected.highlighted:active:hover,.datepicker table tr td.selected.active:hover,.datepicker table tr td.selected.highlighted.active:hover,.datepicker table tr td.selected:active:focus,.datepicker table tr td.selected.highlighted:active:focus,.datepicker table tr td.selected.active:focus,.datepicker table tr td.selected.highlighted.active:focus,.datepicker table tr td.selected:active.focus,.datepicker table tr td.selected.highlighted:active.focus,.datepicker table tr td.selected.active.focus,.datepicker table tr td.selected.highlighted.active.focus{color:#ffffff;background-color:#4c4c4c;border-color:#161616}.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.highlighted.disabled:hover,.datepicker table tr td.selected[disabled]:hover,.datepicker table tr td.selected.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected:hover,fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.highlighted.disabled:focus,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected.highlighted[disabled]:focus,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,.datepicker table tr td.selected.disabled.focus,.datepicker table tr td.selected.highlighted.disabled.focus,.datepicker table tr td.selected[disabled].focus,.datepicker table tr td.selected.highlighted[disabled].focus,fieldset[disabled] .datepicker table tr td.selected.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted.focus{background-color:#777777;border-color:#555555}.datepicker table tr td.active,.datepicker table tr td.active.highlighted{color:#ffffff;background-color:#337ab7;border-color:#2e6da4;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td.active:focus,.datepicker table tr td.active.highlighted:focus,.datepicker table tr td.active.focus,.datepicker table tr td.active.highlighted.focus{color:#ffffff;background-color:#286090;border-color:#122b40}.datepicker table tr td.active:hover,.datepicker table tr td.active.highlighted:hover{color:#ffffff;background-color:#286090;border-color:#204d74}.datepicker table tr td.active:active,.datepicker table tr td.active.highlighted:active,.datepicker table tr td.active.active,.datepicker table tr td.active.highlighted.active{color:#ffffff;background-color:#286090;border-color:#204d74}.datepicker table tr td.active:active:hover,.datepicker table tr td.active.highlighted:active:hover,.datepicker table tr td.active.active:hover,.datepicker table tr td.active.highlighted.active:hover,.datepicker table tr td.active:active:focus,.datepicker table tr td.active.highlighted:active:focus,.datepicker table tr td.active.active:focus,.datepicker table tr td.active.highlighted.active:focus,.datepicker table tr td.active:active.focus,.datepicker table tr td.active.highlighted:active.focus,.datepicker table tr td.active.active.focus,.datepicker table tr td.active.highlighted.active.focus{color:#ffffff;background-color:#204d74;border-color:#122b40}.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.highlighted.disabled:hover,.datepicker table tr td.active[disabled]:hover,.datepicker table tr td.active.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.active:hover,fieldset[disabled] .datepicker table tr td.active.highlighted:hover,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.highlighted.disabled:focus,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active.highlighted[disabled]:focus,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active.highlighted:focus,.datepicker table tr td.active.disabled.focus,.datepicker table tr td.active.highlighted.disabled.focus,.datepicker table tr td.active[disabled].focus,.datepicker table tr td.active.highlighted[disabled].focus,fieldset[disabled] .datepicker table tr td.active.focus,fieldset[disabled] .datepicker table tr td.active.highlighted.focus{background-color:#337ab7;border-color:#2e6da4}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span:hover,.datepicker table tr td span.focused{background:#eeeeee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:none;color:#777777;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover{color:#ffffff;background-color:#337ab7;border-color:#2e6da4;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover:focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.focus,.datepicker table tr td span.active:hover.focus,.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:hover.focus{color:#ffffff;background-color:#286090;border-color:#122b40}.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover:hover{color:#ffffff;background-color:#286090;border-color:#204d74}.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:hover.active{color:#ffffff;background-color:#286090;border-color:#204d74}.datepicker table tr td span.active:active:hover,.datepicker table tr td span.active:hover:active:hover,.datepicker table tr td span.active.disabled:active:hover,.datepicker table tr td span.active.disabled:hover:active:hover,.datepicker table tr td span.active.active:hover,.datepicker table tr td span.active:hover.active:hover,.datepicker table tr td span.active.disabled.active:hover,.datepicker table tr td span.active.disabled:hover.active:hover,.datepicker table tr td span.active:active:focus,.datepicker table tr td span.active:hover:active:focus,.datepicker table tr td span.active.disabled:active:focus,.datepicker table tr td span.active.disabled:hover:active:focus,.datepicker table tr td span.active.active:focus,.datepicker table tr td span.active:hover.active:focus,.datepicker table tr td span.active.disabled.active:focus,.datepicker table tr td span.active.disabled:hover.active:focus,.datepicker table tr td span.active:active.focus,.datepicker table tr td span.active:hover:active.focus,.datepicker table tr td span.active.disabled:active.focus,.datepicker table tr td span.active.disabled:hover:active.focus,.datepicker table tr td span.active.active.focus,.datepicker table tr td span.active:hover.active.focus,.datepicker table tr td span.active.disabled.active.focus,.datepicker table tr td span.active.disabled:hover.active.focus{color:#ffffff;background-color:#204d74;border-color:#122b40}.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active[disabled]:hover,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active.disabled:hover[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:focus,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active:hover.disabled.focus,.datepicker table tr td span.active.disabled.disabled.focus,.datepicker table tr td span.active.disabled:hover.disabled.focus,.datepicker table tr td span.active[disabled].focus,.datepicker table tr td span.active:hover[disabled].focus,.datepicker table tr td span.active.disabled[disabled].focus,.datepicker table tr td span.active.disabled:hover[disabled].focus,fieldset[disabled] .datepicker table tr td span.active.focus,fieldset[disabled] .datepicker table tr td span.active:hover.focus,fieldset[disabled] .datepicker table tr td span.active.disabled.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus{background-color:#337ab7;border-color:#2e6da4}.datepicker table tr td span.old,.datepicker table tr td span.new{color:#777777}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .prev,.datepicker .next,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .prev:hover,.datepicker .next:hover,.datepicker tfoot tr th:hover{background:#eeeeee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;line-height:1.42857143;text-shadow:0 1px 0 #fff;border-width:1px 0;margin-left:-5px;margin-right:-5px}.ps-container{-ms-touch-action:auto;touch-action:auto;overflow:hidden !important;-ms-overflow-style:none}@supports (-ms-overflow-style: none){.ps-container{overflow:auto !important}}@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){.ps-container{overflow:auto !important}}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block;background-color:transparent}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:0.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999;height:11px}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:0.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999;width:11px}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;opacity:0;-webkit-transition:background-color .2s linear, opacity .2s linear;-o-transition:background-color .2s linear, opacity .2s linear;-moz-transition:background-color .2s linear, opacity .2s linear;transition:background-color .2s linear, opacity .2s linear;bottom:0px;height:15px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;-o-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;-moz-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;bottom:2px;height:6px}.ps-container>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x,.ps-container>.ps-scrollbar-x-rail:active>.ps-scrollbar-x{height:11px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;opacity:0;-webkit-transition:background-color .2s linear, opacity .2s linear;-o-transition:background-color .2s linear, opacity .2s linear;-moz-transition:background-color .2s linear, opacity .2s linear;transition:background-color .2s linear, opacity .2s linear;right:0;width:15px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out;-o-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;-moz-transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out;transition:background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out;right:2px;width:6px}.ps-container>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y,.ps-container>.ps-scrollbar-y-rail:active>.ps-scrollbar-y{width:11px}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:0.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999;height:11px}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:0.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999;width:11px}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:0.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:0.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:0.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}.terminal{background-color:#000;color:#fff;font-family:courier-new, courier, monospace;font-feature-settings:"liga" 0;position:relative}.terminal.focus,.terminal:focus{outline:none}.terminal .xterm-helpers{position:absolute;top:0}.terminal .xterm-helper-textarea{position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-10;white-space:nowrap;overflow:hidden;resize:none}.terminal a{color:inherit;text-decoration:none}.terminal a:hover{cursor:pointer;text-decoration:underline}.terminal a.xterm-invalid-link:hover{cursor:text;text-decoration:none}.terminal:not(.xterm-cursor-style-underline):not(.xterm-cursor-style-bar) .terminal-cursor{background-color:#fff;color:#000}.terminal:not(.focus) .terminal-cursor{outline:1px solid #fff;outline-offset:-1px;background-color:transparent}.terminal:not(.xterm-cursor-style-underline):not(.xterm-cursor-style-bar).focus.xterm-cursor-blink .terminal-cursor{animation:xterm-cursor-blink 1.2s infinite step-end}@keyframes xterm-cursor-blink{0%{}50%{background-color:transparent;color:inherit}}.terminal.xterm-cursor-style-bar .terminal-cursor,.terminal.xterm-cursor-style-underline .terminal-cursor{position:relative}.terminal.xterm-cursor-style-bar .terminal-cursor::before,.terminal.xterm-cursor-style-underline .terminal-cursor::before{content:"";display:block;position:absolute;background-color:#fff}.terminal.xterm-cursor-style-bar .terminal-cursor::before{top:0;bottom:0;left:0;width:1px}.terminal.xterm-cursor-style-underline .terminal-cursor::before{bottom:0;left:0;right:0;height:1px}.terminal.xterm-cursor-style-bar.focus.xterm-cursor-blink .terminal-cursor::before,.terminal.xterm-cursor-style-underline.focus.xterm-cursor-blink .terminal-cursor::before{animation:xterm-cursor-non-bar-blink 1.2s infinite step-end}@keyframes xterm-cursor-non-bar-blink{0%{background-color:#fff}50%{background-color:transparent}}.terminal .composition-view{background:#000;color:#FFF;display:none;position:absolute;white-space:nowrap;z-index:1}.terminal .composition-view.active{display:block}.terminal .xterm-viewport{background-color:#000;overflow-y:scroll}.terminal .xterm-wide-char{display:inline-block}.terminal .xterm-rows{position:absolute;left:0;top:0}.terminal .xterm-rows>div{white-space:nowrap}.terminal .xterm-scroll-area{visibility:hidden}.terminal .xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;left:-9999em}.terminal .xterm-bold{font-weight:bold}.terminal .xterm-underline{text-decoration:underline}.terminal .xterm-blink{text-decoration:blink}.terminal .xterm-hidden{visibility:hidden}.terminal .xterm-color-0{color:#2e3436}.terminal .xterm-bg-color-0{background-color:#2e3436}.terminal .xterm-color-1{color:#cc0000}.terminal .xterm-bg-color-1{background-color:#cc0000}.terminal .xterm-color-2{color:#4e9a06}.terminal .xterm-bg-color-2{background-color:#4e9a06}.terminal .xterm-color-3{color:#c4a000}.terminal .xterm-bg-color-3{background-color:#c4a000}.terminal .xterm-color-4{color:#3465a4}.terminal .xterm-bg-color-4{background-color:#3465a4}.terminal .xterm-color-5{color:#75507b}.terminal .xterm-bg-color-5{background-color:#75507b}.terminal .xterm-color-6{color:#06989a}.terminal .xterm-bg-color-6{background-color:#06989a}.terminal .xterm-color-7{color:#d3d7cf}.terminal .xterm-bg-color-7{background-color:#d3d7cf}.terminal .xterm-color-8{color:#555753}.terminal .xterm-bg-color-8{background-color:#555753}.terminal .xterm-color-9{color:#ef2929}.terminal .xterm-bg-color-9{background-color:#ef2929}.terminal .xterm-color-10{color:#8ae234}.terminal .xterm-bg-color-10{background-color:#8ae234}.terminal .xterm-color-11{color:#fce94f}.terminal .xterm-bg-color-11{background-color:#fce94f}.terminal .xterm-color-12{color:#729fcf}.terminal .xterm-bg-color-12{background-color:#729fcf}.terminal .xterm-color-13{color:#ad7fa8}.terminal .xterm-bg-color-13{background-color:#ad7fa8}.terminal .xterm-color-14{color:#34e2e2}.terminal .xterm-bg-color-14{background-color:#34e2e2}.terminal .xterm-color-15{color:#eeeeec}.terminal .xterm-bg-color-15{background-color:#eeeeec}.terminal .xterm-color-16{color:#000000}.terminal .xterm-bg-color-16{background-color:#000000}.terminal .xterm-color-17{color:#00005f}.terminal .xterm-bg-color-17{background-color:#00005f}.terminal .xterm-color-18{color:#000087}.terminal .xterm-bg-color-18{background-color:#000087}.terminal .xterm-color-19{color:#0000af}.terminal .xterm-bg-color-19{background-color:#0000af}.terminal .xterm-color-20{color:#0000d7}.terminal .xterm-bg-color-20{background-color:#0000d7}.terminal .xterm-color-21{color:#0000ff}.terminal .xterm-bg-color-21{background-color:#0000ff}.terminal .xterm-color-22{color:#005f00}.terminal .xterm-bg-color-22{background-color:#005f00}.terminal .xterm-color-23{color:#005f5f}.terminal .xterm-bg-color-23{background-color:#005f5f}.terminal .xterm-color-24{color:#005f87}.terminal .xterm-bg-color-24{background-color:#005f87}.terminal .xterm-color-25{color:#005faf}.terminal .xterm-bg-color-25{background-color:#005faf}.terminal .xterm-color-26{color:#005fd7}.terminal .xterm-bg-color-26{background-color:#005fd7}.terminal .xterm-color-27{color:#005fff}.terminal .xterm-bg-color-27{background-color:#005fff}.terminal .xterm-color-28{color:#008700}.terminal .xterm-bg-color-28{background-color:#008700}.terminal .xterm-color-29{color:#00875f}.terminal .xterm-bg-color-29{background-color:#00875f}.terminal .xterm-color-30{color:#008787}.terminal .xterm-bg-color-30{background-color:#008787}.terminal .xterm-color-31{color:#0087af}.terminal .xterm-bg-color-31{background-color:#0087af}.terminal .xterm-color-32{color:#0087d7}.terminal .xterm-bg-color-32{background-color:#0087d7}.terminal .xterm-color-33{color:#0087ff}.terminal .xterm-bg-color-33{background-color:#0087ff}.terminal .xterm-color-34{color:#00af00}.terminal .xterm-bg-color-34{background-color:#00af00}.terminal .xterm-color-35{color:#00af5f}.terminal .xterm-bg-color-35{background-color:#00af5f}.terminal .xterm-color-36{color:#00af87}.terminal .xterm-bg-color-36{background-color:#00af87}.terminal .xterm-color-37{color:#00afaf}.terminal .xterm-bg-color-37{background-color:#00afaf}.terminal .xterm-color-38{color:#00afd7}.terminal .xterm-bg-color-38{background-color:#00afd7}.terminal .xterm-color-39{color:#00afff}.terminal .xterm-bg-color-39{background-color:#00afff}.terminal .xterm-color-40{color:#00d700}.terminal .xterm-bg-color-40{background-color:#00d700}.terminal .xterm-color-41{color:#00d75f}.terminal .xterm-bg-color-41{background-color:#00d75f}.terminal .xterm-color-42{color:#00d787}.terminal .xterm-bg-color-42{background-color:#00d787}.terminal .xterm-color-43{color:#00d7af}.terminal .xterm-bg-color-43{background-color:#00d7af}.terminal .xterm-color-44{color:#00d7d7}.terminal .xterm-bg-color-44{background-color:#00d7d7}.terminal .xterm-color-45{color:#00d7ff}.terminal .xterm-bg-color-45{background-color:#00d7ff}.terminal .xterm-color-46{color:#00ff00}.terminal .xterm-bg-color-46{background-color:#00ff00}.terminal .xterm-color-47{color:#00ff5f}.terminal .xterm-bg-color-47{background-color:#00ff5f}.terminal .xterm-color-48{color:#00ff87}.terminal .xterm-bg-color-48{background-color:#00ff87}.terminal .xterm-color-49{color:#00ffaf}.terminal .xterm-bg-color-49{background-color:#00ffaf}.terminal .xterm-color-50{color:#00ffd7}.terminal .xterm-bg-color-50{background-color:#00ffd7}.terminal .xterm-color-51{color:#00ffff}.terminal .xterm-bg-color-51{background-color:#00ffff}.terminal .xterm-color-52{color:#5f0000}.terminal .xterm-bg-color-52{background-color:#5f0000}.terminal .xterm-color-53{color:#5f005f}.terminal .xterm-bg-color-53{background-color:#5f005f}.terminal .xterm-color-54{color:#5f0087}.terminal .xterm-bg-color-54{background-color:#5f0087}.terminal .xterm-color-55{color:#5f00af}.terminal .xterm-bg-color-55{background-color:#5f00af}.terminal .xterm-color-56{color:#5f00d7}.terminal .xterm-bg-color-56{background-color:#5f00d7}.terminal .xterm-color-57{color:#5f00ff}.terminal .xterm-bg-color-57{background-color:#5f00ff}.terminal .xterm-color-58{color:#5f5f00}.terminal .xterm-bg-color-58{background-color:#5f5f00}.terminal .xterm-color-59{color:#5f5f5f}.terminal .xterm-bg-color-59{background-color:#5f5f5f}.terminal .xterm-color-60{color:#5f5f87}.terminal .xterm-bg-color-60{background-color:#5f5f87}.terminal .xterm-color-61{color:#5f5faf}.terminal .xterm-bg-color-61{background-color:#5f5faf}.terminal .xterm-color-62{color:#5f5fd7}.terminal .xterm-bg-color-62{background-color:#5f5fd7}.terminal .xterm-color-63{color:#5f5fff}.terminal .xterm-bg-color-63{background-color:#5f5fff}.terminal .xterm-color-64{color:#5f8700}.terminal .xterm-bg-color-64{background-color:#5f8700}.terminal .xterm-color-65{color:#5f875f}.terminal .xterm-bg-color-65{background-color:#5f875f}.terminal .xterm-color-66{color:#5f8787}.terminal .xterm-bg-color-66{background-color:#5f8787}.terminal .xterm-color-67{color:#5f87af}.terminal .xterm-bg-color-67{background-color:#5f87af}.terminal .xterm-color-68{color:#5f87d7}.terminal .xterm-bg-color-68{background-color:#5f87d7}.terminal .xterm-color-69{color:#5f87ff}.terminal .xterm-bg-color-69{background-color:#5f87ff}.terminal .xterm-color-70{color:#5faf00}.terminal .xterm-bg-color-70{background-color:#5faf00}.terminal .xterm-color-71{color:#5faf5f}.terminal .xterm-bg-color-71{background-color:#5faf5f}.terminal .xterm-color-72{color:#5faf87}.terminal .xterm-bg-color-72{background-color:#5faf87}.terminal .xterm-color-73{color:#5fafaf}.terminal .xterm-bg-color-73{background-color:#5fafaf}.terminal .xterm-color-74{color:#5fafd7}.terminal .xterm-bg-color-74{background-color:#5fafd7}.terminal .xterm-color-75{color:#5fafff}.terminal .xterm-bg-color-75{background-color:#5fafff}.terminal .xterm-color-76{color:#5fd700}.terminal .xterm-bg-color-76{background-color:#5fd700}.terminal .xterm-color-77{color:#5fd75f}.terminal .xterm-bg-color-77{background-color:#5fd75f}.terminal .xterm-color-78{color:#5fd787}.terminal .xterm-bg-color-78{background-color:#5fd787}.terminal .xterm-color-79{color:#5fd7af}.terminal .xterm-bg-color-79{background-color:#5fd7af}.terminal .xterm-color-80{color:#5fd7d7}.terminal .xterm-bg-color-80{background-color:#5fd7d7}.terminal .xterm-color-81{color:#5fd7ff}.terminal .xterm-bg-color-81{background-color:#5fd7ff}.terminal .xterm-color-82{color:#5fff00}.terminal .xterm-bg-color-82{background-color:#5fff00}.terminal .xterm-color-83{color:#5fff5f}.terminal .xterm-bg-color-83{background-color:#5fff5f}.terminal .xterm-color-84{color:#5fff87}.terminal .xterm-bg-color-84{background-color:#5fff87}.terminal .xterm-color-85{color:#5fffaf}.terminal .xterm-bg-color-85{background-color:#5fffaf}.terminal .xterm-color-86{color:#5fffd7}.terminal .xterm-bg-color-86{background-color:#5fffd7}.terminal .xterm-color-87{color:#5fffff}.terminal .xterm-bg-color-87{background-color:#5fffff}.terminal .xterm-color-88{color:#870000}.terminal .xterm-bg-color-88{background-color:#870000}.terminal .xterm-color-89{color:#87005f}.terminal .xterm-bg-color-89{background-color:#87005f}.terminal .xterm-color-90{color:#870087}.terminal .xterm-bg-color-90{background-color:#870087}.terminal .xterm-color-91{color:#8700af}.terminal .xterm-bg-color-91{background-color:#8700af}.terminal .xterm-color-92{color:#8700d7}.terminal .xterm-bg-color-92{background-color:#8700d7}.terminal .xterm-color-93{color:#8700ff}.terminal .xterm-bg-color-93{background-color:#8700ff}.terminal .xterm-color-94{color:#875f00}.terminal .xterm-bg-color-94{background-color:#875f00}.terminal .xterm-color-95{color:#875f5f}.terminal .xterm-bg-color-95{background-color:#875f5f}.terminal .xterm-color-96{color:#875f87}.terminal .xterm-bg-color-96{background-color:#875f87}.terminal .xterm-color-97{color:#875faf}.terminal .xterm-bg-color-97{background-color:#875faf}.terminal .xterm-color-98{color:#875fd7}.terminal .xterm-bg-color-98{background-color:#875fd7}.terminal .xterm-color-99{color:#875fff}.terminal .xterm-bg-color-99{background-color:#875fff}.terminal .xterm-color-100{color:#878700}.terminal .xterm-bg-color-100{background-color:#878700}.terminal .xterm-color-101{color:#87875f}.terminal .xterm-bg-color-101{background-color:#87875f}.terminal .xterm-color-102{color:#878787}.terminal .xterm-bg-color-102{background-color:#878787}.terminal .xterm-color-103{color:#8787af}.terminal .xterm-bg-color-103{background-color:#8787af}.terminal .xterm-color-104{color:#8787d7}.terminal .xterm-bg-color-104{background-color:#8787d7}.terminal .xterm-color-105{color:#8787ff}.terminal .xterm-bg-color-105{background-color:#8787ff}.terminal .xterm-color-106{color:#87af00}.terminal .xterm-bg-color-106{background-color:#87af00}.terminal .xterm-color-107{color:#87af5f}.terminal .xterm-bg-color-107{background-color:#87af5f}.terminal .xterm-color-108{color:#87af87}.terminal .xterm-bg-color-108{background-color:#87af87}.terminal .xterm-color-109{color:#87afaf}.terminal .xterm-bg-color-109{background-color:#87afaf}.terminal .xterm-color-110{color:#87afd7}.terminal .xterm-bg-color-110{background-color:#87afd7}.terminal .xterm-color-111{color:#87afff}.terminal .xterm-bg-color-111{background-color:#87afff}.terminal .xterm-color-112{color:#87d700}.terminal .xterm-bg-color-112{background-color:#87d700}.terminal .xterm-color-113{color:#87d75f}.terminal .xterm-bg-color-113{background-color:#87d75f}.terminal .xterm-color-114{color:#87d787}.terminal .xterm-bg-color-114{background-color:#87d787}.terminal .xterm-color-115{color:#87d7af}.terminal .xterm-bg-color-115{background-color:#87d7af}.terminal .xterm-color-116{color:#87d7d7}.terminal .xterm-bg-color-116{background-color:#87d7d7}.terminal .xterm-color-117{color:#87d7ff}.terminal .xterm-bg-color-117{background-color:#87d7ff}.terminal .xterm-color-118{color:#87ff00}.terminal .xterm-bg-color-118{background-color:#87ff00}.terminal .xterm-color-119{color:#87ff5f}.terminal .xterm-bg-color-119{background-color:#87ff5f}.terminal .xterm-color-120{color:#87ff87}.terminal .xterm-bg-color-120{background-color:#87ff87}.terminal .xterm-color-121{color:#87ffaf}.terminal .xterm-bg-color-121{background-color:#87ffaf}.terminal .xterm-color-122{color:#87ffd7}.terminal .xterm-bg-color-122{background-color:#87ffd7}.terminal .xterm-color-123{color:#87ffff}.terminal .xterm-bg-color-123{background-color:#87ffff}.terminal .xterm-color-124{color:#af0000}.terminal .xterm-bg-color-124{background-color:#af0000}.terminal .xterm-color-125{color:#af005f}.terminal .xterm-bg-color-125{background-color:#af005f}.terminal .xterm-color-126{color:#af0087}.terminal .xterm-bg-color-126{background-color:#af0087}.terminal .xterm-color-127{color:#af00af}.terminal .xterm-bg-color-127{background-color:#af00af}.terminal .xterm-color-128{color:#af00d7}.terminal .xterm-bg-color-128{background-color:#af00d7}.terminal .xterm-color-129{color:#af00ff}.terminal .xterm-bg-color-129{background-color:#af00ff}.terminal .xterm-color-130{color:#af5f00}.terminal .xterm-bg-color-130{background-color:#af5f00}.terminal .xterm-color-131{color:#af5f5f}.terminal .xterm-bg-color-131{background-color:#af5f5f}.terminal .xterm-color-132{color:#af5f87}.terminal .xterm-bg-color-132{background-color:#af5f87}.terminal .xterm-color-133{color:#af5faf}.terminal .xterm-bg-color-133{background-color:#af5faf}.terminal .xterm-color-134{color:#af5fd7}.terminal .xterm-bg-color-134{background-color:#af5fd7}.terminal .xterm-color-135{color:#af5fff}.terminal .xterm-bg-color-135{background-color:#af5fff}.terminal .xterm-color-136{color:#af8700}.terminal .xterm-bg-color-136{background-color:#af8700}.terminal .xterm-color-137{color:#af875f}.terminal .xterm-bg-color-137{background-color:#af875f}.terminal .xterm-color-138{color:#af8787}.terminal .xterm-bg-color-138{background-color:#af8787}.terminal .xterm-color-139{color:#af87af}.terminal .xterm-bg-color-139{background-color:#af87af}.terminal .xterm-color-140{color:#af87d7}.terminal .xterm-bg-color-140{background-color:#af87d7}.terminal .xterm-color-141{color:#af87ff}.terminal .xterm-bg-color-141{background-color:#af87ff}.terminal .xterm-color-142{color:#afaf00}.terminal .xterm-bg-color-142{background-color:#afaf00}.terminal .xterm-color-143{color:#afaf5f}.terminal .xterm-bg-color-143{background-color:#afaf5f}.terminal .xterm-color-144{color:#afaf87}.terminal .xterm-bg-color-144{background-color:#afaf87}.terminal .xterm-color-145{color:#afafaf}.terminal .xterm-bg-color-145{background-color:#afafaf}.terminal .xterm-color-146{color:#afafd7}.terminal .xterm-bg-color-146{background-color:#afafd7}.terminal .xterm-color-147{color:#afafff}.terminal .xterm-bg-color-147{background-color:#afafff}.terminal .xterm-color-148{color:#afd700}.terminal .xterm-bg-color-148{background-color:#afd700}.terminal .xterm-color-149{color:#afd75f}.terminal .xterm-bg-color-149{background-color:#afd75f}.terminal .xterm-color-150{color:#afd787}.terminal .xterm-bg-color-150{background-color:#afd787}.terminal .xterm-color-151{color:#afd7af}.terminal .xterm-bg-color-151{background-color:#afd7af}.terminal .xterm-color-152{color:#afd7d7}.terminal .xterm-bg-color-152{background-color:#afd7d7}.terminal .xterm-color-153{color:#afd7ff}.terminal .xterm-bg-color-153{background-color:#afd7ff}.terminal .xterm-color-154{color:#afff00}.terminal .xterm-bg-color-154{background-color:#afff00}.terminal .xterm-color-155{color:#afff5f}.terminal .xterm-bg-color-155{background-color:#afff5f}.terminal .xterm-color-156{color:#afff87}.terminal .xterm-bg-color-156{background-color:#afff87}.terminal .xterm-color-157{color:#afffaf}.terminal .xterm-bg-color-157{background-color:#afffaf}.terminal .xterm-color-158{color:#afffd7}.terminal .xterm-bg-color-158{background-color:#afffd7}.terminal .xterm-color-159{color:#afffff}.terminal .xterm-bg-color-159{background-color:#afffff}.terminal .xterm-color-160{color:#d70000}.terminal .xterm-bg-color-160{background-color:#d70000}.terminal .xterm-color-161{color:#d7005f}.terminal .xterm-bg-color-161{background-color:#d7005f}.terminal .xterm-color-162{color:#d70087}.terminal .xterm-bg-color-162{background-color:#d70087}.terminal .xterm-color-163{color:#d700af}.terminal .xterm-bg-color-163{background-color:#d700af}.terminal .xterm-color-164{color:#d700d7}.terminal .xterm-bg-color-164{background-color:#d700d7}.terminal .xterm-color-165{color:#d700ff}.terminal .xterm-bg-color-165{background-color:#d700ff}.terminal .xterm-color-166{color:#d75f00}.terminal .xterm-bg-color-166{background-color:#d75f00}.terminal .xterm-color-167{color:#d75f5f}.terminal .xterm-bg-color-167{background-color:#d75f5f}.terminal .xterm-color-168{color:#d75f87}.terminal .xterm-bg-color-168{background-color:#d75f87}.terminal .xterm-color-169{color:#d75faf}.terminal .xterm-bg-color-169{background-color:#d75faf}.terminal .xterm-color-170{color:#d75fd7}.terminal .xterm-bg-color-170{background-color:#d75fd7}.terminal .xterm-color-171{color:#d75fff}.terminal .xterm-bg-color-171{background-color:#d75fff}.terminal .xterm-color-172{color:#d78700}.terminal .xterm-bg-color-172{background-color:#d78700}.terminal .xterm-color-173{color:#d7875f}.terminal .xterm-bg-color-173{background-color:#d7875f}.terminal .xterm-color-174{color:#d78787}.terminal .xterm-bg-color-174{background-color:#d78787}.terminal .xterm-color-175{color:#d787af}.terminal .xterm-bg-color-175{background-color:#d787af}.terminal .xterm-color-176{color:#d787d7}.terminal .xterm-bg-color-176{background-color:#d787d7}.terminal .xterm-color-177{color:#d787ff}.terminal .xterm-bg-color-177{background-color:#d787ff}.terminal .xterm-color-178{color:#d7af00}.terminal .xterm-bg-color-178{background-color:#d7af00}.terminal .xterm-color-179{color:#d7af5f}.terminal .xterm-bg-color-179{background-color:#d7af5f}.terminal .xterm-color-180{color:#d7af87}.terminal .xterm-bg-color-180{background-color:#d7af87}.terminal .xterm-color-181{color:#d7afaf}.terminal .xterm-bg-color-181{background-color:#d7afaf}.terminal .xterm-color-182{color:#d7afd7}.terminal .xterm-bg-color-182{background-color:#d7afd7}.terminal .xterm-color-183{color:#d7afff}.terminal .xterm-bg-color-183{background-color:#d7afff}.terminal .xterm-color-184{color:#d7d700}.terminal .xterm-bg-color-184{background-color:#d7d700}.terminal .xterm-color-185{color:#d7d75f}.terminal .xterm-bg-color-185{background-color:#d7d75f}.terminal .xterm-color-186{color:#d7d787}.terminal .xterm-bg-color-186{background-color:#d7d787}.terminal .xterm-color-187{color:#d7d7af}.terminal .xterm-bg-color-187{background-color:#d7d7af}.terminal .xterm-color-188{color:#d7d7d7}.terminal .xterm-bg-color-188{background-color:#d7d7d7}.terminal .xterm-color-189{color:#d7d7ff}.terminal .xterm-bg-color-189{background-color:#d7d7ff}.terminal .xterm-color-190{color:#d7ff00}.terminal .xterm-bg-color-190{background-color:#d7ff00}.terminal .xterm-color-191{color:#d7ff5f}.terminal .xterm-bg-color-191{background-color:#d7ff5f}.terminal .xterm-color-192{color:#d7ff87}.terminal .xterm-bg-color-192{background-color:#d7ff87}.terminal .xterm-color-193{color:#d7ffaf}.terminal .xterm-bg-color-193{background-color:#d7ffaf}.terminal .xterm-color-194{color:#d7ffd7}.terminal .xterm-bg-color-194{background-color:#d7ffd7}.terminal .xterm-color-195{color:#d7ffff}.terminal .xterm-bg-color-195{background-color:#d7ffff}.terminal .xterm-color-196{color:#ff0000}.terminal .xterm-bg-color-196{background-color:#ff0000}.terminal .xterm-color-197{color:#ff005f}.terminal .xterm-bg-color-197{background-color:#ff005f}.terminal .xterm-color-198{color:#ff0087}.terminal .xterm-bg-color-198{background-color:#ff0087}.terminal .xterm-color-199{color:#ff00af}.terminal .xterm-bg-color-199{background-color:#ff00af}.terminal .xterm-color-200{color:#ff00d7}.terminal .xterm-bg-color-200{background-color:#ff00d7}.terminal .xterm-color-201{color:#ff00ff}.terminal .xterm-bg-color-201{background-color:#ff00ff}.terminal .xterm-color-202{color:#ff5f00}.terminal .xterm-bg-color-202{background-color:#ff5f00}.terminal .xterm-color-203{color:#ff5f5f}.terminal .xterm-bg-color-203{background-color:#ff5f5f}.terminal .xterm-color-204{color:#ff5f87}.terminal .xterm-bg-color-204{background-color:#ff5f87}.terminal .xterm-color-205{color:#ff5faf}.terminal .xterm-bg-color-205{background-color:#ff5faf}.terminal .xterm-color-206{color:#ff5fd7}.terminal .xterm-bg-color-206{background-color:#ff5fd7}.terminal .xterm-color-207{color:#ff5fff}.terminal .xterm-bg-color-207{background-color:#ff5fff}.terminal .xterm-color-208{color:#ff8700}.terminal .xterm-bg-color-208{background-color:#ff8700}.terminal .xterm-color-209{color:#ff875f}.terminal .xterm-bg-color-209{background-color:#ff875f}.terminal .xterm-color-210{color:#ff8787}.terminal .xterm-bg-color-210{background-color:#ff8787}.terminal .xterm-color-211{color:#ff87af}.terminal .xterm-bg-color-211{background-color:#ff87af}.terminal .xterm-color-212{color:#ff87d7}.terminal .xterm-bg-color-212{background-color:#ff87d7}.terminal .xterm-color-213{color:#ff87ff}.terminal .xterm-bg-color-213{background-color:#ff87ff}.terminal .xterm-color-214{color:#ffaf00}.terminal .xterm-bg-color-214{background-color:#ffaf00}.terminal .xterm-color-215{color:#ffaf5f}.terminal .xterm-bg-color-215{background-color:#ffaf5f}.terminal .xterm-color-216{color:#ffaf87}.terminal .xterm-bg-color-216{background-color:#ffaf87}.terminal .xterm-color-217{color:#ffafaf}.terminal .xterm-bg-color-217{background-color:#ffafaf}.terminal .xterm-color-218{color:#ffafd7}.terminal .xterm-bg-color-218{background-color:#ffafd7}.terminal .xterm-color-219{color:#ffafff}.terminal .xterm-bg-color-219{background-color:#ffafff}.terminal .xterm-color-220{color:#ffd700}.terminal .xterm-bg-color-220{background-color:#ffd700}.terminal .xterm-color-221{color:#ffd75f}.terminal .xterm-bg-color-221{background-color:#ffd75f}.terminal .xterm-color-222{color:#ffd787}.terminal .xterm-bg-color-222{background-color:#ffd787}.terminal .xterm-color-223{color:#ffd7af}.terminal .xterm-bg-color-223{background-color:#ffd7af}.terminal .xterm-color-224{color:#ffd7d7}.terminal .xterm-bg-color-224{background-color:#ffd7d7}.terminal .xterm-color-225{color:#ffd7ff}.terminal .xterm-bg-color-225{background-color:#ffd7ff}.terminal .xterm-color-226{color:#ffff00}.terminal .xterm-bg-color-226{background-color:#ffff00}.terminal .xterm-color-227{color:#ffff5f}.terminal .xterm-bg-color-227{background-color:#ffff5f}.terminal .xterm-color-228{color:#ffff87}.terminal .xterm-bg-color-228{background-color:#ffff87}.terminal .xterm-color-229{color:#ffffaf}.terminal .xterm-bg-color-229{background-color:#ffffaf}.terminal .xterm-color-230{color:#ffffd7}.terminal .xterm-bg-color-230{background-color:#ffffd7}.terminal .xterm-color-231{color:#ffffff}.terminal .xterm-bg-color-231{background-color:#ffffff}.terminal .xterm-color-232{color:#080808}.terminal .xterm-bg-color-232{background-color:#080808}.terminal .xterm-color-233{color:#121212}.terminal .xterm-bg-color-233{background-color:#121212}.terminal .xterm-color-234{color:#1c1c1c}.terminal .xterm-bg-color-234{background-color:#1c1c1c}.terminal .xterm-color-235{color:#262626}.terminal .xterm-bg-color-235{background-color:#262626}.terminal .xterm-color-236{color:#303030}.terminal .xterm-bg-color-236{background-color:#303030}.terminal .xterm-color-237{color:#3a3a3a}.terminal .xterm-bg-color-237{background-color:#3a3a3a}.terminal .xterm-color-238{color:#444444}.terminal .xterm-bg-color-238{background-color:#444444}.terminal .xterm-color-239{color:#4e4e4e}.terminal .xterm-bg-color-239{background-color:#4e4e4e}.terminal .xterm-color-240{color:#585858}.terminal .xterm-bg-color-240{background-color:#585858}.terminal .xterm-color-241{color:#626262}.terminal .xterm-bg-color-241{background-color:#626262}.terminal .xterm-color-242{color:#6c6c6c}.terminal .xterm-bg-color-242{background-color:#6c6c6c}.terminal .xterm-color-243{color:#767676}.terminal .xterm-bg-color-243{background-color:#767676}.terminal .xterm-color-244{color:#808080}.terminal .xterm-bg-color-244{background-color:#808080}.terminal .xterm-color-245{color:#8a8a8a}.terminal .xterm-bg-color-245{background-color:#8a8a8a}.terminal .xterm-color-246{color:#949494}.terminal .xterm-bg-color-246{background-color:#949494}.terminal .xterm-color-247{color:#9e9e9e}.terminal .xterm-bg-color-247{background-color:#9e9e9e}.terminal .xterm-color-248{color:#a8a8a8}.terminal .xterm-bg-color-248{background-color:#a8a8a8}.terminal .xterm-color-249{color:#b2b2b2}.terminal .xterm-bg-color-249{background-color:#b2b2b2}.terminal .xterm-color-250{color:#bcbcbc}.terminal .xterm-bg-color-250{background-color:#bcbcbc}.terminal .xterm-color-251{color:#c6c6c6}.terminal .xterm-bg-color-251{background-color:#c6c6c6}.terminal .xterm-color-252{color:#d0d0d0}.terminal .xterm-bg-color-252{background-color:#d0d0d0}.terminal .xterm-color-253{color:#dadada}.terminal .xterm-bg-color-253{background-color:#dadada}.terminal .xterm-color-254{color:#e4e4e4}.terminal .xterm-bg-color-254{background-color:#e4e4e4}.terminal .xterm-color-255{color:#eeeeee}.terminal .xterm-bg-color-255{background-color:#eeeeee}/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{color:#000 !important;text-shadow:none !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#4d4d4d;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #f3f3f3}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:normal;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:400;line-height:1;color:#919191}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted,.grv-invite-login-error .grv-invite-login-error-u2f-codes{color:#919191}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #f3f3f3}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:700}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #f3f3f3}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.428571429;color:#919191}blockquote footer:before,blockquote small:before,blockquote .small:before{content:"\2014 \A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #f3f3f3;border-left:0}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:""}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:"\A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#4d4d4d;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container-fluid:before,.container-fluid:after{display:table;content:" "}.container-fluid:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*="col-"]{padding-right:0;padding-left:0}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.333333333%}.col-xs-2{width:16.666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.333333333%}.col-xs-5{width:41.666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333%}.col-xs-8{width:66.666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.333333333%}.col-xs-11{width:91.666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.333333333%}.col-xs-pull-2{right:16.666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.333333333%}.col-xs-pull-5{right:41.666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.333333333%}.col-xs-pull-8{right:66.666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.333333333%}.col-xs-pull-11{right:91.666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.333333333%}.col-xs-push-2{left:16.666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.333333333%}.col-xs-push-5{left:41.666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.333333333%}.col-xs-push-8{left:66.666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.333333333%}.col-xs-push-11{left:91.666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.333333333%}.col-xs-offset-2{margin-left:16.666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.333333333%}.col-xs-offset-5{margin-left:41.666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.333333333%}.col-xs-offset-8{margin-left:66.666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.333333333%}.col-xs-offset-11{margin-left:91.666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.333333333%}.col-sm-2{width:16.666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.333333333%}.col-sm-5{width:41.666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333%}.col-sm-8{width:66.666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.333333333%}.col-sm-11{width:91.666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.333333333%}.col-sm-pull-2{right:16.666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.333333333%}.col-sm-pull-5{right:41.666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333%}.col-sm-pull-8{right:66.666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.333333333%}.col-sm-pull-11{right:91.666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.333333333%}.col-sm-push-2{left:16.666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.333333333%}.col-sm-push-5{left:41.666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333%}.col-sm-push-8{left:66.666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.333333333%}.col-sm-push-11{left:91.666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.333333333%}.col-sm-offset-2{margin-left:16.666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.333333333%}.col-sm-offset-5{margin-left:41.666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333%}.col-sm-offset-8{margin-left:66.666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.333333333%}.col-sm-offset-11{margin-left:91.666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.333333333%}.col-md-2{width:16.666666667%}.col-md-3{width:25%}.col-md-4{width:33.333333333%}.col-md-5{width:41.666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333%}.col-md-8{width:66.666666667%}.col-md-9{width:75%}.col-md-10{width:83.333333333%}.col-md-11{width:91.666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333%}.col-md-pull-2{right:16.666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.333333333%}.col-md-pull-5{right:41.666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333%}.col-md-pull-8{right:66.666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.333333333%}.col-md-pull-11{right:91.666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333%}.col-md-push-2{left:16.666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.333333333%}.col-md-push-5{left:41.666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333%}.col-md-push-8{left:66.666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.333333333%}.col-md-push-11{left:91.666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.333333333%}.col-md-offset-2{margin-left:16.666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.333333333%}.col-md-offset-5{margin-left:41.666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333%}.col-md-offset-8{margin-left:66.666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.333333333%}.col-md-offset-11{margin-left:91.666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.333333333%}.col-lg-2{width:16.666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.333333333%}.col-lg-5{width:41.666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333%}.col-lg-8{width:66.666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.333333333%}.col-lg-11{width:91.666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333%}.col-lg-pull-2{right:16.666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.333333333%}.col-lg-pull-5{right:41.666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333%}.col-lg-pull-8{right:66.666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.333333333%}.col-lg-pull-11{right:91.666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333%}.col-lg-push-2{left:16.666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.333333333%}.col-lg-push-5{left:41.666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333%}.col-lg-push-8{left:66.666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.333333333%}.col-lg-push-11{left:91.666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.333333333%}.col-lg-offset-2{margin-left:16.666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.333333333%}.col-lg-offset-5{margin-left:41.666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333%}.col-lg-offset-8{margin-left:66.666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.333333333%}.col-lg-offset-11{margin-left:91.666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:rgba(0,0,0,0)}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#919191;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#4d4d4d;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;appearance:none}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#6f6f6f}.form-control,.grv-file-transfer .grv-file-transfer-input{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#6f6f6f;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus,.grv-file-transfer .grv-file-transfer-input:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder,.grv-file-transfer .grv-file-transfer-input::-moz-placeholder{color:#AAA;opacity:1}.form-control:-ms-input-placeholder,.grv-file-transfer .grv-file-transfer-input:-ms-input-placeholder{color:#AAA}.form-control::-webkit-input-placeholder,.grv-file-transfer .grv-file-transfer-input::-webkit-input-placeholder{color:#AAA}.form-control::-ms-expand,.grv-file-transfer .grv-file-transfer-input::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.grv-file-transfer .grv-file-transfer-input[disabled],.form-control[readonly],.grv-file-transfer .grv-file-transfer-input[readonly],fieldset[disabled] .form-control,fieldset[disabled] .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer fieldset[disabled] .grv-file-transfer-input{background-color:#f3f3f3;opacity:1}.form-control[disabled],.grv-file-transfer .grv-file-transfer-input[disabled],fieldset[disabled] .form-control,fieldset[disabled] .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer fieldset[disabled] .grv-file-transfer-input{cursor:not-allowed}textarea.form-control,.grv-file-transfer textarea.grv-file-transfer-input{height:auto}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,.grv-file-transfer input.grv-file-transfer-input[type="date"],input[type="time"].form-control,.grv-file-transfer input.grv-file-transfer-input[type="time"],input[type="datetime-local"].form-control,.grv-file-transfer input.grv-file-transfer-input[type="datetime-local"],input[type="month"].form-control,.grv-file-transfer input.grv-file-transfer-input[type="month"]{line-height:34px}input[type="date"].input-sm,.input-group-sm>input.form-control[type="date"],.grv-file-transfer .input-group-sm>input.grv-file-transfer-input[type="date"],.input-group-sm>input.input-group-addon[type="date"],.input-group-sm>.input-group-btn>input.btn[type="date"],.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input.form-control[type="time"],.grv-file-transfer .input-group-sm>input.grv-file-transfer-input[type="time"],.input-group-sm>input.input-group-addon[type="time"],.input-group-sm>.input-group-btn>input.btn[type="time"],.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input.form-control[type="datetime-local"],.grv-file-transfer .input-group-sm>input.grv-file-transfer-input[type="datetime-local"],.input-group-sm>input.input-group-addon[type="datetime-local"],.input-group-sm>.input-group-btn>input.btn[type="datetime-local"],.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input.form-control[type="month"],.grv-file-transfer .input-group-sm>input.grv-file-transfer-input[type="month"],.input-group-sm>input.input-group-addon[type="month"],.input-group-sm>.input-group-btn>input.btn[type="month"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,.input-group-lg>input.form-control[type="date"],.grv-file-transfer .input-group-lg>input.grv-file-transfer-input[type="date"],.input-group-lg>input.input-group-addon[type="date"],.input-group-lg>.input-group-btn>input.btn[type="date"],.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input.form-control[type="time"],.grv-file-transfer .input-group-lg>input.grv-file-transfer-input[type="time"],.input-group-lg>input.input-group-addon[type="time"],.input-group-lg>.input-group-btn>input.btn[type="time"],.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input.form-control[type="datetime-local"],.grv-file-transfer .input-group-lg>input.grv-file-transfer-input[type="datetime-local"],.input-group-lg>input.input-group-addon[type="datetime-local"],.input-group-lg>.input-group-btn>input.btn[type="datetime-local"],.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input.form-control[type="month"],.grv-file-transfer .input-group-lg>input.grv-file-transfer-input[type="month"],.input-group-lg>input.input-group-addon[type="month"],.input-group-lg>.input-group-btn>input.btn[type="month"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.grv-file-transfer .input-group-lg>.form-control-static.grv-file-transfer-input,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.grv-file-transfer .input-group-sm>.form-control-static.grv-file-transfer-input,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.input-sm,.input-group-sm>.form-control,.grv-file-transfer .input-group-sm>.grv-file-transfer-input,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.grv-file-transfer .input-group-sm>select.grv-file-transfer-input,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.grv-file-transfer .input-group-sm>textarea.grv-file-transfer-input,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select.form-control[multiple],.grv-file-transfer .input-group-sm>select.grv-file-transfer-input[multiple],.input-group-sm>select.input-group-addon[multiple],.input-group-sm>.input-group-btn>select.btn[multiple]{height:auto}.form-group-sm .form-control,.form-group-sm .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .form-group-sm .grv-file-transfer-input{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control,.form-group-sm .grv-file-transfer select.grv-file-transfer-input,.grv-file-transfer .form-group-sm select.grv-file-transfer-input{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm .grv-file-transfer textarea.grv-file-transfer-input,.grv-file-transfer .form-group-sm textarea.grv-file-transfer-input,.form-group-sm select[multiple].form-control,.form-group-sm .grv-file-transfer select.grv-file-transfer-input[multiple],.grv-file-transfer .form-group-sm select.grv-file-transfer-input[multiple]{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg,.input-group-lg>.form-control,.grv-file-transfer .input-group-lg>.grv-file-transfer-input,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.grv-file-transfer .input-group-lg>select.grv-file-transfer-input,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.grv-file-transfer .input-group-lg>textarea.grv-file-transfer-input,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select.form-control[multiple],.grv-file-transfer .input-group-lg>select.grv-file-transfer-input[multiple],.input-group-lg>select.input-group-addon[multiple],.input-group-lg>.input-group-btn>select.btn[multiple]{height:auto}.form-group-lg .form-control,.form-group-lg .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .form-group-lg .grv-file-transfer-input{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control,.form-group-lg .grv-file-transfer select.grv-file-transfer-input,.grv-file-transfer .form-group-lg select.grv-file-transfer-input{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg .grv-file-transfer textarea.grv-file-transfer-input,.grv-file-transfer .form-group-lg textarea.grv-file-transfer-input,.form-group-lg select[multiple].form-control,.form-group-lg .grv-file-transfer select.grv-file-transfer-input[multiple],.grv-file-transfer .form-group-lg select.grv-file-transfer-input[multiple]{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control,.has-feedback .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .has-feedback .grv-file-transfer-input{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.grv-file-transfer .input-group-lg>.grv-file-transfer-input+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback,.form-group-lg .grv-file-transfer .grv-file-transfer-input+.form-control-feedback,.grv-file-transfer .form-group-lg .grv-file-transfer-input+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.grv-file-transfer .input-group-sm>.grv-file-transfer-input+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback,.form-group-sm .grv-file-transfer .grv-file-transfer-input+.form-control-feedback,.grv-file-transfer .form-group-sm .grv-file-transfer-input+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control,.has-success .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .has-success .grv-file-transfer-input{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus,.has-success .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .has-success .grv-file-transfer-input:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control,.has-warning .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .has-warning .grv-file-transfer-input{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus,.has-warning .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .has-warning .grv-file-transfer-input:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control,.has-error .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .has-error .grv-file-transfer-input{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus,.has-error .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .has-error .grv-file-transfer-input:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#8d8d8d}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.form-inline .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .form-inline .grv-file-transfer-input{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control,.form-inline .input-group .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .form-inline .input-group .grv-file-transfer-input{width:auto}.form-inline .input-group>.form-control,.form-inline .grv-file-transfer .input-group>.grv-file-transfer-input,.grv-file-transfer .form-inline .input-group>.grv-file-transfer-input{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e5e5;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e5e5;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e5e5;background-image:none;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#919191;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#4d4d4d;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#404040;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#919191}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#919191;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control,.input-group .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .input-group .grv-file-transfer-input{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus,.input-group .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .input-group .grv-file-transfer-input:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control,.input-group .grv-file-transfer .grv-file-transfer-input,.grv-file-transfer .input-group .grv-file-transfer-input{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child),.input-group .grv-file-transfer .grv-file-transfer-input:not(:first-child):not(:last-child),.grv-file-transfer .input-group .grv-file-transfer-input:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#6f6f6f;text-align:center;background-color:#f3f3f3;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.grv-file-transfer .input-group-sm>.input-group-addon.grv-file-transfer-input,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.grv-file-transfer .input-group-lg>.input-group-addon.grv-file-transfer-input,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group .grv-file-transfer .grv-file-transfer-input:first-child,.grv-file-transfer .input-group .grv-file-transfer-input:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group .grv-file-transfer .grv-file-transfer-input:last-child,.grv-file-transfer .input-group .grv-file-transfer-input:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#f3f3f3}.nav>li.disabled>a{color:#919191}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#919191;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#f3f3f3;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#f3f3f3 #f3f3f3 #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#6f6f6f;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#919191}.label-default[href]:hover,.label-default[href]:focus{background-color:#787878}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:before,.modal-header:after{display:table;content:" "}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.428571429;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.btn-adn{background-color:#d87a68;color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.btn-adn.dropdown-toggle{color:#fff;background-color:#ce563f;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-adn:active:hover,.btn-adn:active:focus,.btn-adn:active.focus,.btn-adn.active:hover,.btn-adn.active:focus,.btn-adn.active.focus,.open>.btn-adn.dropdown-toggle:hover,.open>.btn-adn.dropdown-toggle:focus,.open>.btn-adn.dropdown-toggle.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2)}.btn-adn.disabled:hover,.btn-adn.disabled:focus,.btn-adn.disabled.focus,.btn-adn[disabled]:hover,.btn-adn[disabled]:focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn:hover,fieldset[disabled] .btn-adn:focus,fieldset[disabled] .btn-adn.focus{background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{background-color:#205081;color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.btn-bitbucket.dropdown-toggle{color:#fff;background-color:#163758;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active:hover,.btn-bitbucket:active:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active:hover,.btn-bitbucket.active:focus,.btn-bitbucket.active.focus,.open>.btn-bitbucket.dropdown-toggle:hover,.open>.btn-bitbucket.dropdown-toggle:focus,.open>.btn-bitbucket.dropdown-toggle.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2)}.btn-bitbucket.disabled:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled]:hover,.btn-bitbucket[disabled]:focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket:hover,fieldset[disabled] .btn-bitbucket:focus,fieldset[disabled] .btn-bitbucket.focus{background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{background-color:#1087dd;color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.btn-dropbox.dropdown-toggle{color:#fff;background-color:#0d6aad;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active:hover,.btn-dropbox:active:focus,.btn-dropbox:active.focus,.btn-dropbox.active:hover,.btn-dropbox.active:focus,.btn-dropbox.active.focus,.open>.btn-dropbox.dropdown-toggle:hover,.open>.btn-dropbox.dropdown-toggle:focus,.open>.btn-dropbox.dropdown-toggle.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2)}.btn-dropbox.disabled:hover,.btn-dropbox.disabled:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled]:hover,.btn-dropbox[disabled]:focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox:hover,fieldset[disabled] .btn-dropbox:focus,fieldset[disabled] .btn-dropbox.focus{background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{background-color:#3b5998;color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.btn-facebook.dropdown-toggle{color:#fff;background-color:#2d4373;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-facebook:active:hover,.btn-facebook:active:focus,.btn-facebook:active.focus,.btn-facebook.active:hover,.btn-facebook.active:focus,.btn-facebook.active.focus,.open>.btn-facebook.dropdown-toggle:hover,.open>.btn-facebook.dropdown-toggle:focus,.open>.btn-facebook.dropdown-toggle.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2)}.btn-facebook.disabled:hover,.btn-facebook.disabled:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled]:hover,.btn-facebook[disabled]:focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook:hover,fieldset[disabled] .btn-facebook:focus,fieldset[disabled] .btn-facebook.focus{background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{background-color:#ff0084;color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.btn-flickr.dropdown-toggle{color:#fff;background-color:#cc006a;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-flickr:active:hover,.btn-flickr:active:focus,.btn-flickr:active.focus,.btn-flickr.active:hover,.btn-flickr.active:focus,.btn-flickr.active.focus,.open>.btn-flickr.dropdown-toggle:hover,.open>.btn-flickr.dropdown-toggle:focus,.open>.btn-flickr.dropdown-toggle.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2)}.btn-flickr.disabled:hover,.btn-flickr.disabled:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled]:hover,.btn-flickr[disabled]:focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr:hover,fieldset[disabled] .btn-flickr:focus,fieldset[disabled] .btn-flickr.focus{background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{background-color:#f94877;color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.btn-foursquare.dropdown-toggle{color:#fff;background-color:#f71752;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active:hover,.btn-foursquare:active:focus,.btn-foursquare:active.focus,.btn-foursquare.active:hover,.btn-foursquare.active:focus,.btn-foursquare.active.focus,.open>.btn-foursquare.dropdown-toggle:hover,.open>.btn-foursquare.dropdown-toggle:focus,.open>.btn-foursquare.dropdown-toggle.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2)}.btn-foursquare.disabled:hover,.btn-foursquare.disabled:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled]:hover,.btn-foursquare[disabled]:focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare:hover,fieldset[disabled] .btn-foursquare:focus,fieldset[disabled] .btn-foursquare.focus{background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{background-color:#444;color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2a2a;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2a2a;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.btn-github.dropdown-toggle{color:#fff;background-color:#2b2a2a;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-github:active:hover,.btn-github:active:focus,.btn-github:active.focus,.btn-github.active:hover,.btn-github.active:focus,.btn-github.active.focus,.open>.btn-github.dropdown-toggle:hover,.open>.btn-github.dropdown-toggle:focus,.open>.btn-github.dropdown-toggle.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2)}.btn-github.disabled:hover,.btn-github.disabled:focus,.btn-github.disabled.focus,.btn-github[disabled]:hover,.btn-github[disabled]:focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github:hover,fieldset[disabled] .btn-github:focus,fieldset[disabled] .btn-github.focus{background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github .badge{color:#444;background-color:#fff}.btn-google{background-color:#dd4b39;color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.btn-google.dropdown-toggle{color:#fff;background-color:#c23321;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-google:active:hover,.btn-google:active:focus,.btn-google:active.focus,.btn-google.active:hover,.btn-google.active:focus,.btn-google.active.focus,.open>.btn-google.dropdown-toggle:hover,.open>.btn-google.dropdown-toggle:focus,.open>.btn-google.dropdown-toggle.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2)}.btn-google.disabled:hover,.btn-google.disabled:focus,.btn-google.disabled.focus,.btn-google[disabled]:hover,.btn-google[disabled]:focus,.btn-google[disabled].focus,fieldset[disabled] .btn-google:hover,fieldset[disabled] .btn-google:focus,fieldset[disabled] .btn-google.focus{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{background-color:#3f729b;color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.btn-instagram.dropdown-toggle{color:#fff;background-color:#305777;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-instagram:active:hover,.btn-instagram:active:focus,.btn-instagram:active.focus,.btn-instagram.active:hover,.btn-instagram.active:focus,.btn-instagram.active.focus,.open>.btn-instagram.dropdown-toggle:hover,.open>.btn-instagram.dropdown-toggle:focus,.open>.btn-instagram.dropdown-toggle.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2)}.btn-instagram.disabled:hover,.btn-instagram.disabled:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled]:hover,.btn-instagram[disabled]:focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram:hover,fieldset[disabled] .btn-instagram:focus,fieldset[disabled] .btn-instagram.focus{background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{background-color:#007bb6;color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.btn-linkedin.dropdown-toggle{color:#fff;background-color:#005983;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active:hover,.btn-linkedin:active:focus,.btn-linkedin:active.focus,.btn-linkedin.active:hover,.btn-linkedin.active:focus,.btn-linkedin.active.focus,.open>.btn-linkedin.dropdown-toggle:hover,.open>.btn-linkedin.dropdown-toggle:focus,.open>.btn-linkedin.dropdown-toggle.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2)}.btn-linkedin.disabled:hover,.btn-linkedin.disabled:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled]:hover,.btn-linkedin[disabled]:focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin:hover,fieldset[disabled] .btn-linkedin:focus,fieldset[disabled] .btn-linkedin.focus{background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{background-color:#2672ec;color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.btn-microsoft.dropdown-toggle{color:#fff;background-color:#125acd;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active:hover,.btn-microsoft:active:focus,.btn-microsoft:active.focus,.btn-microsoft.active:hover,.btn-microsoft.active:focus,.btn-microsoft.active.focus,.open>.btn-microsoft.dropdown-toggle:hover,.open>.btn-microsoft.dropdown-toggle:focus,.open>.btn-microsoft.dropdown-toggle.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2)}.btn-microsoft.disabled:hover,.btn-microsoft.disabled:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled]:hover,.btn-microsoft[disabled]:focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft:hover,fieldset[disabled] .btn-microsoft:focus,fieldset[disabled] .btn-microsoft.focus{background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-odnoklassniki{background-color:#f4731c;color:#fff;background-color:#f4731c;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:focus,.btn-odnoklassniki.focus{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:hover{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.btn-odnoklassniki.dropdown-toggle{color:#fff;background-color:#d35b0a;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:active:hover,.btn-odnoklassniki:active:focus,.btn-odnoklassniki:active.focus,.btn-odnoklassniki.active:hover,.btn-odnoklassniki.active:focus,.btn-odnoklassniki.active.focus,.open>.btn-odnoklassniki.dropdown-toggle:hover,.open>.btn-odnoklassniki.dropdown-toggle:focus,.open>.btn-odnoklassniki.dropdown-toggle.focus{color:#fff;background-color:#b14c09;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki.disabled:hover,.btn-odnoklassniki.disabled:focus,.btn-odnoklassniki.disabled.focus,.btn-odnoklassniki[disabled]:hover,.btn-odnoklassniki[disabled]:focus,.btn-odnoklassniki[disabled].focus,fieldset[disabled] .btn-odnoklassniki:hover,fieldset[disabled] .btn-odnoklassniki:focus,fieldset[disabled] .btn-odnoklassniki.focus{background-color:#f4731c;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki .badge{color:#f4731c;background-color:#fff}.btn-openid,.grv-user-btn-sso.\--unknown{background-color:#f7931e;color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.grv-user-btn-sso.\--unknown:focus,.btn-openid.focus,.focus.grv-user-btn-sso.\--unknown{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover,.grv-user-btn-sso.\--unknown:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.grv-user-btn-sso.\--unknown:active,.btn-openid.active,.active.grv-user-btn-sso.\--unknown,.open>.btn-openid.dropdown-toggle,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown{color:#fff;background-color:#da7908;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-openid:active:hover,.grv-user-btn-sso.\--unknown:active:hover,.btn-openid:active:focus,.grv-user-btn-sso.\--unknown:active:focus,.btn-openid:active.focus,.grv-user-btn-sso.\--unknown:active.focus,.btn-openid.active:hover,.active.grv-user-btn-sso.\--unknown:hover,.btn-openid.active:focus,.active.grv-user-btn-sso.\--unknown:focus,.btn-openid.active.focus,.active.focus.grv-user-btn-sso.\--unknown,.open>.btn-openid.dropdown-toggle:hover,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown:hover,.open>.btn-openid.dropdown-toggle:focus,.open>.dropdown-toggle.grv-user-btn-sso.\--unknown:focus,.open>.btn-openid.dropdown-toggle.focus,.open>.dropdown-toggle.focus.grv-user-btn-sso.\--unknown{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)}.btn-openid.disabled:hover,.disabled.grv-user-btn-sso.\--unknown:hover,.btn-openid.disabled:focus,.disabled.grv-user-btn-sso.\--unknown:focus,.btn-openid.disabled.focus,.disabled.focus.grv-user-btn-sso.\--unknown,.btn-openid[disabled]:hover,.grv-user-btn-sso.\--unknown[disabled]:hover,.btn-openid[disabled]:focus,.grv-user-btn-sso.\--unknown[disabled]:focus,.btn-openid[disabled].focus,.grv-user-btn-sso.\--unknown[disabled].focus,fieldset[disabled] .btn-openid:hover,fieldset[disabled] .grv-user-btn-sso.\--unknown:hover,fieldset[disabled] .btn-openid:focus,fieldset[disabled] .grv-user-btn-sso.\--unknown:focus,fieldset[disabled] .btn-openid.focus,fieldset[disabled] .focus.grv-user-btn-sso.\--unknown{background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid .badge,.grv-user-btn-sso.\--unknown .badge{color:#f7931e;background-color:#fff}.btn-saml{background-color:#f7931e;color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-saml:focus,.btn-saml.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-saml:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-saml:active,.btn-saml.active,.open>.btn-saml.dropdown-toggle{color:#fff;background-color:#da7908;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-saml:active:hover,.btn-saml:active:focus,.btn-saml:active.focus,.btn-saml.active:hover,.btn-saml.active:focus,.btn-saml.active.focus,.open>.btn-saml.dropdown-toggle:hover,.open>.btn-saml.dropdown-toggle:focus,.open>.btn-saml.dropdown-toggle.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)}.btn-saml.disabled:hover,.btn-saml.disabled:focus,.btn-saml.disabled.focus,.btn-saml[disabled]:hover,.btn-saml[disabled]:focus,.btn-saml[disabled].focus,fieldset[disabled] .btn-saml:hover,fieldset[disabled] .btn-saml:focus,fieldset[disabled] .btn-saml.focus{background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-saml .badge{color:#f7931e;background-color:#fff}.btn-pinterest{background-color:#cb2027;color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.btn-pinterest.dropdown-toggle{color:#fff;background-color:#9f191f;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active:hover,.btn-pinterest:active:focus,.btn-pinterest:active.focus,.btn-pinterest.active:hover,.btn-pinterest.active:focus,.btn-pinterest.active.focus,.open>.btn-pinterest.dropdown-toggle:hover,.open>.btn-pinterest.dropdown-toggle:focus,.open>.btn-pinterest.dropdown-toggle.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2)}.btn-pinterest.disabled:hover,.btn-pinterest.disabled:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled]:hover,.btn-pinterest[disabled]:focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest:hover,fieldset[disabled] .btn-pinterest:focus,fieldset[disabled] .btn-pinterest.focus{background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{background-color:#eff7ff;color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcdeff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcdeff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.btn-reddit.dropdown-toggle{color:#000;background-color:#bcdeff;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-reddit:active:hover,.btn-reddit:active:focus,.btn-reddit:active.focus,.btn-reddit.active:hover,.btn-reddit.active:focus,.btn-reddit.active.focus,.open>.btn-reddit.dropdown-toggle:hover,.open>.btn-reddit.dropdown-toggle:focus,.open>.btn-reddit.dropdown-toggle.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2)}.btn-reddit.disabled:hover,.btn-reddit.disabled:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled]:hover,.btn-reddit[disabled]:focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit:hover,fieldset[disabled] .btn-reddit:focus,fieldset[disabled] .btn-reddit.focus{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{background-color:#f50;color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.btn-soundcloud.dropdown-toggle{color:#fff;background-color:#c40;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active:hover,.btn-soundcloud:active:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active:hover,.btn-soundcloud.active:focus,.btn-soundcloud.active.focus,.open>.btn-soundcloud.dropdown-toggle:hover,.open>.btn-soundcloud.dropdown-toggle:focus,.open>.btn-soundcloud.dropdown-toggle.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2)}.btn-soundcloud.disabled:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled]:hover,.btn-soundcloud[disabled]:focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud:hover,fieldset[disabled] .btn-soundcloud:focus,fieldset[disabled] .btn-soundcloud.focus{background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{background-color:#2c4762;color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2e3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2e3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.btn-tumblr.dropdown-toggle{color:#fff;background-color:#1c2e3f;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active:hover,.btn-tumblr:active:focus,.btn-tumblr:active.focus,.btn-tumblr.active:hover,.btn-tumblr.active:focus,.btn-tumblr.active.focus,.open>.btn-tumblr.dropdown-toggle:hover,.open>.btn-tumblr.dropdown-toggle:focus,.open>.btn-tumblr.dropdown-toggle.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2)}.btn-tumblr.disabled:hover,.btn-tumblr.disabled:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled]:hover,.btn-tumblr[disabled]:focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr:hover,fieldset[disabled] .btn-tumblr:focus,fieldset[disabled] .btn-tumblr.focus{background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{background-color:#55acee;color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.btn-twitter.dropdown-toggle{color:#fff;background-color:#2795e9;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-twitter:active:hover,.btn-twitter:active:focus,.btn-twitter:active.focus,.btn-twitter.active:hover,.btn-twitter.active:focus,.btn-twitter.active.focus,.open>.btn-twitter.dropdown-toggle:hover,.open>.btn-twitter.dropdown-toggle:focus,.open>.btn-twitter.dropdown-toggle.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2)}.btn-twitter.disabled:hover,.btn-twitter.disabled:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled]:hover,.btn-twitter[disabled]:focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter:hover,fieldset[disabled] .btn-twitter:focus,fieldset[disabled] .btn-twitter.focus{background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{background-color:#1ab7ea;color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.btn-vimeo.dropdown-toggle{color:#fff;background-color:#1295bf;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active:hover,.btn-vimeo:active:focus,.btn-vimeo:active.focus,.btn-vimeo.active:hover,.btn-vimeo.active:focus,.btn-vimeo.active.focus,.open>.btn-vimeo.dropdown-toggle:hover,.open>.btn-vimeo.dropdown-toggle:focus,.open>.btn-vimeo.dropdown-toggle.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2)}.btn-vimeo.disabled:hover,.btn-vimeo.disabled:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled]:hover,.btn-vimeo[disabled]:focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo:hover,fieldset[disabled] .btn-vimeo:focus,fieldset[disabled] .btn-vimeo.focus{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{background-color:#587ea3;color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.btn-vk.dropdown-toggle{color:#fff;background-color:#466482;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-vk:active:hover,.btn-vk:active:focus,.btn-vk:active.focus,.btn-vk.active:hover,.btn-vk.active:focus,.btn-vk.active.focus,.open>.btn-vk.dropdown-toggle:hover,.open>.btn-vk.dropdown-toggle:focus,.open>.btn-vk.dropdown-toggle.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2)}.btn-vk.disabled:hover,.btn-vk.disabled:focus,.btn-vk.disabled.focus,.btn-vk[disabled]:hover,.btn-vk[disabled]:focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk:hover,fieldset[disabled] .btn-vk:focus,fieldset[disabled] .btn-vk.focus{background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{background-color:#720e9e;color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.btn-yahoo.dropdown-toggle{color:#fff;background-color:#500a6f;background-image:none;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active:hover,.btn-yahoo:active:focus,.btn-yahoo:active.focus,.btn-yahoo.active:hover,.btn-yahoo.active:focus,.btn-yahoo.active.focus,.open>.btn-yahoo.dropdown-toggle:hover,.open>.btn-yahoo.dropdown-toggle:focus,.open>.btn-yahoo.dropdown-toggle.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2)}.btn-yahoo.disabled:hover,.btn-yahoo.disabled:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled]:hover,.btn-yahoo[disabled]:focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo:hover,fieldset[disabled] .btn-yahoo:focus,fieldset[disabled] .btn-yahoo.focus{background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo .badge{color:#720e9e;background-color:#fff}h1{font-size:30px}h2{font-size:24px}h3{font-size:16px}h4{font-size:14px}h5{font-size:12px}h6{font-size:10px}h3,h4,h5{margin-top:5px;font-weight:600}.btn{border-radius:3px}.float-e-margins .btn{margin-bottom:5px}.btn-w-m{min-width:120px}.btn-primary.btn-outline{color:#4e988b}.btn-success.btn-outline{color:#4f8aaf}.btn-info.btn-outline{color:#4e988b}.btn-warning.btn-outline{color:#FF9800}.btn-danger.btn-outline{color:#ED5565}.btn-primary.btn-outline:hover,.btn-success.btn-outline:hover,.btn-info.btn-outline:hover,.btn-warning.btn-outline:hover,.btn-danger.btn-outline:hover{color:#fff}.btn-primary{background-color:#4e988b;border-color:#4e988b;color:#FFFFFF}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary,.btn-primary:active:focus,.btn-primary:active:hover,.btn-primary.active:hover,.btn-primary.active:focus{background-color:#498e82;border-color:#498e82;color:#FFFFFF}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled]:active,.btn-primary.active[disabled],fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#55a597;border-color:#55a597}.btn-success{background-color:#4f8aaf;border-color:#4f8aaf;color:#FFFFFF}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success,.btn-success:active:focus,.btn-success:active:hover,.btn-success.active:hover,.btn-success.active:focus{background-color:#4a82a4;border-color:#4a82a4;color:#FFFFFF}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled]:active,.btn-success.active[disabled],fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#5d93b6;border-color:#5d93b6}.btn-info{background-color:#4e988b;border-color:#4e988b;color:#FFFFFF}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info,.btn-info:active:focus,.btn-info:active:hover,.btn-info.active:hover,.btn-info.active:focus{background-color:#498e82;border-color:#498e82;color:#FFFFFF}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled]:active,.btn-info.active[disabled],fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#55a597;border-color:#55a597}.btn-default{color:inherit;background:white;border:1px solid #e7eaec}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default,.btn-default:active:focus,.btn-default:active:hover,.btn-default.active:hover,.btn-default.active:focus{color:inherit;border:1px solid #d2d2d2}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{box-shadow:0 2px 5px rgba(0,0,0,0.15) inset}.btn-default.disabled,.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled:active,.btn-default.disabled.active,.btn-default[disabled],.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled]:active,.btn-default.active[disabled],fieldset[disabled] .btn-default,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default.active{color:#cacaca}.btn-warning{background-color:#FF9800;border-color:#FF9800;color:#FFFFFF}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning,.btn-warning:active:focus,.btn-warning:active:hover,.btn-warning.active:hover,.btn-warning.active:focus{background-color:#f08f00;border-color:#f08f00;color:#FFFFFF}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled]:active,.btn-warning.active[disabled],fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#ffa014;border-color:#ffa014}.btn-danger{background-color:#ED5565;border-color:#ED5565;color:#FFFFFF}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger,.btn-danger:active:focus,.btn-danger:active:hover,.btn-danger.active:hover,.btn-danger.active:focus{background-color:#ec4758;border-color:#ec4758;color:#FFFFFF}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled]:active,.btn-danger.active[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#ef6776;border-color:#ef6776}.btn-link{color:inherit}.btn-link:hover,.btn-link:focus,.btn-link:active,.btn-link.active,.open .dropdown-toggle.btn-link{color:#4e988b;text-decoration:none}.btn-link:active,.btn-link.active,.open .dropdown-toggle.btn-link{background-image:none}.btn-link.disabled,.btn-link.disabled:hover,.btn-link.disabled:focus,.btn-link.disabled:active,.btn-link.disabled.active,.btn-link[disabled],.btn-link[disabled]:hover,.btn-link[disabled]:focus,.btn-link[disabled]:active,.btn-link.active[disabled],fieldset[disabled] .btn-link,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:active,fieldset[disabled] .btn-link.active{color:#cacaca}.btn-white{color:inherit;background:white;border:1px solid #e7eaec}.btn-white:hover,.btn-white:focus,.btn-white:active,.btn-white.active,.open .dropdown-toggle.btn-white,.btn-white:active:focus,.btn-white:active:hover,.btn-white.active:hover,.btn-white.active:focus{color:inherit;border:1px solid #d2d2d2}.btn-white:active,.btn-white.active{box-shadow:0 2px 5px rgba(0,0,0,0.15) inset}.btn-white:active,.btn-white.active,.open .dropdown-toggle.btn-white{background-image:none}.btn-white.disabled,.btn-white.disabled:hover,.btn-white.disabled:focus,.btn-white.disabled:active,.btn-white.disabled.active,.btn-white[disabled],.btn-white[disabled]:hover,.btn-white[disabled]:focus,.btn-white[disabled]:active,.btn-white.active[disabled],fieldset[disabled] .btn-white,fieldset[disabled] .btn-white:hover,fieldset[disabled] .btn-white:focus,fieldset[disabled] .btn-white:active,fieldset[disabled] .btn-white.active{color:#cacaca}.form-control,.grv-file-transfer .grv-file-transfer-input,.form-control:focus,.grv-file-transfer .grv-file-transfer-input:focus,.has-error .form-control:focus,.has-error .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .has-error .grv-file-transfer-input:focus,.has-success .form-control:focus,.has-success .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .has-success .grv-file-transfer-input:focus,.has-warning .form-control:focus,.has-warning .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .has-warning .grv-file-transfer-input:focus,.navbar-collapse,.navbar-form,.navbar-form-custom .form-control:focus,.navbar-form-custom .grv-file-transfer .grv-file-transfer-input:focus,.grv-file-transfer .navbar-form-custom .grv-file-transfer-input:focus,.navbar-form-custom .form-control:hover,.navbar-form-custom .grv-file-transfer .grv-file-transfer-input:hover,.grv-file-transfer .navbar-form-custom .grv-file-transfer-input:hover,.open .btn.dropdown-toggle,.panel,.popover,.progress,.progress-bar{box-shadow:none}.btn-outline{color:inherit;background-color:transparent;transition:all .5s}.btn-rounded{border-radius:50px}.btn-large-dim{width:90px;height:90px;font-size:42px}button.dim{display:inline-block;text-decoration:none;text-transform:uppercase;text-align:center;padding-top:6px;margin-right:10px;position:relative;cursor:pointer;border-radius:5px;font-weight:600;margin-bottom:20px !important}button.dim:active{top:3px}button.btn-primary.dim{box-shadow:inset 0 0 0 #448479,0 5px 0 0 #448479,0 10px 5px #999}button.btn-primary.dim:active{box-shadow:inset 0 0 0 #448479,0 2px 0 0 #448479,0 5px 3px #999}button.btn-default.dim{box-shadow:inset 0 0 0 #b3b3b3,0 5px 0 0 #b3b3b3,0 10px 5px #999}button.btn-default.dim:active{box-shadow:inset 0 0 0 #b3b3b3,0 2px 0 0 #b3b3b3,0 5px 3px #999}button.btn-warning.dim{box-shadow:inset 0 0 0 #e08600,0 5px 0 0 #e08600,0 10px 5px #999}button.btn-warning.dim:active{box-shadow:inset 0 0 0 #e08600,0 2px 0 0 #e08600,0 5px 3px #999}button.btn-info.dim{box-shadow:inset 0 0 0 #448479,0 5px 0 0 #448479,0 10px 5px #999}button.btn-info.dim:active{box-shadow:inset 0 0 0 #448479,0 2px 0 0 #448479,0 5px 3px #999}button.btn-success.dim{box-shadow:inset 0 0 0 #45799a,0 5px 0 0 #45799a,0 10px 5px #999}button.btn-success.dim:active{box-shadow:inset 0 0 0 #45799a,0 2px 0 0 #45799a,0 5px 3px #999}button.btn-danger.dim{box-shadow:inset 0 0 0 #ea394c,0 5px 0 0 #ea394c,0 10px 5px #999}button.btn-danger.dim:active{box-shadow:inset 0 0 0 #ea394c,0 2px 0 0 #ea394c,0 5px 3px #999}button.dim:before{font-size:50px;line-height:1em;font-weight:normal;color:#fff;display:block;padding-top:10px}button.dim:active:before{top:7px;font-size:50px}.btn:focus{outline:none !important}.inline{display:inline-block !important}.input-s-sm{width:120px}.input-s{width:200px}.input-s-lg{width:250px}.form-control,.grv-file-transfer .grv-file-transfer-input,.single-line{background-color:#FFFFFF;background-image:none;border:1px solid #e5e6e7;border-radius:1px;color:inherit;display:block;padding:6px 12px;transition:border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;width:100%;font-size:14px}.form-control:focus,.grv-file-transfer .grv-file-transfer-input:focus,.single-line:focus{border-color:#4e988b !important}.input-group-addon{background-color:#fff;border:1px solid #E5E6E7;border-radius:1px;color:inherit;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}label.error,label.grv-invite-login-error{color:#cc5965;display:inline-block;margin-left:5px}.form-control.error,.form-control.grv-invite-login-error,.grv-file-transfer .grv-invite-login-error.grv-file-transfer-input,.grv-file-transfer .error.grv-file-transfer-input{border:1px dotted #cc5965}.dropdown-menu{border:medium none;border-radius:3px;box-shadow:0 0 3px rgba(86,96,117,0.7);display:none;float:left;font-size:13px;left:0;list-style:none outside none;padding:0;position:absolute;text-shadow:none;top:100%;z-index:1000}.dropdown-menu>li>a{border-radius:3px;color:inherit;line-height:25px;margin:4px;text-align:left;font-weight:normal}body{font-family:-apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";background-color:#2f4050;font-size:14px;color:#4d4d4d;overflow-x:hidden}html,body{height:100%}body.full-height-layout #wrapper,body.full-height-layout #page-wrapper{height:100%}#page-wrapper{min-height:auto}body.boxed-layout #wrapper{background-color:#2f4050;max-width:1200px;margin:0 auto;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,0.75);-moz-box-shadow:0 0 5px 0 rgba(0,0,0,0.75);box-shadow:0 0 5px 0 rgba(0,0,0,0.75)}.top-navigation.boxed-layout #wrapper,.boxed-layout #wrapper.top-navigation{max-width:1300px !important}.block{display:block}.clear{display:block;overflow:hidden}a{cursor:pointer}a:hover,a:focus{text-decoration:none}.border-bottom{border-bottom:1px solid #e7eaec !important}.font-bold{font-weight:600}.font-noraml{font-weight:400}.text-uppercase,.initialism{text-transform:uppercase}.b-r{border-right:1px solid #e7eaec}.hr-line-dashed{border-top:1px dashed #e7eaec;color:#ffffff;background-color:#ffffff;height:1px;margin:20px 0}.hr-line-solid{border-bottom:1px solid #e7eaec;background-color:rgba(0,0,0,0);border-style:solid !important;margin-top:15px;margin-bottom:15px}.modal-content{background-clip:padding-box;background-color:#FFFFFF;border:1px solid rgba(0,0,0,0);border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,0.3);outline:0 none;position:relative}.modal-dialog{z-index:2200}.modal-body{padding:20px 30px 30px 30px}.inmodal .modal-body{background:#f8fafb}.inmodal .modal-header{padding:30px 15px;text-align:center}.animated.modal.fade .modal-dialog{-webkit-transform:none;-ms-transform:none;-o-transform:none;transform:none}.inmodal .modal-title{font-size:26px}.inmodal .modal-icon{font-size:84px;color:#e2e3e3}.modal-footer{margin-top:0}#wrapper{width:100%;overflow-x:hidden}.wrapper{padding:0 20px}.wrapper-content{padding:20px 10px 40px}#page-wrapper{padding:0 15px;min-height:568px;position:relative !important}@media (min-width: 768px){#page-wrapper{position:inherit;margin:0 0 0 240px;min-height:2002px}}ul.unstyled,ol.unstyled{list-style:none outside none;margin-left:0}.page-heading{border-top:0;padding:0 10px 20px 10px}.panel-heading h1,.panel-heading h2{margin-bottom:5px}.table-bordered{border:1px solid #EBEBEB}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{background-color:#F5F5F6;border-bottom-width:1px}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #e7e7e7}.table>thead>tr>th{border-bottom:1px solid #DDDDDD;vertical-align:bottom}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #e7eaec;line-height:1.42857;padding:8px;vertical-align:top}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;background:none;border-color:#ddd #ddd rgba(0,0,0,0);border-bottom:#6f6f6f;border-image:none;border-style:solid;border-width:1px;color:#555555;cursor:default}.nav.nav-tabs li{background:none;border:none}.nav-tabs>li>a{color:#A7B1C2;font-weight:600;padding:10px 20px 10px 25px}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{background-color:#e6e6e6;color:#4d4d4d}.ui-tab .tab-content{padding:20px 0}.no-padding{padding:0 !important}.no-borders{border:none !important}.no-margins{margin:0 !important}.no-top-border{border-top:0 !important}.border-left-right{border-left:1px solid #e7eaec;border-right:1px solid #e7eaec;border-top:none;border-bottom:none}.border-left{border-left:1px solid #e7eaec;border-right:none;border-top:none;border-bottom:none}.border-right{border-left:none;border-right:1px solid #e7eaec;border-top:none;border-bottom:none}.full-width{width:100% !important}code{background-color:#F9F2F4;border-radius:4px;color:#ca4440;font-size:90%;padding:2px 4px;white-space:nowrap}.gray-bg{background-color:#6f6f6f}.white-bg{background-color:#ffffff}.navy-bg{background-color:#4e988b;color:#ffffff}.blue-bg{background-color:#4f8aaf;color:#ffffff}.lazur-bg{background-color:#4e988b;color:#ffffff}.yellow-bg{background-color:#FF9800;color:#ffffff}.red-bg{background-color:#ED5565;color:#ffffff}.black-bg{background-color:#262626}.text-navy{color:#4e988b}.text-primary{color:inherit}.text-success{color:#4f8aaf}.text-info{color:#4e988b}.text-warning{color:#FF9800}.text-danger{color:#ED5565}.text-muted,.grv-invite-login-error .grv-invite-login-error-u2f-codes{color:#888888}.text-white{color:#ffffff}.img-shadow{-webkit-box-shadow:0 0 3px 0 #919191;-moz-box-shadow:0 0 3px 0 #919191;box-shadow:0 0 3px 0 #919191}.full-height{height:100%}.modal-backdrop{z-index:2040 !important}.modal{z-index:2050 !important}.p-xxs{padding:5px}.p-xs{padding:10px}.p-sm{padding:15px}.p-m{padding:20px}.p-md{padding:25px}.p-lg{padding:30px}.p-xl{padding:40px}.p-w-xs{padding:0 10px}.p-w-sm{padding:0 15px}.p-w-m{padding:0 20px}.p-w-md{padding:0 25px}.p-w-lg{padding:0 30px}.p-w-xl{padding:0 40px}.m-xxs{margin:2px 4px}.m-xs{margin:5px}.m-sm{margin:10px}.m{margin:15px}.m-md{margin:20px}.m-lg{margin:30px}.m-xl{margin:50px}.m-n{margin:0 !important}.m-l-none{margin-left:0}.m-l-xs{margin-left:5px}.m-l-sm{margin-left:10px}.m-l{margin-left:15px}.m-l-md{margin-left:20px}.m-l-lg{margin-left:30px}.m-l-xl{margin-left:40px}.m-l-n-xxs{margin-left:-1px}.m-l-n-xs{margin-left:-5px}.m-l-n-sm{margin-left:-10px}.m-l-n{margin-left:-15px}.m-l-n-md{margin-left:-20px}.m-l-n-lg{margin-left:-30px}.m-l-n-xl{margin-left:-40px}.m-t-none{margin-top:0}.m-t-xxs{margin-top:1px}.m-t-xs{margin-top:5px}.m-t-sm,.grv-invite-login-error .grv-invite-login-error-u2f-codes{margin-top:10px}.m-t{margin-top:15px}.m-t-md{margin-top:20px}.m-t-lg{margin-top:30px}.m-t-xl{margin-top:40px}.m-t-n-xxs{margin-top:-1px}.m-t-n-xs{margin-top:-5px}.m-t-n-sm{margin-top:-10px}.m-t-n{margin-top:-15px}.m-t-n-md{margin-top:-20px}.m-t-n-lg{margin-top:-30px}.m-t-n-xl{margin-top:-40px}.m-r-none{margin-right:0}.m-r-xxs{margin-right:1px}.m-r-xs{margin-right:5px}.m-r-sm{margin-right:10px}.m-r{margin-right:15px}.m-r-md{margin-right:20px}.m-r-lg{margin-right:30px}.m-r-xl{margin-right:40px}.m-r-n-xxs{margin-right:-1px}.m-r-n-xs{margin-right:-5px}.m-r-n-sm{margin-right:-10px}.m-r-n{margin-right:-15px}.m-r-n-md{margin-right:-20px}.m-r-n-lg{margin-right:-30px}.m-r-n-xl{margin-right:-40px}.m-b-none{margin-bottom:0}.m-b-xxs{margin-bottom:1px}.m-b-xs{margin-bottom:5px}.m-b-sm{margin-bottom:10px}.m-b{margin-bottom:15px}.m-b-md{margin-bottom:20px}.m-b-lg{margin-bottom:30px}.m-b-xl{margin-bottom:40px}.m-b-n-xxs{margin-bottom:-1px}.m-b-n-xs{margin-bottom:-5px}.m-b-n-sm{margin-bottom:-10px}.m-b-n{margin-bottom:-15px}.m-b-n-md{margin-bottom:-20px}.m-b-n-lg{margin-bottom:-30px}.m-b-n-xl{margin-bottom:-40px}.space-15{margin:15px 0}.space-20{margin:20px 0}.space-25{margin:25px 0}.space-30{margin:30px 0}.sk-spinner-rotating-plane.sk-spinner{width:30px;height:30px;background-color:#4e988b;margin:0 auto;-webkit-animation:sk-rotatePlane 1.2s infinite ease-in-out;animation:sk-rotatePlane 1.2s infinite ease-in-out}@-webkit-keyframes sk-rotatePlane{0%{-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg);transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg);transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}@keyframes sk-rotatePlane{0%{-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg);transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg);transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.sk-spinner-double-bounce.sk-spinner{width:40px;height:40px;position:relative;margin:0 auto}.sk-spinner-double-bounce .sk-double-bounce1,.sk-spinner-double-bounce .sk-double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#4e988b;opacity:0.6;position:absolute;top:0;left:0;-webkit-animation:sk-doubleBounce 2s infinite ease-in-out;animation:sk-doubleBounce 2s infinite ease-in-out}.sk-spinner-double-bounce .sk-double-bounce2{-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-doubleBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-doubleBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.sk-spinner-wave.sk-spinner{margin:0 auto;width:50px;height:30px;text-align:center;font-size:10px}.sk-spinner-wave div{background-color:#4e988b;height:100%;width:6px;display:inline-block;-webkit-animation:sk-waveStretchDelay 1.2s infinite ease-in-out;animation:sk-waveStretchDelay 1.2s infinite ease-in-out}.sk-spinner-wave .sk-rect2{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-spinner-wave .sk-rect3{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-spinner-wave .sk-rect4{-webkit-animation-delay:-0.9s;animation-delay:-0.9s}.sk-spinner-wave .sk-rect5{-webkit-animation-delay:-0.8s;animation-delay:-0.8s}@-webkit-keyframes sk-waveStretchDelay{0%,40%,100%{-webkit-transform:scaleY(0.4);transform:scaleY(0.4)}20%{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes sk-waveStretchDelay{0%,40%,100%{-webkit-transform:scaleY(0.4);transform:scaleY(0.4)}20%{-webkit-transform:scaleY(1);transform:scaleY(1)}}.sk-spinner-wandering-cubes.sk-spinner{margin:0 auto;width:32px;height:32px;position:relative}.sk-spinner-wandering-cubes .sk-cube1,.sk-spinner-wandering-cubes .sk-cube2{background-color:#4e988b;width:10px;height:10px;position:absolute;top:0;left:0;-webkit-animation:sk-wanderingCubeMove 1.8s infinite ease-in-out;animation:sk-wanderingCubeMove 1.8s infinite ease-in-out}.sk-spinner-wandering-cubes .sk-cube2{-webkit-animation-delay:-0.9s;animation-delay:-0.9s}@-webkit-keyframes sk-wanderingCubeMove{25%{-webkit-transform:translateX(42px) rotate(-90deg) scale(0.5);transform:translateX(42px) rotate(-90deg) scale(0.5)}50%{-webkit-transform:translateX(42px) translateY(42px) rotate(-179deg);transform:translateX(42px) translateY(42px) rotate(-179deg)}50.1%{-webkit-transform:translateX(42px) translateY(42px) rotate(-180deg);transform:translateX(42px) translateY(42px) rotate(-180deg)}75%{-webkit-transform:translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);transform:translateX(0px) translateY(42px) rotate(-270deg) scale(0.5)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes sk-wanderingCubeMove{25%{-webkit-transform:translateX(42px) rotate(-90deg) scale(0.5);transform:translateX(42px) rotate(-90deg) scale(0.5)}50%{-webkit-transform:translateX(42px) translateY(42px) rotate(-179deg);transform:translateX(42px) translateY(42px) rotate(-179deg)}50.1%{-webkit-transform:translateX(42px) translateY(42px) rotate(-180deg);transform:translateX(42px) translateY(42px) rotate(-180deg)}75%{-webkit-transform:translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);transform:translateX(0px) translateY(42px) rotate(-270deg) scale(0.5)}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.sk-spinner-pulse.sk-spinner{width:40px;height:40px;margin:0 auto;background-color:#4e988b;border-radius:100%;-webkit-animation:sk-pulseScaleOut 1s infinite ease-in-out;animation:sk-pulseScaleOut 1s infinite ease-in-out}@-webkit-keyframes sk-pulseScaleOut{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}@keyframes sk-pulseScaleOut{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.sk-spinner-chasing-dots.sk-spinner{margin:0 auto;width:40px;height:40px;position:relative;text-align:center;-webkit-animation:sk-chasingDotsRotate 2s infinite linear;animation:sk-chasingDotsRotate 2s infinite linear}.sk-spinner-chasing-dots .sk-dot1,.sk-spinner-chasing-dots .sk-dot2{width:60%;height:60%;display:inline-block;position:absolute;top:0;background-color:#4e988b;border-radius:100%;-webkit-animation:sk-chasingDotsBounce 2s infinite ease-in-out;animation:sk-chasingDotsBounce 2s infinite ease-in-out}.sk-spinner-chasing-dots .sk-dot2{top:auto;bottom:0;-webkit-animation-delay:-1s;animation-delay:-1s}@-webkit-keyframes sk-chasingDotsRotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes sk-chasingDotsRotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes sk-chasingDotsBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-chasingDotsBounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1)}}.sk-spinner-three-bounce.sk-spinner{margin:0 auto;width:70px;text-align:center}.sk-spinner-three-bounce div{width:18px;height:18px;background-color:#4e988b;border-radius:100%;display:inline-block;-webkit-animation:sk-threeBounceDelay 1.4s infinite ease-in-out;animation:sk-threeBounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.sk-spinner-three-bounce .sk-bounce1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.sk-spinner-three-bounce .sk-bounce2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}@-webkit-keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.sk-spinner-circle.sk-spinner{margin:0 auto;width:22px;height:22px;position:relative}.sk-spinner-circle .sk-circle{width:100%;height:100%;position:absolute;left:0;top:0}.sk-spinner-circle .sk-circle:before{content:'';display:block;margin:0 auto;width:20%;height:20%;background-color:#4e988b;border-radius:100%;-webkit-animation:sk-circleBounceDelay 1.2s infinite ease-in-out;animation:sk-circleBounceDelay 1.2s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.sk-spinner-circle .sk-circle2{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);transform:rotate(30deg)}.sk-spinner-circle .sk-circle3{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg)}.sk-spinner-circle .sk-circle4{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.sk-spinner-circle .sk-circle5{-webkit-transform:rotate(120deg);-ms-transform:rotate(120deg);transform:rotate(120deg)}.sk-spinner-circle .sk-circle6{-webkit-transform:rotate(150deg);-ms-transform:rotate(150deg);transform:rotate(150deg)}.sk-spinner-circle .sk-circle7{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.sk-spinner-circle .sk-circle8{-webkit-transform:rotate(210deg);-ms-transform:rotate(210deg);transform:rotate(210deg)}.sk-spinner-circle .sk-circle9{-webkit-transform:rotate(240deg);-ms-transform:rotate(240deg);transform:rotate(240deg)}.sk-spinner-circle .sk-circle10{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.sk-spinner-circle .sk-circle11{-webkit-transform:rotate(300deg);-ms-transform:rotate(300deg);transform:rotate(300deg)}.sk-spinner-circle .sk-circle12{-webkit-transform:rotate(330deg);-ms-transform:rotate(330deg);transform:rotate(330deg)}.sk-spinner-circle .sk-circle2:before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-spinner-circle .sk-circle3:before{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-spinner-circle .sk-circle4:before{-webkit-animation-delay:-0.9s;animation-delay:-0.9s}.sk-spinner-circle .sk-circle5:before{-webkit-animation-delay:-0.8s;animation-delay:-0.8s}.sk-spinner-circle .sk-circle6:before{-webkit-animation-delay:-0.7s;animation-delay:-0.7s}.sk-spinner-circle .sk-circle7:before{-webkit-animation-delay:-0.6s;animation-delay:-0.6s}.sk-spinner-circle .sk-circle8:before{-webkit-animation-delay:-0.5s;animation-delay:-0.5s}.sk-spinner-circle .sk-circle9:before{-webkit-animation-delay:-0.4s;animation-delay:-0.4s}.sk-spinner-circle .sk-circle10:before{-webkit-animation-delay:-0.3s;animation-delay:-0.3s}.sk-spinner-circle .sk-circle11:before{-webkit-animation-delay:-0.2s;animation-delay:-0.2s}.sk-spinner-circle .sk-circle12:before{-webkit-animation-delay:-0.1s;animation-delay:-0.1s}@-webkit-keyframes sk-circleBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-circleBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.sk-spinner-cube-grid.sk-spinner{width:30px;height:30px;margin:0 auto}.sk-spinner-cube-grid .sk-cube{width:33%;height:33%;background-color:#4e988b;float:left;-webkit-animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out;animation:sk-cubeGridScaleDelay 1.3s infinite ease-in-out}.sk-spinner-cube-grid .sk-cube:nth-child(1){-webkit-animation-delay:0.2s;animation-delay:0.2s}.sk-spinner-cube-grid .sk-cube:nth-child(2){-webkit-animation-delay:0.3s;animation-delay:0.3s}.sk-spinner-cube-grid .sk-cube:nth-child(3){-webkit-animation-delay:0.4s;animation-delay:0.4s}.sk-spinner-cube-grid .sk-cube:nth-child(4){-webkit-animation-delay:0.1s;animation-delay:0.1s}.sk-spinner-cube-grid .sk-cube:nth-child(5){-webkit-animation-delay:0.2s;animation-delay:0.2s}.sk-spinner-cube-grid .sk-cube:nth-child(6){-webkit-animation-delay:0.3s;animation-delay:0.3s}.sk-spinner-cube-grid .sk-cube:nth-child(7){-webkit-animation-delay:0s;animation-delay:0s}.sk-spinner-cube-grid .sk-cube:nth-child(8){-webkit-animation-delay:0.1s;animation-delay:0.1s}.sk-spinner-cube-grid .sk-cube:nth-child(9){-webkit-animation-delay:0.2s;animation-delay:0.2s}@-webkit-keyframes sk-cubeGridScaleDelay{0%,70%,100%{-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}35%{-webkit-transform:scale3D(0, 0, 1);transform:scale3D(0, 0, 1)}}@keyframes sk-cubeGridScaleDelay{0%,70%,100%{-webkit-transform:scale3D(1, 1, 1);transform:scale3D(1, 1, 1)}35%{-webkit-transform:scale3D(0, 0, 1);transform:scale3D(0, 0, 1)}}.sk-spinner-wordpress.sk-spinner{background-color:#4e988b;width:30px;height:30px;border-radius:30px;position:relative;margin:0 auto;-webkit-animation:sk-innerCircle 1s linear infinite;animation:sk-innerCircle 1s linear infinite}.sk-spinner-wordpress .sk-inner-circle{display:block;background-color:#fff;width:8px;height:8px;position:absolute;border-radius:8px;top:5px;left:5px}@-webkit-keyframes sk-innerCircle{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes sk-innerCircle{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.sk-spinner-fading-circle.sk-spinner{margin:0 auto;width:22px;height:22px;position:relative}.sk-spinner-fading-circle .sk-circle{width:100%;height:100%;position:absolute;left:0;top:0}.sk-spinner-fading-circle .sk-circle:before{content:'';display:block;margin:0 auto;width:18%;height:18%;background-color:#4e988b;border-radius:100%;-webkit-animation:sk-circleFadeDelay 1.2s infinite ease-in-out;animation:sk-circleFadeDelay 1.2s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.sk-spinner-fading-circle .sk-circle2{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);transform:rotate(30deg)}.sk-spinner-fading-circle .sk-circle3{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg)}.sk-spinner-fading-circle .sk-circle4{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.sk-spinner-fading-circle .sk-circle5{-webkit-transform:rotate(120deg);-ms-transform:rotate(120deg);transform:rotate(120deg)}.sk-spinner-fading-circle .sk-circle6{-webkit-transform:rotate(150deg);-ms-transform:rotate(150deg);transform:rotate(150deg)}.sk-spinner-fading-circle .sk-circle7{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.sk-spinner-fading-circle .sk-circle8{-webkit-transform:rotate(210deg);-ms-transform:rotate(210deg);transform:rotate(210deg)}.sk-spinner-fading-circle .sk-circle9{-webkit-transform:rotate(240deg);-ms-transform:rotate(240deg);transform:rotate(240deg)}.sk-spinner-fading-circle .sk-circle10{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.sk-spinner-fading-circle .sk-circle11{-webkit-transform:rotate(300deg);-ms-transform:rotate(300deg);transform:rotate(300deg)}.sk-spinner-fading-circle .sk-circle12{-webkit-transform:rotate(330deg);-ms-transform:rotate(330deg);transform:rotate(330deg)}.sk-spinner-fading-circle .sk-circle2:before{-webkit-animation-delay:-1.1s;animation-delay:-1.1s}.sk-spinner-fading-circle .sk-circle3:before{-webkit-animation-delay:-1s;animation-delay:-1s}.sk-spinner-fading-circle .sk-circle4:before{-webkit-animation-delay:-0.9s;animation-delay:-0.9s}.sk-spinner-fading-circle .sk-circle5:before{-webkit-animation-delay:-0.8s;animation-delay:-0.8s}.sk-spinner-fading-circle .sk-circle6:before{-webkit-animation-delay:-0.7s;animation-delay:-0.7s}.sk-spinner-fading-circle .sk-circle7:before{-webkit-animation-delay:-0.6s;animation-delay:-0.6s}.sk-spinner-fading-circle .sk-circle8:before{-webkit-animation-delay:-0.5s;animation-delay:-0.5s}.sk-spinner-fading-circle .sk-circle9:before{-webkit-animation-delay:-0.4s;animation-delay:-0.4s}.sk-spinner-fading-circle .sk-circle10:before{-webkit-animation-delay:-0.3s;animation-delay:-0.3s}.sk-spinner-fading-circle .sk-circle11:before{-webkit-animation-delay:-0.2s;animation-delay:-0.2s}.sk-spinner-fading-circle .sk-circle12:before{-webkit-animation-delay:-0.1s;animation-delay:-0.1s}@-webkit-keyframes sk-circleFadeDelay{0%,39%,100%{opacity:0}40%{opacity:1}}@keyframes sk-circleFadeDelay{0%,39%,100%{opacity:0}40%{opacity:1}}.grv-invite-login-error{white-space:pre-wrap}.grv-invite-login-error a{font-weight:normal}.grv-invite-login-error .grv-invite-login-error-u2f-codes{font-weight:normal}.grv-invite{background-color:#2f4050;padding-top:5%;height:100%;width:100%;position:fixed;overflow:auto}.grv-invite .grv-icon-logo-tlpt{height:75px}.grv-invite .grv-invite-content{padding:10px;max-width:350px;z-index:100;margin:0 auto;margin-top:10px;border-radius:6px;background-color:#ffffff}.grv-invite .grv-invite-content.\---with-2fa-data{max-width:600px}.grv-invite .grv-invite-content .grv-invite-input-form{margin-bottom:15px}.grv-invite .grv-invite-content .grv-invite-input-form h3{margin-bottom:20px}.grv-invite .grv-invite-content .grv-invite-barcode{min-width:1px}.grv-invite .grv-invite-content .grv-flex-column{padding:15px}.grv-login{background-color:#2f4050;padding-top:5%;height:100%;width:100%;position:fixed;overflow:auto}.grv-login .grv-icon-logo-tlpt{height:75px}.grv-login .grv-content{padding:10px;max-width:350px;z-index:100;margin:10px auto 30px;border-radius:6px;background-color:#ffffff}.grv-login .grv-content .grv-flex-column{padding:15px}.grv-login .grv-content .grv-login-input-form{margin-bottom:15px}.grv-login .grv-content .grv-login-input-form h3{margin-bottom:20px}.grv-login .grv-content .grv-login-info{text-align:left;position:relative;margin:15px 0 0;padding:0 0 0 60px}.grv-login .grv-content .grv-login-info .fa-question{position:absolute;left:7px;font-size:40px}.grv-user-btn-sso{max-width:400px;text-align:center;margin:0 auto;position:relative}.grv-user-btn-sso:not(:first-child){margin-top:15px}.grv-user-btn-sso.\--unknown .\--sso-icon{display:none}.grv-user-btn-sso .\--sso-icon{position:absolute;left:0;top:0;bottom:0;width:32px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.grv-icon-logo-tlpt{fill:white;height:90px}.grv-icon-close{width:100%;height:100%}.grv-icon-close use{pointer-events:none}.grv-google-auth{text-align:initial;position:relative;margin:25px 0 0 0;padding:0 0 0 60px}.grv-google-auth .grv-icon-google-auth{position:absolute;left:0px;height:40px;width:40px;background-size:contain;background-repeat:no-repeat;background-image:url(/web/app/assets/img/img-54ca7c.png)}.grv-icon-user{margin:0 auto;height:30px;width:30px;display:block;background:#1AB394;color:#fff;border-radius:50%;vertical-align:middle;text-align:center;text-transform:uppercase}.grv-icon-user span{line-height:30px;display:block;font-size:14px}.grv-icon-user.\--dark{background:#104137}.grv-table .label{margin:2px;float:left}.grv-table-indicator-sort{margin-left:5px}.grv-table-indicator-sort.fa-sort{color:#A1A3A5}.grv-table-indicator-empty{font-size:17px}.grv-table-header .grv-table-cell a{color:inherit}.grv-alert{padding:10px;border:1px solid transparent;max-height:100px;text-overflow:ellipsis;overflow:auto;text-align:left}.grv-alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1;text-overflow:ellipsis}.grv-alert-info{background-color:#f0f0f0;text-overflow:ellipsis}.grv-alert-success{background-color:#f0f0f0;color:#0D5849;text-overflow:ellipsis}.grv-nodes .grv-header{align-items:center}.grv-nodes .grv-nodes-custom-login{padding:2px}.grv-nodes .grv-nodes-custom-login input{border-radius:0}.grv-nodes .grv-nodes-table .grv-nodes-table-login{text-align:end}.grv-nodes .grv-nodes-table tbody>tr>td{vertical-align:middle}.grv-nodes .grv-nodes-table .grv-table-paged-info{float:right}.grv-nodes .grv-nodes-table .grv-table-paged-info:first-child{margin-top:20px}.grv-nodes .grv-nodes-table .grv-nodes-table-label{margin-right:5px;max-width:100%;font-size:12px;font-weight:100;padding:3px 6px;text-shadow:none;color:#4d4d4d;background-color:#d1dade;display:inline;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:3px;max-width:200px;overflow:hidden;text-overflow:ellipsis}.grv-nodes .grv-nodes-table .grv-nodes-table-label .fa-long-arrow-right{font-size:10px}.grv-sessions h1{text-align:center}.grv-sessions .grv-calendar-nav{font-size:14px;text-align:center;min-width:200px}.grv-sessions h1{margin-bottom:25px}.grv-sessions .grv-divider{margin-top:25px;margin-bottom:25px}.grv-sessions .grv-header{margin-bottom:20px}.grv-sessions .grv-header h2{margin:0}.grv-sessions .grv-header .grv-flex{align-items:center}.grv-sessions .grv-footer{padding:15px 0 45px 0;text-align:center}.grv-sessions-user{margin-left:5px}.grv-sessions-stored{position:relative}.grv-sessions-stored .grv-sessions-stored-details{max-width:300px;width:300px;text-align:center}.grv-sessions-stored-col-ip{min-width:90px}.grv-sessions-col-sid{min-width:100px}.grv-nav{background-color:#2f4050;max-width:70px;overflow:hidden}.grv-nav .nav>li.active{border:none;background-color:#293846}.grv-nav .nav li a{color:#a7b1c2;font-weight:600;padding:14px 20px 14px 25px}.grv-nav .nav li a:focus,.grv-nav .nav li a:hover{background-color:#293846;color:#fff}.grv-nav .nav li a i{margin-right:6px}.grv-nav .nav li:first-child{margin:20px 0 15px 0}.grv-nav .nav .fa{font-size:20px}.grv-terminalhost-indicator-error{justify-content:center;display:flex;align-items:center;color:#f3f3f3;height:100%;margin-top:-25px;margin:0 auto;max-width:600px}.grv-terminalhost{padding:40px 25px 10px 90px;position:fixed;height:100%;width:100%;display:block;background-color:#252323;z-index:1}.grv-terminal-actions{margin-left:-70px;width:50px;position:absolute;display:flex;height:calc(100% - 60px);flex-direction:column}.grv-terminal-actions .grv-terminal-actions-files{align-self:center;padding-top:15px}.grv-terminal-actions .grv-terminal-actions-files.\--isOpen .grv-terminal-actions-files-btn{opacity:0.5;cursor:not-allowed}.grv-terminal-actions .grv-terminal-actions-files .grv-terminal-actions-files-btn{border-radius:20px;width:30px;height:30px;background-color:#4e988b;color:white;display:flex;align-Items:center;justify-content:center}.grv-terminal-actions .grv-terminal-actions-files .grv-terminal-actions-files-btn:hover{background-color:#45877c}.grv-terminal-actions .grv-terminal-actions-participans{flex:1}.grv-terminal-actions .grv-icon-close{fill:#ED5565}.grv-terminal-actions .grv-icon-close:hover{fill:#ec4c5d;cursor:pointer}.grv-terminal-actions .grv-divider{background-color:#3B3838;border-color:#3B3838}.grv-terminalhost-server-info{height:30px;margin-top:-35px;text-align:center;overflow:hidden;color:#919191}.grv-terminalhost-server-info span{margin-left:5px}.grv-terminalhost-server-info .btn{padding:0 10px;margin-bottom:5px}.grv-msg-page{margin:25px auto;max-width:600px;text-align:center}.grv-msg-page h1{margin:0}.grv-msg-page .grv-icon-logo-tlpt{fill:#293846}.grv-msg-page .grv-header{font-size:60px}.grv-msg-page .contact-section{margin-top:20px}.grv-slider{height:30px;padding:3px}.grv-slider .bar{height:5px}.grv-slider .handle{width:14px;height:14px;left:-10px;top:-4px;z-index:1;border-radius:14px;background:#FFF;box-shadow:inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB}.grv-slider .bar-0{background:none repeat scroll 0 0 #bbbbbb;box-shadow:none}.grv-slider .bar-1{background-color:#333}.grv-session-player{padding:15px 25px 50px 90px}.grv-session-player .grv-terminal{overflow:hidden;position:relative;height:100%}.grv-session-player .ps-container:hover>.ps-scrollbar-x-rail:hover,.grv-session-player .ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#676a6c}.grv-session-player .ps-container>.ps-scrollbar-y-rail{width:0}.grv-session-player .ps-container>.ps-scrollbar-x-rail{height:0}.grv-session-player .grv-session-player-content{height:100%}.grv-session-player .grv-session-player-controls{margin-top:10px;display:flex;color:#ddd}.grv-session-player .grv-session-player-controls .grv-flex-column{align-self:center}.grv-session-player .grv-session-player-controls .btn{width:15px;background-color:transparent;padding:0 12px 0 0}.grv-session-player .grv-session-player-controls .btn:focus,.grv-session-player .grv-session-player-controls .btn:hover{color:#ddd}.grv-session-player .grv-session-player-controls .grv-session-player-controls-time{min-width:40px;margin:2px 10px 0 7px;display:block;font-family:"Droid Sans Mono","Andale Mono",Consolas,monospace}.grv-session-player .grv-session-player-controls .grv-slider{display:block;height:10px;padding:0;margin-top:4px}.grv-session-player .grv-session-player-actions{margin-left:-70px;width:50px;position:absolute;display:flex;height:calc(100% - 60px);flex-direction:column}.grv-session-player .grv-session-player-actions .grv-icon-close{fill:#ED5565}.grv-session-player .grv-session-player-actions .grv-icon-close:hover{fill:#ec4c5d;cursor:pointer}.grv-session-player .grv-session-player-actions .grv-divider{background-color:#3B3838;border-color:#3B3838}.grv-terminal{height:100%;width:100%}.grv-terminal .terminal{font-family:"Droid Sans Mono","Andale Mono",Consolas,monospace;border:none;font-size:inherit;line-height:normal}.grv-terminal .terminal .xterm-viewport{overflow-y:hidden;background-color:#252323}.grv-terminal .terminal *{font-weight:normal !important}.\--isLinux .grv-terminal .terminal{font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"}.\--isWin .grv-terminal .terminal{font-family:Consolas,"Courier New",monospace}.\--isMac .grv-terminal .terminal{font-family:Menlo,Monaco,"Courier New",monospace}.grv-dialog-select-node .modal-header{border:none}.grv-dialog-select-node .modal-body{padding-bottom:0}.grv-dialog-select-node .modal-footer{border:none}.toast{width:300px !important}.grv-datepicker.input-daterange{max-width:250px}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{color:#ccc;cursor:default}.datepicker table tr td.active.selected{background-color:#3276b1;border-color:#285e8e}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;font-weight:normal;line-height:1.428571429;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eeeeee;border-width:1px 0;margin-left:-5px;margin-right:-5px}/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url(/web/app/assets/fonts/fontawesome-webfont.eot);src:url(/web/app/assets/fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format("embedded-opentype"),url(/web/app/assets/fonts/fontawesome-webfont.woff2) format("woff2"),url(/web/app/assets/fonts/fontawesome-webfont.woff) format("woff"),url(/web/app/assets/fonts/fontawesome-webfont.ttf) format("truetype"),url(/web/app/assets/fonts/fontawesome-webfont.svg#fontawesomeregular) format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.285714286em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857143em;width:2.142857143em;top:.142857143em;text-align:center}.fa-li.fa-lg{left:-1.857142857em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\F000"}.fa-music:before{content:"\F001"}.fa-search:before{content:"\F002"}.fa-envelope-o:before{content:"\F003"}.fa-heart:before{content:"\F004"}.fa-star:before{content:"\F005"}.fa-star-o:before{content:"\F006"}.fa-user:before{content:"\F007"}.fa-film:before{content:"\F008"}.fa-th-large:before{content:"\F009"}.fa-th:before{content:"\F00A"}.fa-th-list:before{content:"\F00B"}.fa-check:before{content:"\F00C"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\F00D"}.fa-search-plus:before{content:"\F00E"}.fa-search-minus:before{content:"\F010"}.fa-power-off:before{content:"\F011"}.fa-signal:before{content:"\F012"}.fa-gear:before,.fa-cog:before{content:"\F013"}.fa-trash-o:before{content:"\F014"}.fa-home:before{content:"\F015"}.fa-file-o:before{content:"\F016"}.fa-clock-o:before{content:"\F017"}.fa-road:before{content:"\F018"}.fa-download:before{content:"\F019"}.fa-arrow-circle-o-down:before{content:"\F01A"}.fa-arrow-circle-o-up:before{content:"\F01B"}.fa-inbox:before{content:"\F01C"}.fa-play-circle-o:before{content:"\F01D"}.fa-rotate-right:before,.fa-repeat:before{content:"\F01E"}.fa-refresh:before{content:"\F021"}.fa-list-alt:before{content:"\F022"}.fa-lock:before{content:"\F023"}.fa-flag:before{content:"\F024"}.fa-headphones:before{content:"\F025"}.fa-volume-off:before{content:"\F026"}.fa-volume-down:before{content:"\F027"}.fa-volume-up:before{content:"\F028"}.fa-qrcode:before{content:"\F029"}.fa-barcode:before{content:"\F02A"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-book:before{content:"\F02D"}.fa-bookmark:before{content:"\F02E"}.fa-print:before{content:"\F02F"}.fa-camera:before{content:"\F030"}.fa-font:before{content:"\F031"}.fa-bold:before{content:"\F032"}.fa-italic:before{content:"\F033"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-align-left:before{content:"\F036"}.fa-align-center:before{content:"\F037"}.fa-align-right:before{content:"\F038"}.fa-align-justify:before{content:"\F039"}.fa-list:before{content:"\F03A"}.fa-dedent:before,.fa-outdent:before{content:"\F03B"}.fa-indent:before{content:"\F03C"}.fa-video-camera:before{content:"\F03D"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\F03E"}.fa-pencil:before{content:"\F040"}.fa-map-marker:before{content:"\F041"}.fa-adjust:before{content:"\F042"}.fa-tint:before{content:"\F043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\F044"}.fa-share-square-o:before{content:"\F045"}.fa-check-square-o:before{content:"\F046"}.fa-arrows:before{content:"\F047"}.fa-step-backward:before{content:"\F048"}.fa-fast-backward:before{content:"\F049"}.fa-backward:before{content:"\F04A"}.fa-play:before{content:"\F04B"}.fa-pause:before{content:"\F04C"}.fa-stop:before{content:"\F04D"}.fa-forward:before{content:"\F04E"}.fa-fast-forward:before{content:"\F050"}.fa-step-forward:before{content:"\F051"}.fa-eject:before{content:"\F052"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-plus-circle:before{content:"\F055"}.fa-minus-circle:before{content:"\F056"}.fa-times-circle:before{content:"\F057"}.fa-check-circle:before{content:"\F058"}.fa-question-circle:before{content:"\F059"}.fa-info-circle:before{content:"\F05A"}.fa-crosshairs:before{content:"\F05B"}.fa-times-circle-o:before{content:"\F05C"}.fa-check-circle-o:before{content:"\F05D"}.fa-ban:before{content:"\F05E"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrow-down:before{content:"\F063"}.fa-mail-forward:before,.fa-share:before{content:"\F064"}.fa-expand:before{content:"\F065"}.fa-compress:before{content:"\F066"}.fa-plus:before{content:"\F067"}.fa-minus:before{content:"\F068"}.fa-asterisk:before{content:"\F069"}.fa-exclamation-circle:before{content:"\F06A"}.fa-gift:before{content:"\F06B"}.fa-leaf:before{content:"\F06C"}.fa-fire:before{content:"\F06D"}.fa-eye:before{content:"\F06E"}.fa-eye-slash:before{content:"\F070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\F071"}.fa-plane:before{content:"\F072"}.fa-calendar:before{content:"\F073"}.fa-random:before{content:"\F074"}.fa-comment:before{content:"\F075"}.fa-magnet:before{content:"\F076"}.fa-chevron-up:before{content:"\F077"}.fa-chevron-down:before{content:"\F078"}.fa-retweet:before{content:"\F079"}.fa-shopping-cart:before{content:"\F07A"}.fa-folder:before{content:"\F07B"}.fa-folder-open:before{content:"\F07C"}.fa-arrows-v:before{content:"\F07D"}.fa-arrows-h:before{content:"\F07E"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\F080"}.fa-twitter-square:before{content:"\F081"}.fa-facebook-square:before{content:"\F082"}.fa-camera-retro:before{content:"\F083"}.fa-key:before{content:"\F084"}.fa-gears:before,.fa-cogs:before{content:"\F085"}.fa-comments:before{content:"\F086"}.fa-thumbs-o-up:before{content:"\F087"}.fa-thumbs-o-down:before{content:"\F088"}.fa-star-half:before{content:"\F089"}.fa-heart-o:before{content:"\F08A"}.fa-sign-out:before{content:"\F08B"}.fa-linkedin-square:before{content:"\F08C"}.fa-thumb-tack:before{content:"\F08D"}.fa-external-link:before{content:"\F08E"}.fa-sign-in:before{content:"\F090"}.fa-trophy:before{content:"\F091"}.fa-github-square:before{content:"\F092"}.fa-upload:before{content:"\F093"}.fa-lemon-o:before{content:"\F094"}.fa-phone:before{content:"\F095"}.fa-square-o:before{content:"\F096"}.fa-bookmark-o:before{content:"\F097"}.fa-phone-square:before{content:"\F098"}.fa-twitter:before{content:"\F099"}.fa-facebook-f:before,.fa-facebook:before{content:"\F09A"}.fa-github:before,.grv-user-btn-sso.btn-github .\--sso-icon .fa:before{content:"\F09B"}.fa-unlock:before{content:"\F09C"}.fa-credit-card:before{content:"\F09D"}.fa-feed:before,.fa-rss:before{content:"\F09E"}.fa-hdd-o:before{content:"\F0A0"}.fa-bullhorn:before{content:"\F0A1"}.fa-bell:before{content:"\F0F3"}.fa-certificate:before{content:"\F0A3"}.fa-hand-o-right:before{content:"\F0A4"}.fa-hand-o-left:before{content:"\F0A5"}.fa-hand-o-up:before{content:"\F0A6"}.fa-hand-o-down:before{content:"\F0A7"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-globe:before{content:"\F0AC"}.fa-wrench:before{content:"\F0AD"}.fa-tasks:before{content:"\F0AE"}.fa-filter:before{content:"\F0B0"}.fa-briefcase:before{content:"\F0B1"}.fa-arrows-alt:before{content:"\F0B2"}.fa-group:before,.fa-users:before{content:"\F0C0"}.fa-chain:before,.fa-link:before{content:"\F0C1"}.fa-cloud:before{content:"\F0C2"}.fa-flask:before{content:"\F0C3"}.fa-cut:before,.fa-scissors:before{content:"\F0C4"}.fa-copy:before,.fa-files-o:before{content:"\F0C5"}.fa-paperclip:before{content:"\F0C6"}.fa-save:before,.fa-floppy-o:before{content:"\F0C7"}.fa-square:before{content:"\F0C8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\F0C9"}.fa-list-ul:before{content:"\F0CA"}.fa-list-ol:before{content:"\F0CB"}.fa-strikethrough:before{content:"\F0CC"}.fa-underline:before{content:"\F0CD"}.fa-table:before{content:"\F0CE"}.fa-magic:before{content:"\F0D0"}.fa-truck:before{content:"\F0D1"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-square:before{content:"\F0D3"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-plus:before{content:"\F0D5"}.fa-money:before{content:"\F0D6"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-up:before{content:"\F0D8"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-columns:before{content:"\F0DB"}.fa-unsorted:before,.fa-sort:before{content:"\F0DC"}.fa-sort-down:before,.fa-sort-desc:before{content:"\F0DD"}.fa-sort-up:before,.fa-sort-asc:before{content:"\F0DE"}.fa-envelope:before{content:"\F0E0"}.fa-linkedin:before{content:"\F0E1"}.fa-rotate-left:before,.fa-undo:before{content:"\F0E2"}.fa-legal:before,.fa-gavel:before{content:"\F0E3"}.fa-dashboard:before,.fa-tachometer:before{content:"\F0E4"}.fa-comment-o:before{content:"\F0E5"}.fa-comments-o:before{content:"\F0E6"}.fa-flash:before,.fa-bolt:before{content:"\F0E7"}.fa-sitemap:before{content:"\F0E8"}.fa-umbrella:before{content:"\F0E9"}.fa-paste:before,.fa-clipboard:before{content:"\F0EA"}.fa-lightbulb-o:before{content:"\F0EB"}.fa-exchange:before{content:"\F0EC"}.fa-cloud-download:before{content:"\F0ED"}.fa-cloud-upload:before{content:"\F0EE"}.fa-user-md:before{content:"\F0F0"}.fa-stethoscope:before{content:"\F0F1"}.fa-suitcase:before{content:"\F0F2"}.fa-bell-o:before{content:"\F0A2"}.fa-coffee:before{content:"\F0F4"}.fa-cutlery:before{content:"\F0F5"}.fa-file-text-o:before{content:"\F0F6"}.fa-building-o:before{content:"\F0F7"}.fa-hospital-o:before{content:"\F0F8"}.fa-ambulance:before{content:"\F0F9"}.fa-medkit:before{content:"\F0FA"}.fa-fighter-jet:before{content:"\F0FB"}.fa-beer:before{content:"\F0FC"}.fa-h-square:before{content:"\F0FD"}.fa-plus-square:before{content:"\F0FE"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angle-down:before{content:"\F107"}.fa-desktop:before{content:"\F108"}.fa-laptop:before{content:"\F109"}.fa-tablet:before{content:"\F10A"}.fa-mobile-phone:before,.fa-mobile:before{content:"\F10B"}.fa-circle-o:before{content:"\F10C"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-spinner:before{content:"\F110"}.fa-circle:before{content:"\F111"}.fa-mail-reply:before,.fa-reply:before{content:"\F112"}.fa-github-alt:before{content:"\F113"}.fa-folder-o:before{content:"\F114"}.fa-folder-open-o:before{content:"\F115"}.fa-smile-o:before{content:"\F118"}.fa-frown-o:before{content:"\F119"}.fa-meh-o:before{content:"\F11A"}.fa-gamepad:before{content:"\F11B"}.fa-keyboard-o:before{content:"\F11C"}.fa-flag-o:before{content:"\F11D"}.fa-flag-checkered:before{content:"\F11E"}.fa-terminal:before{content:"\F120"}.fa-code:before{content:"\F121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\F122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\F123"}.fa-location-arrow:before{content:"\F124"}.fa-crop:before{content:"\F125"}.fa-code-fork:before{content:"\F126"}.fa-unlink:before,.fa-chain-broken:before{content:"\F127"}.fa-question:before{content:"\F128"}.fa-info:before{content:"\F129"}.fa-exclamation:before{content:"\F12A"}.fa-superscript:before{content:"\F12B"}.fa-subscript:before{content:"\F12C"}.fa-eraser:before{content:"\F12D"}.fa-puzzle-piece:before{content:"\F12E"}.fa-microphone:before{content:"\F130"}.fa-microphone-slash:before{content:"\F131"}.fa-shield:before{content:"\F132"}.fa-calendar-o:before{content:"\F133"}.fa-fire-extinguisher:before{content:"\F134"}.fa-rocket:before{content:"\F135"}.fa-maxcdn:before{content:"\F136"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-html5:before{content:"\F13B"}.fa-css3:before{content:"\F13C"}.fa-anchor:before{content:"\F13D"}.fa-unlock-alt:before{content:"\F13E"}.fa-bullseye:before{content:"\F140"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-rss-square:before{content:"\F143"}.fa-play-circle:before{content:"\F144"}.fa-ticket:before{content:"\F145"}.fa-minus-square:before{content:"\F146"}.fa-minus-square-o:before{content:"\F147"}.fa-level-up:before{content:"\F148"}.fa-level-down:before{content:"\F149"}.fa-check-square:before{content:"\F14A"}.fa-pencil-square:before{content:"\F14B"}.fa-external-link-square:before{content:"\F14C"}.fa-share-square:before{content:"\F14D"}.fa-compass:before{content:"\F14E"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\F150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\F151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\F152"}.fa-euro:before,.fa-eur:before{content:"\F153"}.fa-gbp:before{content:"\F154"}.fa-dollar:before,.fa-usd:before{content:"\F155"}.fa-rupee:before,.fa-inr:before{content:"\F156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\F157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\F158"}.fa-won:before,.fa-krw:before{content:"\F159"}.fa-bitcoin:before,.fa-btc:before{content:"\F15A"}.fa-file:before{content:"\F15B"}.fa-file-text:before{content:"\F15C"}.fa-sort-alpha-asc:before{content:"\F15D"}.fa-sort-alpha-desc:before{content:"\F15E"}.fa-sort-amount-asc:before{content:"\F160"}.fa-sort-amount-desc:before{content:"\F161"}.fa-sort-numeric-asc:before{content:"\F162"}.fa-sort-numeric-desc:before{content:"\F163"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbs-down:before{content:"\F165"}.fa-youtube-square:before{content:"\F166"}.fa-youtube:before{content:"\F167"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-youtube-play:before{content:"\F16A"}.fa-dropbox:before{content:"\F16B"}.fa-stack-overflow:before{content:"\F16C"}.fa-instagram:before{content:"\F16D"}.fa-flickr:before{content:"\F16E"}.fa-adn:before{content:"\F170"}.fa-bitbucket:before,.grv-user-btn-sso.btn-bitbucket .\--sso-icon .fa:before{content:"\F171"}.fa-bitbucket-square:before{content:"\F172"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-long-arrow-down:before{content:"\F175"}.fa-long-arrow-up:before{content:"\F176"}.fa-long-arrow-left:before{content:"\F177"}.fa-long-arrow-right:before{content:"\F178"}.fa-apple:before{content:"\F179"}.fa-windows:before,.grv-user-btn-sso.btn-microsoft .\--sso-icon .fa:before{content:"\F17A"}.fa-android:before{content:"\F17B"}.fa-linux:before{content:"\F17C"}.fa-dribbble:before{content:"\F17D"}.fa-skype:before{content:"\F17E"}.fa-foursquare:before{content:"\F180"}.fa-trello:before{content:"\F181"}.fa-female:before{content:"\F182"}.fa-male:before{content:"\F183"}.fa-gittip:before,.fa-gratipay:before{content:"\F184"}.fa-sun-o:before{content:"\F185"}.fa-moon-o:before{content:"\F186"}.fa-archive:before{content:"\F187"}.fa-bug:before{content:"\F188"}.fa-vk:before{content:"\F189"}.fa-weibo:before{content:"\F18A"}.fa-renren:before{content:"\F18B"}.fa-pagelines:before{content:"\F18C"}.fa-stack-exchange:before{content:"\F18D"}.fa-arrow-circle-o-right:before{content:"\F18E"}.fa-arrow-circle-o-left:before{content:"\F190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\F191"}.fa-dot-circle-o:before{content:"\F192"}.fa-wheelchair:before{content:"\F193"}.fa-vimeo-square:before{content:"\F194"}.fa-turkish-lira:before,.fa-try:before{content:"\F195"}.fa-plus-square-o:before{content:"\F196"}.fa-space-shuttle:before{content:"\F197"}.fa-slack:before{content:"\F198"}.fa-envelope-square:before{content:"\F199"}.fa-wordpress:before{content:"\F19A"}.fa-openid:before,.grv-user-btn-sso.btn-openid .\--sso-icon .fa:before,.grv-user-btn-sso.\--unknown .\--sso-icon .fa:before{content:"\F19B"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\F19C"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\F19D"}.fa-yahoo:before{content:"\F19E"}.fa-google:before,.grv-user-btn-sso.btn-google .\--sso-icon .fa:before{content:"\F1A0"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-square:before{content:"\F1A2"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-stumbleupon:before{content:"\F1A4"}.fa-delicious:before{content:"\F1A5"}.fa-digg:before{content:"\F1A6"}.fa-pied-piper:before{content:"\F1A7"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-drupal:before{content:"\F1A9"}.fa-joomla:before{content:"\F1AA"}.fa-language:before{content:"\F1AB"}.fa-fax:before{content:"\F1AC"}.fa-building:before{content:"\F1AD"}.fa-child:before{content:"\F1AE"}.fa-paw:before{content:"\F1B0"}.fa-spoon:before{content:"\F1B1"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-recycle:before{content:"\F1B8"}.fa-automobile:before,.fa-car:before{content:"\F1B9"}.fa-cab:before,.fa-taxi:before{content:"\F1BA"}.fa-tree:before{content:"\F1BB"}.fa-spotify:before{content:"\F1BC"}.fa-deviantart:before{content:"\F1BD"}.fa-soundcloud:before{content:"\F1BE"}.fa-database:before{content:"\F1C0"}.fa-file-pdf-o:before{content:"\F1C1"}.fa-file-word-o:before{content:"\F1C2"}.fa-file-excel-o:before{content:"\F1C3"}.fa-file-powerpoint-o:before{content:"\F1C4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\F1C5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\F1C6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\F1C7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\F1C8"}.fa-file-code-o:before{content:"\F1C9"}.fa-vine:before{content:"\F1CA"}.fa-codepen:before{content:"\F1CB"}.fa-jsfiddle:before{content:"\F1CC"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\F1CD"}.fa-circle-o-notch:before{content:"\F1CE"}.fa-ra:before,.fa-rebel:before{content:"\F1D0"}.fa-ge:before,.fa-empire:before{content:"\F1D1"}.fa-git-square:before{content:"\F1D2"}.fa-git:before{content:"\F1D3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\F1D4"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-qq:before{content:"\F1D6"}.fa-wechat:before,.fa-weixin:before{content:"\F1D7"}.fa-send:before,.fa-paper-plane:before{content:"\F1D8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\F1D9"}.fa-history:before{content:"\F1DA"}.fa-circle-thin:before{content:"\F1DB"}.fa-header:before{content:"\F1DC"}.fa-paragraph:before{content:"\F1DD"}.fa-sliders:before{content:"\F1DE"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-bomb:before{content:"\F1E2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\F1E3"}.fa-tty:before{content:"\F1E4"}.fa-binoculars:before{content:"\F1E5"}.fa-plug:before{content:"\F1E6"}.fa-slideshare:before{content:"\F1E7"}.fa-twitch:before{content:"\F1E8"}.fa-yelp:before{content:"\F1E9"}.fa-newspaper-o:before{content:"\F1EA"}.fa-wifi:before{content:"\F1EB"}.fa-calculator:before{content:"\F1EC"}.fa-paypal:before{content:"\F1ED"}.fa-google-wallet:before{content:"\F1EE"}.fa-cc-visa:before{content:"\F1F0"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-bell-slash:before{content:"\F1F6"}.fa-bell-slash-o:before{content:"\F1F7"}.fa-trash:before{content:"\F1F8"}.fa-copyright:before{content:"\F1F9"}.fa-at:before{content:"\F1FA"}.fa-eyedropper:before{content:"\F1FB"}.fa-paint-brush:before{content:"\F1FC"}.fa-birthday-cake:before{content:"\F1FD"}.fa-area-chart:before{content:"\F1FE"}.fa-pie-chart:before{content:"\F200"}.fa-line-chart:before{content:"\F201"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-bicycle:before{content:"\F206"}.fa-bus:before{content:"\F207"}.fa-ioxhost:before{content:"\F208"}.fa-angellist:before{content:"\F209"}.fa-cc:before{content:"\F20A"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\F20B"}.fa-meanpath:before{content:"\F20C"}.fa-buysellads:before{content:"\F20D"}.fa-connectdevelop:before{content:"\F20E"}.fa-dashcube:before{content:"\F210"}.fa-forumbee:before{content:"\F211"}.fa-leanpub:before{content:"\F212"}.fa-sellsy:before{content:"\F213"}.fa-shirtsinbulk:before{content:"\F214"}.fa-simplybuilt:before{content:"\F215"}.fa-skyatlas:before{content:"\F216"}.fa-cart-plus:before{content:"\F217"}.fa-cart-arrow-down:before{content:"\F218"}.fa-diamond:before{content:"\F219"}.fa-ship:before{content:"\F21A"}.fa-user-secret:before{content:"\F21B"}.fa-motorcycle:before{content:"\F21C"}.fa-street-view:before{content:"\F21D"}.fa-heartbeat:before{content:"\F21E"}.fa-venus:before{content:"\F221"}.fa-mars:before{content:"\F222"}.fa-mercury:before{content:"\F223"}.fa-intersex:before,.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-venus-double:before{content:"\F226"}.fa-mars-double:before{content:"\F227"}.fa-venus-mars:before{content:"\F228"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-neuter:before{content:"\F22C"}.fa-genderless:before{content:"\F22D"}.fa-facebook-official:before{content:"\F230"}.fa-pinterest-p:before{content:"\F231"}.fa-whatsapp:before{content:"\F232"}.fa-server:before{content:"\F233"}.fa-user-plus:before{content:"\F234"}.fa-user-times:before{content:"\F235"}.fa-hotel:before,.fa-bed:before{content:"\F236"}.fa-viacoin:before{content:"\F237"}.fa-train:before{content:"\F238"}.fa-subway:before{content:"\F239"}.fa-medium:before{content:"\F23A"}.fa-yc:before,.fa-y-combinator:before{content:"\F23B"}.fa-optin-monster:before{content:"\F23C"}.fa-opencart:before{content:"\F23D"}.fa-expeditedssl:before{content:"\F23E"}.fa-battery-4:before,.fa-battery-full:before{content:"\F240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\F241"}.fa-battery-2:before,.fa-battery-half:before{content:"\F242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\F243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\F244"}.fa-mouse-pointer:before{content:"\F245"}.fa-i-cursor:before{content:"\F246"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-sticky-note:before{content:"\F249"}.fa-sticky-note-o:before{content:"\F24A"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-diners-club:before{content:"\F24C"}.fa-clone:before{content:"\F24D"}.fa-balance-scale:before{content:"\F24E"}.fa-hourglass-o:before{content:"\F250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\F251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\F253"}.fa-hourglass:before{content:"\F254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\F255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\F256"}.fa-hand-scissors-o:before{content:"\F257"}.fa-hand-lizard-o:before{content:"\F258"}.fa-hand-spock-o:before{content:"\F259"}.fa-hand-pointer-o:before{content:"\F25A"}.fa-hand-peace-o:before{content:"\F25B"}.fa-trademark:before{content:"\F25C"}.fa-registered:before{content:"\F25D"}.fa-creative-commons:before{content:"\F25E"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-tripadvisor:before{content:"\F262"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-get-pocket:before{content:"\F265"}.fa-wikipedia-w:before{content:"\F266"}.fa-safari:before{content:"\F267"}.fa-chrome:before{content:"\F268"}.fa-firefox:before{content:"\F269"}.fa-opera:before{content:"\F26A"}.fa-internet-explorer:before{content:"\F26B"}.fa-tv:before,.fa-television:before{content:"\F26C"}.fa-contao:before{content:"\F26D"}.fa-500px:before{content:"\F26E"}.fa-amazon:before{content:"\F270"}.fa-calendar-plus-o:before{content:"\F271"}.fa-calendar-minus-o:before{content:"\F272"}.fa-calendar-times-o:before{content:"\F273"}.fa-calendar-check-o:before{content:"\F274"}.fa-industry:before{content:"\F275"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-map-o:before{content:"\F278"}.fa-map:before{content:"\F279"}.fa-commenting:before{content:"\F27A"}.fa-commenting-o:before{content:"\F27B"}.fa-houzz:before{content:"\F27C"}.fa-vimeo:before{content:"\F27D"}.fa-black-tie:before{content:"\F27E"}.fa-fonticons:before{content:"\F280"}.fa-reddit-alien:before{content:"\F281"}.fa-edge:before{content:"\F282"}.fa-credit-card-alt:before{content:"\F283"}.fa-codiepie:before{content:"\F284"}.fa-modx:before{content:"\F285"}.fa-fort-awesome:before{content:"\F286"}.fa-usb:before{content:"\F287"}.fa-product-hunt:before{content:"\F288"}.fa-mixcloud:before{content:"\F289"}.fa-scribd:before{content:"\F28A"}.fa-pause-circle:before{content:"\F28B"}.fa-pause-circle-o:before{content:"\F28C"}.fa-stop-circle:before{content:"\F28D"}.fa-stop-circle-o:before{content:"\F28E"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-hashtag:before{content:"\F292"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-percent:before{content:"\F295"}.grv-settings{padding:0 15px;width:100%;height:100%;margin:0 auto}.grv-settings .grv-line-solid{border-bottom:1px solid #e7eaec;background-color:transparent}.grv-settings .grv-settings-tab{width:100%;margin:10px 0 15px 0;flex:1;display:flex}.grv-settings .grv-settings-header-line-solid{background-color:#e7eaec;height:1px}.grv-settings .grv-alert-danger,.grv-settings .grv-alert-info,.grv-settings .grv-alert-success{padding:5px 10px}.grv-settings .grv-settings-header-menu{padding-left:0;margin:18px 0 0 0;list-style:none;min-width:700px}.grv-settings .grv-settings-header-menu h2{margin:0;padding:0 20px}.grv-settings .grv-settings-header-menu a{color:#919191}.grv-settings .grv-settings-header-menu a:hover{color:#3c3c3c}.grv-settings .grv-settings-header-menu li{display:inline-block;position:relative}.grv-settings .grv-settings-header-menu li .grv-settings-header-line-solid{display:none;position:absolute;width:100%}.grv-settings .grv-settings-header-menu li:first-child{margin-right:20px}.grv-settings .grv-settings-header-menu li:first-child h2{padding:0}.grv-settings .grv-settings-header-menu li.active .grv-settings-header-line-solid{display:block;top:100%;border-bottom:2px solid #4e988b}.grv-settings .grv-settings-header-menu li.active a{color:#3c3c3c}.grv-settings .grv-settings-header-menu li:not(:first-child){margin-left:20px}.grv-file-transfer{position:absolute;max-height:500px;width:600px;background-color:#090B0A;z-index:4;right:0px;color:white;display:flex;flex-direction:column}.grv-file-transfer .grv-file-transfer-btn{color:#28FE14;background-color:#151d20;border-color:#28FE14;border-radius:0}.grv-file-transfer .grv-file-transfer-btn:focus,.grv-file-transfer .grv-file-transfer-btn.focus{color:#28FE14;background-color:#010101;border-color:#0d9201}.grv-file-transfer .grv-file-transfer-btn:hover{color:#28FE14;background-color:#010101;border-color:#13d401}.grv-file-transfer .grv-file-transfer-btn:active,.grv-file-transfer .grv-file-transfer-btn.active,.open>.grv-file-transfer .grv-file-transfer-btn.dropdown-toggle{color:#28FE14;background-color:#010101;background-image:none;border-color:#13d401}.grv-file-transfer .grv-file-transfer-btn:active:hover,.grv-file-transfer .grv-file-transfer-btn:active:focus,.grv-file-transfer .grv-file-transfer-btn:active.focus,.grv-file-transfer .grv-file-transfer-btn.active:hover,.grv-file-transfer .grv-file-transfer-btn.active:focus,.grv-file-transfer .grv-file-transfer-btn.active.focus,.open>.grv-file-transfer .grv-file-transfer-btn.dropdown-toggle:hover,.open>.grv-file-transfer .grv-file-transfer-btn.dropdown-toggle:focus,.open>.grv-file-transfer .grv-file-transfer-btn.dropdown-toggle.focus{color:#28FE14;background-color:#000;border-color:#0d9201}.grv-file-transfer .grv-file-transfer-btn.disabled:hover,.grv-file-transfer .grv-file-transfer-btn.disabled:focus,.grv-file-transfer .grv-file-transfer-btn.disabled.focus,.grv-file-transfer .grv-file-transfer-btn[disabled]:hover,.grv-file-transfer .grv-file-transfer-btn[disabled]:focus,.grv-file-transfer .grv-file-transfer-btn[disabled].focus,fieldset[disabled] .grv-file-transfer .grv-file-transfer-btn:hover,fieldset[disabled] .grv-file-transfer .grv-file-transfer-btn:focus,fieldset[disabled] .grv-file-transfer .grv-file-transfer-btn.focus{background-color:#151d20;border-color:#28FE14}.grv-file-transfer .grv-file-transfer-btn .badge{color:#151d20;background-color:#28FE14}.grv-file-transfer .grv-file-transfer-input{background-color:#151d20;border-color:#020303;color:#28FE14}.grv-file-transfer .grv-file-transfer-input:focus{border-color:#28FE14 !important}.grv-file-transfer .grv-file-transfer-download{display:flex}.grv-file-transfer .grv-file-transfer-text{color:#28FE14}.grv-file-transfer .grv-file-transfer-content{overflow:auto;margin:5px 0 10px 0;overflow:auto;flex:1;max-height:150px}.grv-file-transfer .grv-file-transfer-file-list-cols{display:flex}.grv-file-transfer .grv-file-transfer-file-list-cols :nth-child(1){width:400px}.grv-file-transfer .grv-file-transfer-file-list-cols :nth-child(2){width:100px;text-align:center}.grv-file-transfer .grv-file-transfer-file-list-item{display:flex;margin:0px 0 10px 0}.grv-file-transfer .grv-file-transfer-file-list-item .grv-file-transfer-file-status{text-align:center;width:100px;color:#8e9497}.grv-file-transfer .grv-file-transfer-file-list-item .grv-file-transfer-file-path{width:400px;word-wrap:break-word;word-break:break-all;color:#8e9497}.grv-file-transfer .grv-file-transfer-file-list-item .grv-file-transfer-file-close{width:40px;text-align:center}.grv-file-transfer .grv-file-transfer-file-list-item .grv-file-transfer-file-close a{color:#8e9497;text-decoration:underline}.grv-file-transfer .grv-file-transfer-file-list-item.\--failed .grv-file-transfer-file-path,.grv-file-transfer .grv-file-transfer-file-list-item.\--failed .grv-file-transfer-file-status{color:#ED5565}.grv-file-transfer-upload-selected-files{text-align:center;background-color:#151d20;padding:30px 15px;color:#28FE14}.grv-file-transfer-upload-selected-files a{color:#28FE14;text-decoration:underline}.grv{background-color:white}.grv .grv-tlpt{height:100%}.grv .grv-tlpt h2{font-size:20px}.grv .grv-page{padding:0 5%;display:flex;overflow:auto;flex:1;flex-direction:column}#app{height:100%;height:100%;position:absolute;top:0;bottom:0;width:100%;min-width:600px;display:block;overflow:auto}.grv-rounded{border-radius:10px}.grv-flex{display:flex}.grv-flex-column{flex-direction:column;flex:1}.grv-flex-row{flex-direction:row;flex:1}.grv-search{max-width:200px;float:right}.\--isLinux .grv-sshserver-input input{font-family:"Droid Sans Mono","monospace",monospace,"Droid Sans Fallback"}.\--isWin .grv-sshserver-input input{font-family:Consolas,"Courier New",monospace}.\--isMac .grv-sshserver-input input{font-family:Menlo,Monaco,"Courier New",monospace}.grv-sshserver-input{position:relative;width:300px;float:right}.grv-sshserver-input input{padding-top:7px !important}.grv-sshserver-input .grv-sshserver-input-errors{display:none;font-size:10px}.grv-sshserver-input.\--error .grv-sshserver-input-errors{display:block;position:absolute;color:#cc5965}.grv-clusters-selector{min-width:220px;align-self:flex-end;display:flex;align-items:baseline;justify-content:flex-end}.grv-clusters-selector .grv-dropdown{min-width:120px}.grv-btn-details{display:inline-block;height:12px;padding:0 4px 4px;font-size:12px;font-weight:600;line-height:5px;color:#444d56;text-decoration:none;vertical-align:middle;background:#dfe2e5;border:0;border-radius:1px}.grv-btn-details span{vertical-align:super}.grv-msg-page-details-text{word-break:break-word}.grv-spinner.sk-spinner-three-bounce{z-index:1;position:absolute;top:50%;left:50%}.grv-divider{height:1px;width:40%;display:block;margin:9px auto;background-color:#e5e6e7}.grv-dropdown .grv-dropdown-value{display:flex;align-items:center;justify-content:space-between}.grv-dropdown .grv-dropdown-value .caret{margin-left:5px}.dropdown-menu .divider{margin:3px 0}.dropdown-menu>li>a{margin:0;padding:5px 10px} - diff --git a/web/dist/app/vendor.4fff3bddf7923b758c87.js b/web/dist/app/vendor.4fff3bddf7923b758c87.js deleted file mode 100644 index b2e322b0d3b..00000000000 --- a/web/dist/app/vendor.4fff3bddf7923b758c87.js +++ /dev/null @@ -1,71 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"+3kt":function(t,e,n){"use strict";e.__esModule=!0,e.replaceLocation=e.pushLocation=e.startListener=e.getCurrentLocation=e.go=e.getUserConfirmation=void 0;var r=n("cKUA");Object.defineProperty(e,"getUserConfirmation",{enumerable:!0,get:function(){return r.getUserConfirmation}}),Object.defineProperty(e,"go",{enumerable:!0,get:function(){return r.go}});!function(t){t&&t.__esModule}(n("6DQo"));var i=n("mHnE"),o=n("Ad4u"),a=n("rTRU"),s=n("ZR02");var u=function(){var t=window.location.href,e=t.indexOf("#");return-1===e?"":t.substring(e+1)},l=function(t){var e=window.location.href.indexOf("#");window.location.replace(window.location.href.slice(0,e>=0?e:0)+"#"+t)},c=e.getCurrentLocation=function(t,e){var n=t.decodePath(u()),r=(0,s.getQueryStringValueFromPath)(n,e),o=void 0;r&&(n=(0,s.stripQueryStringValueFromPath)(n,e),o=(0,a.readState)(r));var l=(0,s.parsePath)(n);return l.state=o,(0,i.createLocation)(l,void 0,r)},d=void 0,h=(e.startListener=function(t,e,n){var r=function(){var r=u(),i=e.encodePath(r);if(r!==i)l(i);else{var o=c(e,n);if(d&&o.key&&d.key===o.key)return;d=o,t(o)}},i=u(),a=e.encodePath(i);return i!==a&&l(a),(0,o.addEventListener)(window,"hashchange",r),function(){return(0,o.removeEventListener)(window,"hashchange",r)}},function(t,e,n,r){var i=t.state,o=t.key,u=e.encodePath((0,s.createPath)(t));void 0!==i&&(u=(0,s.addQueryStringValueToPath)(u,n,o),(0,a.saveState)(o,i)),d=t,r(u)});e.pushLocation=function(t,e,n){return h(t,e,n,function(t){u()!==t&&function(t){window.location.hash=t}(t)})},e.replaceLocation=function(t,e,n){return h(t,e,n,function(t){u()!==t&&l(t)})}},"+8Ar":function(t,e,n){"use strict";var r=n("+aGp"),i=/^ms-/;t.exports=function(t){return r(t).replace(i,"-ms-")}},"+Q0w":function(t,e,n){"use strict";t.exports=function(t){try{t.focus()}catch(t){}}},"+RlI":function(t,e,n){"use strict";var r=n("MgzW"),i=n("h2LH"),o=n("j6Hh"),a=n("1LiS");function s(t){var e="transition"+t+"Timeout",n="transition"+t;return function(t){if(t[n]){if(null==t[e])return new Error(e+" wasn't supplied to ReactCSSTransitionGroup: this can cause unreliable animations and won't be supported in a future version of React. See https://fb.me/react-animation-transition-group-timeout for more information.");if("number"!=typeof t[e])return new Error(e+" must be a number (in milliseconds)")}}}var u=i.createClass({displayName:"ReactCSSTransitionGroup",propTypes:{transitionName:a.propTypes.name,transitionAppear:i.PropTypes.bool,transitionEnter:i.PropTypes.bool,transitionLeave:i.PropTypes.bool,transitionAppearTimeout:s("Appear"),transitionEnterTimeout:s("Enter"),transitionLeaveTimeout:s("Leave")},getDefaultProps:function(){return{transitionAppear:!1,transitionEnter:!0,transitionLeave:!0}},_wrapChild:function(t){return i.createElement(a,{name:this.props.transitionName,appear:this.props.transitionAppear,enter:this.props.transitionEnter,leave:this.props.transitionLeave,appearTimeout:this.props.transitionAppearTimeout,enterTimeout:this.props.transitionEnterTimeout,leaveTimeout:this.props.transitionLeaveTimeout},t)},render:function(){return i.createElement(o,r({},this.props,{childFactory:this._wrapChild}))}});t.exports=u},"+aGp":function(t,e,n){"use strict";var r=/([A-Z])/g;t.exports=function(t){return t.replace(r,"-$1").toLowerCase()}},"+i7v":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var n=(0,r.default)(t);if(void 0===e)return n?"pageXOffset"in n?n.pageXOffset:n.document.documentElement.scrollLeft:t.scrollLeft;n?n.scrollTo(e,"pageYOffset"in n?n.pageYOffset:n.document.documentElement.scrollTop):t.scrollLeft=e};var r=function(t){return t&&t.__esModule?t:{default:t}}(n("8Y+z"));t.exports=e.default},"+qE3":function(t,e){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function i(t){return"object"==typeof t&&null!==t}function o(t){return void 0===t}t.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(t){if(!function(t){return"number"==typeof t}(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},n.prototype.emit=function(t){var e,n,a,s,u,l;if(this._events||(this._events={}),"error"===t&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;throw TypeError('Uncaught, unspecified "error" event.')}if(o(n=this._events[t]))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:for(a=arguments.length,s=new Array(a-1),u=1;u0&&this._events[t].length>a&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()));return this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){if(!r(e))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(t,i),n||(n=!0,e.apply(this,arguments))}return i.listener=e,this.on(t,i),this},n.prototype.removeListener=function(t,e){var n,o,a,s;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(a=(n=this._events[t]).length,o=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(i(n)){for(s=a;s-- >0;)if(n[s]===e||n[s].listener&&n[s].listener===e){o=s;break}if(o<0)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(o,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[t]))this.removeListener(t,n);else for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.listenerCount=function(t,e){return t._events&&t._events[e]?r(t._events[e])?1:t._events[e].length:0}},"+s0g":function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},"//9w":function(t,e,n){!function(t){"use strict";t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},"/LaW":function(t,e,n){"use strict";var r=/["'&<>]/;t.exports=function(t){return"boolean"==typeof t||"number"==typeof t?""+t:function(t){var e,n=""+t,i=r.exec(n);if(!i)return n;var o="",a=0,s=0;for(a=i.index;a=4||"ཉིན་གུང"===e&&t<5||"དགོང་དག"===e?t+12:t},meridiem:function(t,e,n){return t<4?"མཚན་མོ":t<10?"ཞོགས་ཀས":t<17?"ཉིན་གུང":t<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n("wd/R"))},"0tRk":function(t,e,n){!function(t){"use strict";t.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n("wd/R"))},"1IEh":function(t,e,n){"use strict";e.add=function(t,e){t.classList?t.classList.add(e):function(t,e){var n=t.className.split(" ");n.indexOf(e)<0&&n.push(e),t.className=n.join(" ")}(t,e)},e.remove=function(t,e){t.classList?t.classList.remove(e):function(t,e){var n=t.className.split(" "),r=n.indexOf(e);r>=0&&n.splice(r,1),t.className=n.join(" ")}(t,e)},e.list=function(t){return t.classList?Array.prototype.slice.apply(t.classList):t.className.split(" ")}},"1LiS":function(t,e,n){"use strict";var r=n("h2LH"),i=n("4GzV"),o=n("F9Uo"),a=n("SXLm"),s=n("Vljt"),u=r.createClass({displayName:"ReactCSSTransitionGroupChild",propTypes:{name:r.PropTypes.oneOfType([r.PropTypes.string,r.PropTypes.shape({enter:r.PropTypes.string,leave:r.PropTypes.string,active:r.PropTypes.string}),r.PropTypes.shape({enter:r.PropTypes.string,enterActive:r.PropTypes.string,leave:r.PropTypes.string,leaveActive:r.PropTypes.string,appear:r.PropTypes.string,appearActive:r.PropTypes.string})]).isRequired,appear:r.PropTypes.bool,enter:r.PropTypes.bool,leave:r.PropTypes.bool,appearTimeout:r.PropTypes.number,enterTimeout:r.PropTypes.number,leaveTimeout:r.PropTypes.number},transition:function(t,e,n){var r=i.findDOMNode(this);if(r){var s=this.props.name[t]||this.props.name+"-"+t,u=this.props.name[t+"Active"]||s+"-active",l=null,c=function(t){t&&t.target!==r||(clearTimeout(l),o.removeClass(r,s),o.removeClass(r,u),a.removeEndEventListener(r,c),e&&e())};o.addClass(r,s),this.queueClassAndNode(u,r),n?(l=setTimeout(c,n),this.transitionTimeouts.push(l)):a.addEndEventListener(r,c)}else e&&e()},queueClassAndNode:function(t,e){this.classNameAndNodeQueue.push({className:t,node:e}),this.timeout||(this.timeout=setTimeout(this.flushClassNameAndNodeQueue,17))},flushClassNameAndNodeQueue:function(){this.isMounted()&&this.classNameAndNodeQueue.forEach(function(t){o.addClass(t.node,t.className)}),this.classNameAndNodeQueue.length=0,this.timeout=null},componentWillMount:function(){this.classNameAndNodeQueue=[],this.transitionTimeouts=[]},componentWillUnmount:function(){this.timeout&&clearTimeout(this.timeout),this.transitionTimeouts.forEach(function(t){clearTimeout(t)}),this.classNameAndNodeQueue.length=0},componentWillAppear:function(t){this.props.appear?this.transition("appear",t,this.props.appearTimeout):t()},componentWillEnter:function(t){this.props.enter?this.transition("enter",t,this.props.enterTimeout):t()},componentWillLeave:function(t){this.props.leave?this.transition("leave",t,this.props.leaveTimeout):t()},render:function(){return s(this.props.children)}});t.exports=u},"1c+9":function(t,e,n){"use strict";var r=n("iubj")({prop:null,context:null,childContext:null});t.exports=r},"1mBx":function(t,e,n){"use strict";e.__esModule=!0;var r=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}(a,["createElement","render"]);return null==e?null:(Object.keys(m.propTypes).forEach(function(t){return delete l[t]}),u(r({},l,{router:this.router,location:e,routes:n,params:i,components:o,createElement:s})))}});e.default=m,t.exports=e.default},"1rYy":function(t,e,n){!function(t){"use strict";t.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(t){return/^(ցերեկվա|երեկոյան)$/.test(t)},meridiem:function(t){return t<4?"գիշերվա":t<12?"առավոտվա":t<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-ին":t+"-րդ";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},"1wCw":function(t,e,n){"use strict";var r=n("L+VR"),i=n("JQ/6");t.exports=function(t){!function(t,e){e.event.bind(t,"scroll",function(){i(t)})}(t,r.get(t))}},"1xZ4":function(t,e,n){!function(t){"use strict";t.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"è";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})}(n("wd/R"))},"2DY1":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t.replace(r,"-$1").toLowerCase()};var r=/([A-Z])/g;t.exports=e.default},"2GjB":function(t,e,n){"use strict";var r=n("RttE"),i=n("L+VR"),o=n("JQ/6"),a=n("YB+A");function s(t,e,n,r){function s(e,n){a(t,"top",t.scrollTop-n),a(t,"left",t.scrollLeft-e),o(t)}var u={},l=0,c={},d=null,h=!1,f=!1;function p(){h=!0}function m(){h=!1}function _(t){return t.targetTouches?t.targetTouches[0]:t}function v(t){return!(!t.targetTouches||1!==t.targetTouches.length)||!(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE)}function y(t){if(v(t)){f=!0;var e=_(t);u.pageX=e.pageX,u.pageY=e.pageY,l=(new Date).getTime(),null!==d&&clearInterval(d),t.stopPropagation()}}function g(n){if(!f&&e.settings.swipePropagation&&y(n),!h&&f&&v(n)){var r=_(n),i={pageX:r.pageX,pageY:r.pageY},o=i.pageX-u.pageX,a=i.pageY-u.pageY;s(o,a),u=i;var d=(new Date).getTime(),p=d-l;p>0&&(c.x=o/p,c.y=a/p,l=d),function(n,r){var i=t.scrollTop,o=t.scrollLeft,a=Math.abs(n),s=Math.abs(r);if(s>a){if(r<0&&i===e.contentHeight-e.containerHeight||r>0&&0===i)return!e.settings.swipePropagation}else if(a>s&&(n<0&&o===e.contentWidth-e.containerWidth||n>0&&0===o))return!e.settings.swipePropagation;return!0}(o,a)&&(n.stopPropagation(),n.preventDefault())}}function M(){!h&&f&&(f=!1,clearInterval(d),d=setInterval(function(){i.get(t)&&(c.x||c.y)?Math.abs(c.x)<.01&&Math.abs(c.y)<.01?clearInterval(d):(s(30*c.x,30*c.y),c.x*=.8,c.y*=.8):clearInterval(d)},10))}n?(e.event.bind(window,"touchstart",p),e.event.bind(window,"touchend",m),e.event.bind(t,"touchstart",y),e.event.bind(t,"touchmove",g),e.event.bind(t,"touchend",M)):r&&(window.PointerEvent?(e.event.bind(window,"pointerdown",p),e.event.bind(window,"pointerup",m),e.event.bind(t,"pointerdown",y),e.event.bind(t,"pointermove",g),e.event.bind(t,"pointerup",M)):window.MSPointerEvent&&(e.event.bind(window,"MSPointerDown",p),e.event.bind(window,"MSPointerUp",m),e.event.bind(t,"MSPointerDown",y),e.event.bind(t,"MSPointerMove",g),e.event.bind(t,"MSPointerUp",M)))}t.exports=function(t){(r.env.supportsTouch||r.env.supportsIePointer)&&s(t,i.get(t),r.env.supportsTouch,r.env.supportsIePointer)}},"2NuI":function(t,e,n){"use strict";var r=function(t){};t.exports=function(t,e,n,i,o,a,s,u){if(r(e),!t){var l;if(void 0===e)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,i,o,a,s,u],d=0;(l=new Error(e.replace(/%s/g,function(){return c[d++]}))).name="Invariant Violation"}throw l.framesToPop=1,l}}},"2cG8":function(t,e,n){"use strict";e.__esModule=!0;var r=o(n("usgV")),i=o(n("ar35"));function o(t){return t&&t.__esModule?t:{default:t}}e.default=(0,i.default)(r.default),t.exports=e.default},"2fjn":function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})}(n("wd/R"))},"2mcs":function(t,e,n){"use strict";var r=n("ohE5");t.exports=r},"2sTL":function(t,e,n){"use strict";var r,i=n("xLLm");i.canUseDOM&&(r=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")) -/** - * Checks if an event is supported in the current execution environment. - * - * NOTE: This will not work correctly for non-generic events such as `change`, - * `reset`, `load`, `error`, and `select`. - * - * Borrows from Modernizr. - * - * @param {string} eventNameSuffix Event name, e.g. "click". - * @param {?boolean} capture Check if the capture phase is supported. - * @return {boolean} True if the event is supported. - * @internal - * @license Modernizr 3.0.0pre (Custom Build) | MIT - */,t.exports=function(t,e){if(!i.canUseDOM||e&&!("addEventListener"in document))return!1;var n="on"+t,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"==typeof a[n]}return!o&&r&&"wheel"===t&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}},"2ykv":function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},"3+de":function(t,e,n){"use strict";var r=n("88lf");n("DdJX"),n("2mcs");var i=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.transaction=e}return t.prototype.isMounted=function(t){return!1},t.prototype.enqueueCallback=function(t,e,n){this.transaction.isInTransaction()&&r.enqueueCallback(t,e,n)},t.prototype.enqueueForceUpdate=function(t){this.transaction.isInTransaction()&&r.enqueueForceUpdate(t)},t.prototype.enqueueReplaceState=function(t,e){this.transaction.isInTransaction()&&r.enqueueReplaceState(t,e)},t.prototype.enqueueSetState=function(t,e){this.transaction.isInTransaction()&&r.enqueueSetState(t,e)},t}();t.exports=i},"35u6":function(t,e,n){"use strict";var r=function(t){this.element=t,this.events={}};r.prototype.bind=function(t,e){void 0===this.events[t]&&(this.events[t]=[]),this.events[t].push(e),this.element.addEventListener(t,e,!1)},r.prototype.unbind=function(t,e){var n=void 0!==e;this.events[t]=this.events[t].filter(function(r){return!(!n||r===e)||(this.element.removeEventListener(t,r,!1),!1)},this)},r.prototype.unbindAll=function(){for(var t in this.events)this.unbind(t)};var i=function(){this.eventElements=[]};i.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return void 0===e&&(e=new r(t),this.eventElements.push(e)),e},i.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},i.prototype.unbind=function(t,e,n){this.eventElement(t).unbind(e,n)},i.prototype.unbindAll=function(){for(var t=0;t=10?t:t+12:"शाम"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात":t<10?"सुबह":t<17?"दोपहर":t<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n("wd/R"))},"3IpI":function(t,e,n){"use strict";var r=n("gwiw");function i(t,e,n,i){return r.call(this,t,e,n,i)}r.augmentClass(i,{data:null}),t.exports=i},"3nJz":function(t,e,n){var r,i,o; -/*! - * Datepicker for Bootstrap v1.6.0 (https://github.com/eternicode/bootstrap-datepicker) - * - * Copyright 2012 Stefan Petre - * Improvements by Andrew Rowls - * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) - */i=[n("K5fH")],void 0===(o="function"==typeof(r=function(t,e){function n(){return new Date(Date.UTC.apply(Date,arguments))}function r(){var t=new Date;return n(t.getFullYear(),t.getMonth(),t.getDate())}function i(t){return function(){return this[t].apply(this,arguments)}}var o=function(){var e={get:function(t){return this.slice(t)[0]},contains:function(t){for(var e=t&&t.valueOf(),n=0,r=this.length;n]/g)||[]).length<=0)return!0;var r=t(n);return r.length>0}catch(t){return!1}},_process_options:function(e){this._o=t.extend({},this._o,e);var i=this.o=t.extend({},this._o),o=i.language;h[o]||(o=o.split("-")[0],h[o]||(o=c.language)),i.language=o,i.startView=this._resolveViewName(i.startView,0),i.minViewMode=this._resolveViewName(i.minViewMode,0),i.maxViewMode=this._resolveViewName(i.maxViewMode,4),i.startView=Math.min(i.startView,i.maxViewMode),i.startView=Math.max(i.startView,i.minViewMode),!0!==i.multidate&&(i.multidate=Number(i.multidate)||!1,!1!==i.multidate&&(i.multidate=Math.max(0,i.multidate))),i.multidateSeparator=String(i.multidateSeparator),i.weekStart%=7,i.weekEnd=(i.weekStart+6)%7;var a=f.parseFormat(i.format);if(i.startDate!==-1/0&&(i.startDate?i.startDate instanceof Date?i.startDate=this._local_to_utc(this._zero_time(i.startDate)):i.startDate=f.parseDate(i.startDate,a,i.language,i.assumeNearbyYear):i.startDate=-1/0),i.endDate!==1/0&&(i.endDate?i.endDate instanceof Date?i.endDate=this._local_to_utc(this._zero_time(i.endDate)):i.endDate=f.parseDate(i.endDate,a,i.language,i.assumeNearbyYear):i.endDate=1/0),i.daysOfWeekDisabled=i.daysOfWeekDisabled||[],t.isArray(i.daysOfWeekDisabled)||(i.daysOfWeekDisabled=i.daysOfWeekDisabled.split(/[,\s]*/)),i.daysOfWeekDisabled=t.map(i.daysOfWeekDisabled,function(t){return parseInt(t,10)}),i.daysOfWeekHighlighted=i.daysOfWeekHighlighted||[],t.isArray(i.daysOfWeekHighlighted)||(i.daysOfWeekHighlighted=i.daysOfWeekHighlighted.split(/[,\s]*/)),i.daysOfWeekHighlighted=t.map(i.daysOfWeekHighlighted,function(t){return parseInt(t,10)}),i.datesDisabled=i.datesDisabled||[],!t.isArray(i.datesDisabled)){var s=[];s.push(f.parseDate(i.datesDisabled,a,i.language,i.assumeNearbyYear)),i.datesDisabled=s}i.datesDisabled=t.map(i.datesDisabled,function(t){return f.parseDate(t,a,i.language,i.assumeNearbyYear)});var u=String(i.orientation).toLowerCase().split(/\s+/g),l=i.orientation.toLowerCase();if(u=t.grep(u,function(t){return/^auto|left|right|top|bottom$/.test(t)}),i.orientation={x:"auto",y:"auto"},l&&"auto"!==l)if(1===u.length)switch(u[0]){case"top":case"bottom":i.orientation.y=u[0];break;case"left":case"right":i.orientation.x=u[0]}else l=t.grep(u,function(t){return/^left|right$/.test(t)}),i.orientation.x=l[0]||"auto",l=t.grep(u,function(t){return/^top|bottom$/.test(t)}),i.orientation.y=l[0]||"auto";if(i.defaultViewDate){var d=i.defaultViewDate.year||(new Date).getFullYear(),p=i.defaultViewDate.month||0,m=i.defaultViewDate.day||1;i.defaultViewDate=n(d,p,m)}else i.defaultViewDate=r()},_events:[],_secondaryEvents:[],_applyEvents:function(t){for(var n,r,i,o=0;oi?(this.picker.addClass("datepicker-orient-right"),h+=d-e):this.picker.addClass("datepicker-orient-left");var p=this.o.orientation.y;if("auto"===p&&(p=-o+f-n<0?"bottom":"top"),this.picker.addClass("datepicker-orient-"+p),"top"===p?f-=n+parseInt(this.picker.css("padding-top")):f+=c,this.o.rtl){var m=i-(h+d);this.picker.css({top:f,right:m,zIndex:u})}else this.picker.css({top:f,left:h,zIndex:u});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var e=this.dates.copy(),n=[],r=!1;return arguments.length?(t.each(arguments,t.proxy(function(t,e){e instanceof Date&&(e=this._local_to_utc(e)),n.push(e)},this)),r=!0):(n=(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val())&&this.o.multidate?n.split(this.o.multidateSeparator):[n],delete this.element.data().date),n=t.map(n,t.proxy(function(t){return f.parseDate(t,this.o.format,this.o.language,this.o.assumeNearbyYear)},this)),n=t.grep(n,t.proxy(function(t){return!this.dateWithinRange(t)||!t},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDatethis.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=this.o.defaultViewDate,r?this.setValue():n.length&&String(e)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&e.length&&this._trigger("clearDate"),this.fill(),this.element.change(),this},fillDow:function(){var e=this.o.weekStart,n="";for(this.o.calendarWeeks&&(this.picker.find(".datepicker-days .datepicker-switch").attr("colspan",function(t,e){return parseInt(e)+1}),n+=' ');e";n+="",this.picker.find(".datepicker-days thead").append(n)},fillMonths:function(){for(var t=this._utc_to_local(this.viewDate),e="",n=0;n<12;){var r=t&&t.getMonth()===n?" focused":"";e+=''+h[this.o.language].monthsShort[n++]+""}this.picker.find(".datepicker-months td").html(e)},setRange:function(e){e&&e.length?this.range=t.map(e,function(t){return t.valueOf()}):delete this.range,this.fill()},getClassNames:function(e){var n=[],r=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth(),o=new Date;return e.getUTCFullYear()r||e.getUTCFullYear()===r&&e.getUTCMonth()>i)&&n.push("new"),this.focusDate&&e.valueOf()===this.focusDate.valueOf()&&n.push("focused"),this.o.todayHighlight&&e.getUTCFullYear()===o.getFullYear()&&e.getUTCMonth()===o.getMonth()&&e.getUTCDate()===o.getDate()&&n.push("today"),-1!==this.dates.contains(e)&&n.push("active"),this.dateWithinRange(e)&&!this.dateIsDisabled(e)||n.push("disabled"),-1!==t.inArray(e.getUTCDay(),this.o.daysOfWeekHighlighted)&&n.push("highlighted"),this.range&&(e>this.range[0]&&em)&&y.push("disabled"),_===this.viewDate.getFullYear()&&y.push("focused"),l!==t.noop&&((M=l(new Date(_,0,1)))===e?M={}:"boolean"==typeof M?M={enabled:M}:"string"==typeof M&&(M={classes:M}),!1===M.enabled&&y.push("disabled"),M.classes&&(y=y.concat(M.classes.split(/\s+/))),M.tooltip&&(g=M.tooltip)),c+='"+_+"",_+=o;d.find("td").html(c)},fill:function(){var r,i,o=new Date(this.viewDate),a=o.getUTCFullYear(),s=o.getUTCMonth(),u=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,l=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,c=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,d=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,p=h[this.o.language].today||h.en.today||"",m=h[this.o.language].clear||h.en.clear||"",_=h[this.o.language].titleFormat||h.en.titleFormat;if(!isNaN(a)&&!isNaN(s)){this.picker.find(".datepicker-days .datepicker-switch").text(f.formatDate(o,_,this.o.language)),this.picker.find("tfoot .today").text(p).toggle(!1!==this.o.todayBtn),this.picker.find("tfoot .clear").text(m).toggle(!1!==this.o.clearBtn),this.picker.find("thead .datepicker-title").text(this.o.title).toggle(""!==this.o.title),this.updateNavArrows(),this.fillMonths();var v=n(a,s-1,28),y=f.getDaysInMonth(v.getUTCFullYear(),v.getUTCMonth());v.setUTCDate(y),v.setUTCDate(y-(v.getUTCDay()-this.o.weekStart+7)%7);var g=new Date(v);v.getUTCFullYear()<100&&g.setUTCFullYear(v.getUTCFullYear()),g.setUTCDate(g.getUTCDate()+42),g=g.valueOf();for(var M,b=[];v.valueOf()"),this.o.calendarWeeks)){var w=new Date(+v+(this.o.weekStart-v.getUTCDay()-7)%7*864e5),L=new Date(Number(w)+(11-w.getUTCDay())%7*864e5),k=new Date(Number(k=n(L.getUTCFullYear(),0,1))+(11-k.getUTCDay())%7*864e5),T=(L-k)/864e5/7+1;b.push(''+T+"")}(M=this.getClassNames(v)).push("day"),this.o.beforeShowDay!==t.noop&&((i=this.o.beforeShowDay(this._utc_to_local(v)))===e?i={}:"boolean"==typeof i?i={enabled:i}:"string"==typeof i&&(i={classes:i}),!1===i.enabled&&M.push("disabled"),i.classes&&(M=M.concat(i.classes.split(/\s+/))),i.tooltip&&(r=i.tooltip)),M=t.unique(M),b.push('"+v.getUTCDate()+""),r=null,v.getUTCDay()===this.o.weekEnd&&b.push(""),v.setUTCDate(v.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").empty().append(b.join(""));var D=h[this.o.language].monthsTitle||h.en.monthsTitle||"Months",S=this.picker.find(".datepicker-months").find(".datepicker-switch").text(this.o.maxViewMode<2?D:a).end().find("span").removeClass("active");if(t.each(this.dates,function(t,e){e.getUTCFullYear()===a&&S.eq(e.getUTCMonth()).addClass("active")}),(ac)&&S.addClass("disabled"),a===u&&S.slice(0,l).addClass("disabled"),a===c&&S.slice(d+1).addClass("disabled"),this.o.beforeShowMonth!==t.noop){var x=this;t.each(S,function(n,r){var i=new Date(a,n,1),o=x.o.beforeShowMonth(i);o===e?o={}:"boolean"==typeof o?o={enabled:o}:"string"==typeof o&&(o={classes:o}),!1!==o.enabled||t(r).hasClass("disabled")||t(r).addClass("disabled"),o.classes&&t(r).addClass(o.classes),o.tooltip&&t(r).prop("title",o.tooltip)})}this._fill_yearsView(".datepicker-years","year",10,1,a,u,c,this.o.beforeShowYear),this._fill_yearsView(".datepicker-decades","decade",100,10,a,u,c,this.o.beforeShowDecade),this._fill_yearsView(".datepicker-centuries","century",1e3,100,a,u,c,this.o.beforeShowCentury)}},updateNavArrows:function(){if(this._allow_update){var t=new Date(this.viewDate),e=t.getUTCFullYear(),n=t.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-1/0&&e<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&e>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:case 3:case 4:this.o.startDate!==-1/0&&e<=this.o.startDate.getUTCFullYear()||this.o.maxViewMode<2?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&e>=this.o.endDate.getUTCFullYear()||this.o.maxViewMode<2?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}},click:function(e){var i,o,a,s,u,l,c;e.preventDefault(),e.stopPropagation(),(i=t(e.target)).hasClass("datepicker-switch")&&this.showMode(1);var d=i.closest(".prev, .next");d.length>0&&(o=f.modes[this.viewMode].navStep*(d.hasClass("prev")?-1:1),0===this.viewMode?(this.viewDate=this.moveMonth(this.viewDate,o),this._trigger("changeMonth",this.viewDate)):(this.viewDate=this.moveYear(this.viewDate,o),1===this.viewMode&&this._trigger("changeYear",this.viewDate)),this.fill()),i.hasClass("today")&&(this.showMode(-2),this._setDate(r(),"linked"===this.o.todayBtn?null:"view")),i.hasClass("clear")&&this.clearDates(),i.hasClass("disabled")||(i.hasClass("day")&&(a=parseInt(i.text(),10)||1,s=this.viewDate.getUTCFullYear(),u=this.viewDate.getUTCMonth(),i.hasClass("old")&&(0===u?(u=11,s-=1,l=!0,c=!0):(u-=1,l=!0)),i.hasClass("new")&&(11===u?(u=0,s+=1,l=!0,c=!0):(u+=1,l=!0)),this._setDate(n(s,u,a)),c&&this._trigger("changeYear",this.viewDate),l&&this._trigger("changeMonth",this.viewDate)),i.hasClass("month")&&(this.viewDate.setUTCDate(1),a=1,u=i.parent().find("span").index(i),s=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(u),this._trigger("changeMonth",this.viewDate),1===this.o.minViewMode?(this._setDate(n(s,u,a)),this.showMode()):this.showMode(-1),this.fill()),(i.hasClass("year")||i.hasClass("decade")||i.hasClass("century"))&&(this.viewDate.setUTCDate(1),a=1,u=0,s=parseInt(i.text(),10)||0,this.viewDate.setUTCFullYear(s),i.hasClass("year")&&(this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(n(s,u,a))),i.hasClass("decade")&&(this._trigger("changeDecade",this.viewDate),3===this.o.minViewMode&&this._setDate(n(s,u,a))),i.hasClass("century")&&(this._trigger("changeCentury",this.viewDate),4===this.o.minViewMode&&this._setDate(n(s,u,a))),this.showMode(-1),this.fill())),this.picker.is(":visible")&&this._focused_from&&t(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(t){var e=this.dates.contains(t);if(t||this.dates.clear(),-1!==e?(!0===this.o.multidate||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(e):!1===this.o.multidate?(this.dates.clear(),this.dates.push(t)):this.dates.push(t),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(t,e){var n;e&&"date"!==e||this._toggle_multidate(t&&new Date(t)),e&&"view"!==e||(this.viewDate=t&&new Date(t)),this.fill(),this.setValue(),e&&"view"===e||this._trigger("changeDate"),this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),!this.o.autoclose||e&&"date"!==e||this.hide()},moveDay:function(t,e){var n=new Date(t);return n.setUTCDate(t.getUTCDate()+e),n},moveWeek:function(t,e){return this.moveDay(t,7*e)},moveMonth:function(t,e){if(!function(t){return t&&!isNaN(t.getTime())}(t))return this.o.defaultViewDate;if(!e)return t;var n,r,i=new Date(t.valueOf()),o=i.getUTCDate(),a=i.getUTCMonth(),s=Math.abs(e);if(e=e>0?1:-1,1===s)r=-1===e?function(){return i.getUTCMonth()===a}:function(){return i.getUTCMonth()!==n},n=a+e,i.setUTCMonth(n),(n<0||n>11)&&(n=(n+12)%12);else{for(var u=0;u0},dateWithinRange:function(t){return t>=this.o.startDate&&t<=this.o.endDate},keydown:function(t){if(this.picker.is(":visible")){var e,n,r,i=!1,o=this.focusDate||this.viewDate;switch(t.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),t.preventDefault(),t.stopPropagation();break;case 37:case 38:case 39:case 40:if(!this.o.keyboardNavigation||7===this.o.daysOfWeekDisabled.length)break;e=37===t.keyCode||38===t.keyCode?-1:1,0===this.viewMode?t.ctrlKey?(n=this.moveAvailableDate(o,e,"moveYear"))&&this._trigger("changeYear",this.viewDate):t.shiftKey?(n=this.moveAvailableDate(o,e,"moveMonth"))&&this._trigger("changeMonth",this.viewDate):37===t.keyCode||39===t.keyCode?n=this.moveAvailableDate(o,e,"moveDay"):this.weekOfDateIsDisabled(o)||(n=this.moveAvailableDate(o,e,"moveWeek")):1===this.viewMode?(38!==t.keyCode&&40!==t.keyCode||(e*=4),n=this.moveAvailableDate(o,e,"moveMonth")):2===this.viewMode&&(38!==t.keyCode&&40!==t.keyCode||(e*=4),n=this.moveAvailableDate(o,e,"moveYear")),n&&(this.focusDate=this.viewDate=n,this.setValue(),this.fill(),t.preventDefault());break;case 13:if(!this.o.forceParse)break;o=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(o),i=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(t.preventDefault(),t.stopPropagation(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}i&&(this.dates.length?this._trigger("changeDate"):this._trigger("clearDate"),this.isInput?r=this.element:this.component&&(r=this.element.find("input")),r&&r.change())}else 40!==t.keyCode&&27!==t.keyCode||(this.show(),t.stopPropagation())},showMode:function(t){t&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(this.o.maxViewMode,this.viewMode+t))),this.picker.children("div").hide().filter(".datepicker-"+f.modes[this.viewMode].clsName).show(),this.updateNavArrows()}};var s=function(e,n){t(e).data("datepicker",this),this.element=t(e),this.inputs=t.map(n.inputs,function(t){return t.jquery?t[0]:t}),delete n.inputs,l.call(t(this.inputs),n).on("changeDate",t.proxy(this.dateUpdated,this)),this.pickers=t.map(this.inputs,function(e){return t(e).data("datepicker")}),this.updateDates()};s.prototype={updateDates:function(){this.dates=t.map(this.pickers,function(t){return t.getUTCDate()}),this.updateRanges()},updateRanges:function(){var e=t.map(this.dates,function(t){return t.valueOf()});t.each(this.pickers,function(t,n){n.setRange(e)})},dateUpdated:function(e){if(!this.updating){this.updating=!0;var n=t(e.target).data("datepicker");if(void 0!==n){var r=n.getUTCDate(),i=t.inArray(e.target,this.inputs),o=i-1,a=i+1,s=this.inputs.length;if(-1!==i){if(t.each(this.pickers,function(t,e){e.getUTCDate()||e.setUTCDate(r)}),r=0&&rthis.dates[a])for(;athis.dates[a];)this.pickers[a++].setUTCDate(r);this.updateDates(),delete this.updating}}}},remove:function(){t.map(this.pickers,function(t){t.remove()}),delete this.element.data().datepicker}};var u=t.fn.datepicker,l=function(n){var r,i=Array.apply(null,arguments);if(i.shift(),this.each(function(){var e=t(this),o=e.data("datepicker"),u="object"==typeof n&&n;if(!o){var l=function(e,n){var r,i=t(e).data(),o={},a=new RegExp("^"+n.toLowerCase()+"([A-Z])");function s(t,e){return e.toLowerCase()}for(var u in n=new RegExp("^"+n.toLowerCase()),i)n.test(u)&&(r=u.replace(a,s),o[r]=i[u]);return o}(this,"date"),f=t.extend({},c,l,u),p=function(e){var n={};if(h[e]||(e=e.split("-")[0],h[e])){var r=h[e];return t.each(d,function(t,e){e in r&&(n[e]=r[e])}),n}}(f.language),m=t.extend({},c,p,l,u);e.hasClass("input-daterange")||m.inputs?(t.extend(m,{inputs:m.inputs||e.find("input").toArray()}),o=new s(this,m)):o=new a(this,m),e.data("datepicker",o)}"string"==typeof n&&"function"==typeof o[n]&&(r=o[n].apply(o,i))}),r===e||r instanceof a||r instanceof s)return this;if(this.length>1)throw new Error("Using only allowed for the collection of a single element ("+n+" function)");return r};t.fn.datepicker=l;var c=t.fn.datepicker.defaults={assumeNearbyYear:!1,autoclose:!1,beforeShowDay:t.noop,beforeShowMonth:t.noop,beforeShowYear:t.noop,beforeShowDecade:t.noop,beforeShowCentury:t.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],daysOfWeekHighlighted:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"mm/dd/yyyy",keyboardNavigation:!0,language:"en",minViewMode:0,maxViewMode:4,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-1/0,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,showOnFocus:!0,zIndexOffset:10,container:"body",immediateUpdates:!1,title:"",templates:{leftArrow:"«",rightArrow:"»"}},d=t.fn.datepicker.locale_opts=["format","rtl","weekStart"];t.fn.datepicker.Constructor=a;var h=t.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear",titleFormat:"MM yyyy"}},f={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10},{clsName:"decades",navFnc:"FullDecade",navStep:100},{clsName:"centuries",navFnc:"FullCentury",navStep:1e3}],isLeapYear:function(t){return t%4==0&&t%100!=0||t%400==0},getDaysInMonth:function(t,e){return[31,f.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,parseFormat:function(t){if("function"==typeof t.toValue&&"function"==typeof t.toDisplay)return t;var e=t.replace(this.validParts,"\0").split("\0"),n=t.match(this.validParts);if(!e||!e.length||!n||0===n.length)throw new Error("Invalid date format.");return{separators:e,parts:n}},parseDate:function(i,o,s,u){if(!i)return e;if(i instanceof Date)return i;if("string"==typeof o&&(o=f.parseFormat(o)),o.toValue)return o.toValue(i,o,s);var l,c,d,p,m=/([\-+]\d+)([dmwy])/,_=i.match(/([\-+]\d+)([dmwy])/g),v={d:"moveDay",m:"moveMonth",w:"moveWeek",y:"moveYear"},y={yesterday:"-1d",today:"+0d",tomorrow:"+1d"};if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(i)){for(i=new Date,d=0;d<_.length;d++)l=m.exec(_[d]),c=parseInt(l[1]),p=v[l[2]],i=a.prototype[p](i,c);return n(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate())}if(void 0!==y[i]&&(_=(i=y[i]).match(/([\-+]\d+)([dmwy])/g),/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(i))){for(i=new Date,d=0;d<_.length;d++)l=m.exec(_[d]),c=parseInt(l[1]),p=v[l[2]],i=a.prototype[p](i,c);return n(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate())}function g(t,e){return!0===e&&(e=10),t<100&&(t+=2e3)>(new Date).getFullYear()+e&&(t-=100),t}_=i&&i.match(this.nonpunctuation)||[],i=new Date;var M,b,w={},L=["yyyy","yy","M","MM","m","mm","d","dd"],k={yyyy:function(t,e){return t.setUTCFullYear(u?g(e,u):e)},yy:function(t,e){return t.setUTCFullYear(u?g(e,u):e)},m:function(t,e){if(isNaN(t))return t;for(e-=1;e<0;)e+=12;for(e%=12,t.setUTCMonth(e);t.getUTCMonth()!==e;)t.setUTCDate(t.getUTCDate()-1);return t},d:function(t,e){return t.setUTCDate(e)}};k.M=k.MM=k.mm=k.m,k.dd=k.d,i=r();var T=o.parts.slice();function D(){var t=this.slice(0,_[d].length),e=_[d].slice(0,t.length);return t.toLowerCase()===e.toLowerCase()}if(_.length!==T.length&&(T=t(T).filter(function(e,n){return-1!==t.inArray(n,L)}).toArray()),_.length===T.length){var S,x,Y;for(d=0,S=T.length;d«»',contTemplate:'',footTemplate:''};f.template='
'+f.headTemplate+""+f.footTemplate+'
'+f.headTemplate+f.contTemplate+f.footTemplate+'
'+f.headTemplate+f.contTemplate+f.footTemplate+'
'+f.headTemplate+f.contTemplate+f.footTemplate+'
'+f.headTemplate+f.contTemplate+f.footTemplate+"
",t.fn.datepicker.DPGlobal=f,t.fn.datepicker.noConflict=function(){return t.fn.datepicker=u,this},t.fn.datepicker.version="1.6.0",t(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(e){var n=t(this);n.data("datepicker")||(e.preventDefault(),l.call(n,"show"))}),t(function(){l.call(t('[data-provide="datepicker-inline"]'))})})?r.apply(e,i):r)||(t.exports=o)},"3zxB":function(t,e,n){"use strict";t.exports={}},"47m/":function(t,e,n){"use strict";e.__esModule=!0;var r=s(n("sbe7")),i=s(n("QLaP")),o=n("TNOg"),a=n("GpkE");function s(t){return t&&t.__esModule?t:{default:t}}var u=r.default.PropTypes,l=u.string,c=u.func,d=r.default.createClass({displayName:"Route",statics:{createRouteFromReactElement:o.createRouteFromReactElement},propTypes:{path:l,component:a.component,components:a.components,getComponent:c,getComponents:c},render:function(){(0,i.default)(!1)}});e.default=d,t.exports=e.default},"49sm":function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},"4BeY":function(t,e,n){(function(e){!function(e,n){t.exports=n()}(0,function(){"use strict";var t=function(t){var e=t.id,n=t.viewBox,r=t.content;this.id=e,this.viewBox=n,this.content=r};t.prototype.stringify=function(){return this.content},t.prototype.toString=function(){return this.stringify()},t.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach(function(e){return delete t[e]})};"undefined"!=typeof window?window:void 0!==e||"undefined"!=typeof self&&self;function n(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n(function(t,e){t.exports=function(){function t(t){var e=t&&"object"==typeof t;return e&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function e(e,n){var i=n&&!0===n.clone;return i&&t(e)?r(function(t){return Array.isArray(t)?[]:{}}(e),e,n):e}function n(n,i,o){var a=n.slice();return i.forEach(function(i,s){void 0===a[s]?a[s]=e(i,o):t(i)?a[s]=r(n[s],i,o):-1===n.indexOf(i)&&a.push(e(i,o))}),a}function r(i,o,a){var s=Array.isArray(o),u=a||{arrayMerge:n},l=u.arrayMerge||n;return s?Array.isArray(i)?l(i,o,a):e(o,a):function(n,i,o){var a={};return t(n)&&Object.keys(n).forEach(function(t){a[t]=e(n[t],o)}),Object.keys(i).forEach(function(s){t(i[s])&&n[s]?a[s]=r(n[s],i[s],o):a[s]=e(i[s],o)}),a}(i,o,a)}return r.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce(function(t,n){return r(t,n,e)})},r}()}),i=n(function(t,e){e.default={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}},t.exports=e.default}),o=i.svg,a=i.xlink,s={};s[o.name]=o.uri,s[a.name]=a.uri;var u=function(t,e){return void 0===t&&(t=""),""+t+""};return function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"==typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n}(u(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,n),e}(t)})}).call(this,n("yLpj"))},"4GzV":function(t,e,n){"use strict";var r=n("Ohsa"),i=n("qrD4"),o=n("EZ+T"),a=n("jnXn"),s=n("bUsS"),u=n("vHE9"),l=n("Nezt"),c=n("hF74"),d=n("7j6Z");n("2mcs");i.inject();var h={findDOMNode:l,render:o.render,unmountComponentAtNode:o.unmountComponentAtNode,version:u,unstable_batchedUpdates:s.batchedUpdates,unstable_renderSubtreeIntoContainer:d};"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ComponentTree:{getClosestInstanceFromNode:r.getClosestInstanceFromNode,getNodeFromInstance:function(t){return t._renderedComponent&&(t=c(t)),t?r.getNodeFromInstance(t):null}},Mount:o,Reconciler:a}),t.exports=h},"4MV3":function(t,e,n){!function(t){"use strict";var e={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};t.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(t){return t.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(t,e){return 12===t&&(t=0),"રાત"===e?t<4?t:t+12:"સવાર"===e?t:"બપોર"===e?t>=10?t:t+12:"સાંજ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"રાત":t<10?"સવાર":t<17?"બપોર":t<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n("wd/R"))},"4RLn":function(t,e,n){"use strict";var r=n("Hpnx"),i=n("MgzW"),o=n("OUwc");n("2NuI");function a(){this._callbacks=null,this._contexts=null}i(a.prototype,{enqueue:function(t,e){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(t),this._contexts.push(e)},notifyAll:function(){var t=this._callbacks,e=this._contexts;if(t){t.length!==e.length&&r("24"),this._callbacks=null,this._contexts=null;for(var n=0;na?a-l:0}(f,c,o,a);f+=_,m=50*(1-2*_/c)+"%",p=void 0}else{if("top"!==t&&"bottom"!==t)throw new Error('calcOverlayPosition(): No such placement of "'+t+'" found.');h=s.left+(s.width-d)/2,f="top"===t?s.top-c:s.top+s.height;var v=function(t,e,n,r){var i=u(n).width,o=t-r,a=t+r+e;if(o<0)return-o;if(a>i)return i-a;return 0}(h,d,o,a);h+=v,p=50*(1-2*v/d)+"%",m=void 0}return{positionLeft:h,positionTop:f,arrowOffsetLeft:p,arrowOffsetTop:m}};var r=s(n("A63a")),i=s(n("fpU1")),o=s(n("ZfQF")),a=s(n("z9HI"));function s(t){return t&&t.__esModule?t:{default:t}}function u(t){var e=void 0,n=void 0,i=void 0;if("BODY"===t.tagName)e=window.innerWidth,n=window.innerHeight,i=(0,o.default)((0,a.default)(t).documentElement)||(0,o.default)(t);else{var s=(0,r.default)(t);e=s.width,n=s.height,i=(0,o.default)(t)}return{width:e,height:n,scroll:i}}t.exports=e.default},"5AAG":function(t,e,n){"use strict";var r,i,o,a=n("V84M"),s=n("L+VR");function u(t){t.fn.perfectScrollbar=function(t){return this.each(function(){if("object"==typeof t||void 0===t){var e=t;s.get(this)||a.initialize(this,e)}else{var n=t;"update"===n?a.update(this):"destroy"===n&&a.destroy(this)}})}}i=[n("K5fH")],void 0===(o="function"==typeof(r=u)?r.apply(e,i):r)||(t.exports=o),t.exports=u},"5Drl":function(t,e,n){"use strict";e.__esModule=!0;var r=n("LQBj");e.default=function(t,e){var n={};return t.path?((0,r.getParamNames)(t.path).forEach(function(t){Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t])}),n):n},t.exports=e.default},"5Eqm":function(t,e,n){"use strict";var r=null;function i(t,e,n,i){try{return e(n,i)}catch(t){return void(null===r&&(r=t))}}var o={invokeGuardedCallback:i,invokeGuardedCallbackWithCatch:i,rethrowCaughtError:function(){if(r){var t=r;throw r=null,t}}};t.exports=o},"5UKA":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}var m=function(t){function e(t,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var r=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.state={positionLeft:0,positionTop:0,arrowOffsetLeft:null,arrowOffsetTop:null},r._needsFlush=!1,r._lastTarget=null,r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,s.default.Component),i(e,[{key:"componentDidMount",value:function(){this.updatePosition(this.getTarget())}},{key:"componentWillReceiveProps",value:function(){this._needsFlush=!0}},{key:"componentDidUpdate",value:function(t){this._needsFlush&&(this._needsFlush=!1,this.maybeUpdatePosition(this.props.placement!==t.placement))}},{key:"render",value:function(){var t=this.props,e=t.children,n=t.className,i=p(t,["children","className"]),u=this.state,l=u.positionLeft,c=u.positionTop,d=p(u,["positionLeft","positionTop"]);delete i.target,delete i.container,delete i.containerPadding,delete i.shouldUpdatePosition;var h=s.default.Children.only(e);return(0,a.cloneElement)(h,r({},i,d,{positionLeft:l,positionTop:c,className:(0,o.default)(n,h.props.className),style:r({},h.props.style,{left:l,top:c})}))}},{key:"getTarget",value:function(){var t=this.props.target,e="function"==typeof t?t():t;return e&&u.default.findDOMNode(e)||null}},{key:"maybeUpdatePosition",value:function(t){var e=this.getTarget();(this.props.shouldUpdatePosition||e!==this._lastTarget||t)&&this.updatePosition(e)}},{key:"updatePosition",value:function(t){if(this._lastTarget=t,t){var e=u.default.findDOMNode(this),n=(0,d.default)(this.props.container,(0,h.default)(this).body);this.setState((0,c.default)(this.props.placement,e,t,n,this.props.containerPadding))}else this.setState({positionLeft:0,positionTop:0,arrowOffsetLeft:null,arrowOffsetTop:null})}}]),e}();m.propTypes={target:s.default.PropTypes.oneOfType([l.default,s.default.PropTypes.func]),container:s.default.PropTypes.oneOfType([l.default,s.default.PropTypes.func]),containerPadding:s.default.PropTypes.number,placement:s.default.PropTypes.oneOf(["top","right","bottom","left"]),shouldUpdatePosition:s.default.PropTypes.bool},m.displayName="Position",m.defaultProps={containerPadding:0,placement:"right",shouldUpdatePosition:!1},e.default=m,t.exports=e.default},"5ddN":function(t,e,n){"use strict";var r=n("xLLm"),i=null;t.exports=function(){return!i&&r.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}},"5j9y":function(t,e,n){"use strict";var r=n("MgzW"),i=n("H0MN"),o=n("xoyb"),a=n("Ohsa"),s=n("bUsS"),u=(n("2mcs"),!1);function l(){if(this._rootNodeID&&this._wrapperState.pendingUpdate){this._wrapperState.pendingUpdate=!1;var t=this._currentElement.props,e=o.getValue(t);null!=e&&c(this,Boolean(t.multiple),e)}}function c(t,e,n){var r,i,o=a.getNodeFromInstance(t).options;if(e){for(r={},i=0;ithis.getPositionTopMax()?"bottom"===this.state.affixed?this.updateStateAtBottom():this.setState({affixed:"bottom",position:"absolute",top:null},function(){t._isMounted&&t.updateStateAtBottom()}):this.updateState("affix","fixed",r)}}},{key:"getPositionTopMax",value:function(){return(0,p.default)((0,m.default)(this))-(0,a.default)(h.default.findDOMNode(this))-this.props.offsetBottom}},{key:"updateState",value:function(t,e,n){var r=this;if(t!==this.state.affixed||e!==this.state.position||n!==this.state.top){var i="affix"===t?"":t.charAt(0).toUpperCase()+t.substr(1);this.props["onAffix"+i]&&this.props["onAffix"+i](),this.setState({affixed:t,position:e,top:n},function(){r.props["onAffixed"+i]&&r.props["onAffixed"+i]()})}}},{key:"updateStateAtBottom",value:function(){var t=this.getPositionTopMax(),e=(0,u.default)(h.default.findDOMNode(this)),n=(0,s.default)(e).top;this.updateState("bottom","absolute",t-n)}},{key:"render",value:function(){var t=d.default.Children.only(this.props.children),e=t.props,n=e.className,i=e.style,a=this.state,s=a.affixed,u={position:a.position,top:a.top},l=void 0,c=void 0;return"top"===s?(l=this.props.topClassName,c=this.props.topStyle):"bottom"===s?(l=this.props.bottomClassName,c=this.props.bottomStyle):(l=this.props.affixClassName,c=this.props.affixStyle),d.default.cloneElement(t,{className:(0,o.default)(l,n),style:r({},u,c,i)})}}]),e}();y.propTypes={offsetTop:d.default.PropTypes.number,viewportOffsetTop:d.default.PropTypes.number,offsetBottom:d.default.PropTypes.number,topClassName:d.default.PropTypes.string,topStyle:d.default.PropTypes.object,affixClassName:d.default.PropTypes.string,affixStyle:d.default.PropTypes.object,bottomClassName:d.default.PropTypes.string,bottomStyle:d.default.PropTypes.object,onAffix:d.default.PropTypes.func,onAffixed:d.default.PropTypes.func,onAffixTop:d.default.PropTypes.func,onAffixedTop:d.default.PropTypes.func,onAffixBottom:d.default.PropTypes.func,onAffixedBottom:d.default.PropTypes.func},y.defaultProps={offsetTop:0,viewportOffsetTop:null,offsetBottom:0},e.default=y,t.exports=e.default},"5quD":function(t,e,n){"use strict";var r=n("y9m6"),i={processChildrenUpdates:n("xkpC").dangerouslyProcessChildrenUpdates,replaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup};t.exports=i},"6+QB":function(t,e,n){!function(t){"use strict";t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},"61Rg":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){return t&&t.__esModule?t:{default:t}}(n("Bp9Y"));function i(t,e){if(e)do{if(e===t)return!0}while(e=e.parentNode);return!1}e.default=r.default?function(t,e){return t.contains?t.contains(e):t.compareDocumentPosition?t===e||!!(16&t.compareDocumentPosition(e)):i(t,e)}:i,t.exports=e.default},"61aM":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EXITING=e.ENTERED=e.ENTERING=e.EXITED=e.UNMOUNTED=void 0;var r=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}(n,["children","className"]);Object.keys(e.propTypes).forEach(function(t){return delete s[t]});var l=void 0;t===f?l=this.props.exitedClassName:t===p?l=this.props.enteringClassName:t===m?l=this.props.enteredClassName:t===_&&(l=this.props.exitingClassName);var c=u.default.Children.only(i);return u.default.cloneElement(c,r({},s,{className:(0,o.default)(c.props.className,a,l)}))}}]),e}();function y(){}v.propTypes={in:u.default.PropTypes.bool,mountOnEnter:u.default.PropTypes.bool,unmountOnExit:u.default.PropTypes.bool,transitionAppear:u.default.PropTypes.bool,timeout:u.default.PropTypes.number,exitedClassName:u.default.PropTypes.string,exitingClassName:u.default.PropTypes.string,enteredClassName:u.default.PropTypes.string,enteringClassName:u.default.PropTypes.string,onEnter:u.default.PropTypes.func,onEntering:u.default.PropTypes.func,onEntered:u.default.PropTypes.func,onExit:u.default.PropTypes.func,onExiting:u.default.PropTypes.func,onExited:u.default.PropTypes.func},v.displayName="Transition",v.defaultProps={in:!1,unmountOnExit:!1,transitionAppear:!1,timeout:5e3,onEnter:y,onEntering:y,onEntered:y,onExit:y,onExiting:y,onExited:y},e.default=v},"68Fp":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var n=(0,i.default)(t);return n?n.innerHeight:e?t.clientHeight:(0,r.default)(t).height};var r=o(n("A63a")),i=o(n("8Y+z"));function o(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},"6B0Y":function(t,e,n){!function(t){"use strict";t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}})}(n("wd/R"))},"6DQo":function(t,e,n){"use strict";t.exports=function(){}},"6sCX":function(t,e,n){"use strict";var r=n("gwiw");function i(t,e,n,i){return r.call(this,t,e,n,i)}r.augmentClass(i,{data:null}),t.exports=i},"6vZf":function(t,e,n){"use strict";var r,i,o=n("Hpnx"),a=n("YuV3"),s=n("5Eqm"),u=(n("2NuI"),n("2mcs"),{injectComponentTree:function(t){r=t},injectTreeTraversal:function(t){i=t}}),l=a.topLevelTypes;function c(t,e,n,r){var i=t.type||"unknown-event";t.currentTarget=d.getNodeFromInstance(r),e?s.invokeGuardedCallbackWithCatch(i,n,t):s.invokeGuardedCallback(i,n,t),t.currentTarget=null}var d={isEndish:function(t){return t===l.topMouseUp||t===l.topTouchEnd||t===l.topTouchCancel},isMoveish:function(t){return t===l.topMouseMove||t===l.topTouchMove},isStartish:function(t){return t===l.topMouseDown||t===l.topTouchStart},executeDirectDispatch:function(t){var e=t._dispatchListeners,n=t._dispatchInstances;Array.isArray(e)&&o("103"),t.currentTarget=e?d.getNodeFromInstance(n):null;var r=e?e(t):null;return t.currentTarget=null,t._dispatchListeners=null,t._dispatchInstances=null,r},executeDispatchesInOrder:function(t,e){var n=t._dispatchListeners,r=t._dispatchInstances;if(Array.isArray(n))for(var i=0;i11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n("wd/R"))},"7j6Z":function(t,e,n){"use strict";var r=n("EZ+T");t.exports=r.renderSubtreeIntoContainer},"8/+R":function(t,e,n){!function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n("wd/R"))},"88lf":function(t,e,n){"use strict";var r=n("Hpnx"),i=(n("Mlyf"),n("dnI5")),o=(n("rqkW"),n("bUsS"));n("2NuI"),n("2mcs");function a(t){o.enqueueUpdate(t)}function s(t,e){var n=i.get(t);return n||null}var u={isMounted:function(t){var e=i.get(t);return!!e&&!!e._renderedComponent},enqueueCallback:function(t,e,n){u.validateCallback(e,n);var r=s(t);if(!r)return null;r._pendingCallbacks?r._pendingCallbacks.push(e):r._pendingCallbacks=[e],a(r)},enqueueCallbackInternal:function(t,e){t._pendingCallbacks?t._pendingCallbacks.push(e):t._pendingCallbacks=[e],a(t)},enqueueForceUpdate:function(t){var e=s(t);e&&(e._pendingForceUpdate=!0,a(e))},enqueueReplaceState:function(t,e){var n=s(t);n&&(n._pendingStateQueue=[e],n._pendingReplaceState=!0,a(n))},enqueueSetState:function(t,e){var n=s(t);n&&((n._pendingStateQueue||(n._pendingStateQueue=[])).push(e),a(n))},enqueueElementInternal:function(t,e,n){t._pendingElement=e,t._context=n,a(t)},validateCallback:function(t,e){t&&"function"!=typeof t&&r("122",e,function(t){var e=typeof t;if("object"!==e)return e;var n=t.constructor&&t.constructor.name||e,r=Object.keys(t);return r.length>0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}(t))}};t.exports=u},"8DPN":function(t,e,n){"use strict";var r=n("MgzW"),i=n("myaS"),o=n("Ohsa"),a=n("5j9y"),s=(n("2mcs"),!1);function u(t){var e="";return i.forEach(t,function(t){null!=t&&("string"==typeof t||"number"==typeof t?e+=t:s||(s=!0))}),e}var l={mountWrapper:function(t,e,n){var r=null;if(null!=n){var i=n;"optgroup"===i._tag&&(i=i._hostParent),null!=i&&"select"===i._tag&&(r=a.getSelectValueContext(i))}var o,s=null;if(null!=r)if(o=null!=e.value?e.value+"":u(e.children),s=!1,Array.isArray(r)){for(var l=0;l8));var D=!1;a.canUseDOM&&(D=d("input")&&(!("documentMode"in document)||document.documentMode>11));var S={get:function(){return g.get.call(this)},set:function(t){y=""+t,g.set.call(this,t)}};function x(){_&&(delete _.value,_.detachEvent?_.detachEvent("onpropertychange",Y):_.removeEventListener("propertychange",Y,!1),_=null,v=null,y=null,g=null)}function Y(t){if("value"===t.propertyName){var e=t.srcElement.value;e!==y&&(y=e,b(t))}}function E(t,e){if(t===p.topInput)return e}function C(t,e,n){t===p.topFocus?(x(),function(t,e){_=t,v=e,y=t.value,g=Object.getOwnPropertyDescriptor(t.constructor.prototype,"value"),Object.defineProperty(_,"value",S),_.attachEvent?_.attachEvent("onpropertychange",Y):_.addEventListener("propertychange",Y,!1)}(e,n)):t===p.topBlur&&x()}function O(t,e){if((t===p.topSelectionChange||t===p.topKeyUp||t===p.topKeyDown)&&_&&_.value!==y)return y=_.value,v}function P(t,e){if(t===p.topClick)return e}var A={eventTypes:m,extractEvents:function(t,e,n,r){var i,a,u=e?s.getNodeFromInstance(e):window;if(!function(t){var e=t.nodeName&&t.nodeName.toLowerCase();return"select"===e||"input"===e&&"file"===t.type}(u)?h(u)?D?i=E:(i=O,a=C):function(t){return t.nodeName&&"input"===t.nodeName.toLowerCase()&&("checkbox"===t.type||"radio"===t.type)}(u)&&(i=P):M?i=k:a=T,i){var c=i(t,e);if(c){var d=l.getPooled(m.change,c,n,r);return d.type="change",o.accumulateTwoPhaseDispatches(d),d}}a&&a(t,u,e)}};t.exports=A},"8mBD":function(t,e,n){!function(t){"use strict";t.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},"8oxB":function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(t){r=a}}();var u,l=[],c=!1,d=-1;function h(){c&&u&&(c=!1,u.length?l=u.concat(l):d=-1,l.length&&f())}function f(){if(!c){var t=s(h);c=!0;for(var e=l.length;e;){for(u=l,l=[];++d1)for(var n=1;n8&&f<=11);var _=32,v=String.fromCharCode(_),y=r.topLevelTypes,g={beforeInput:{phasedRegistrationNames:{bubbled:l({onBeforeInput:null}),captured:l({onBeforeInputCapture:null})},dependencies:[y.topCompositionEnd,y.topKeyPress,y.topTextInput,y.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:l({onCompositionEnd:null}),captured:l({onCompositionEndCapture:null})},dependencies:[y.topBlur,y.topCompositionEnd,y.topKeyDown,y.topKeyPress,y.topKeyUp,y.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:l({onCompositionStart:null}),captured:l({onCompositionStartCapture:null})},dependencies:[y.topBlur,y.topCompositionStart,y.topKeyDown,y.topKeyPress,y.topKeyUp,y.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:l({onCompositionUpdate:null}),captured:l({onCompositionUpdateCapture:null})},dependencies:[y.topBlur,y.topCompositionUpdate,y.topKeyDown,y.topKeyPress,y.topKeyUp,y.topMouseDown]}},M=!1;function b(t,e){switch(t){case y.topKeyUp:return-1!==c.indexOf(e.keyCode);case y.topKeyDown:return e.keyCode!==d;case y.topKeyPress:case y.topMouseDown:case y.topBlur:return!0;default:return!1}}function w(t){var e=t.detail;return"object"==typeof e&&"data"in e?e.data:null}var L=null;function k(t,e,n,r){var o,u;if(h?o=function(t){switch(t){case y.topCompositionStart:return g.compositionStart;case y.topCompositionEnd:return g.compositionEnd;case y.topCompositionUpdate:return g.compositionUpdate}}(t):L?b(t,n)&&(o=g.compositionEnd):function(t,e){return t===y.topKeyDown&&e.keyCode===d}(t,n)&&(o=g.compositionStart),!o)return null;m&&(L||o!==g.compositionStart?o===g.compositionEnd&&L&&(u=L.getData()):L=a.getPooled(r));var l=s.getPooled(o,e,n,r);if(u)l.data=u;else{var c=w(n);null!==c&&(l.data=c)}return i.accumulateTwoPhaseDispatches(l),l}function T(t,e,n,r){var o;if(!(o=p?function(t,e){switch(t){case y.topCompositionEnd:return w(e);case y.topKeyPress:return e.which!==_?null:(M=!0,v);case y.topTextInput:var n=e.data;return n===v&&M?null:n;default:return null}}(t,n):function(t,e){if(L){if(t===y.topCompositionEnd||b(t,e)){var n=L.getData();return a.release(L),L=null,n}return null}switch(t){case y.topPaste:return null;case y.topKeyPress:return e.which&&!function(t){return(t.ctrlKey||t.altKey||t.metaKey)&&!(t.ctrlKey&&t.altKey)}(e)?String.fromCharCode(e.which):null;case y.topCompositionEnd:return m?null:e.data;default:return null}}(t,n)))return null;var s=u.getPooled(g.beforeInput,e,n,r);return s.data=o,i.accumulateTwoPhaseDispatches(s),s}var D={eventTypes:g,extractEvents:function(t,e,n,r){return[k(t,e,n,r),T(t,e,n,r)]}};t.exports=D},"9rRi":function(t,e,n){!function(t){"use strict";t.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){var e=1===t?"d":t%10==2?"na":"mh";return t+e},week:{dow:1,doy:4}})}(n("wd/R"))},"9yaC":function(t,e,n){"use strict";var r,i={injectEmptyComponentFactory:function(t){r=t}},o={create:function(t){return r(t)}};o.injection=i,t.exports=o},"A+xa":function(t,e,n){!function(t){"use strict";t.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(t){var e=/сехет$/i.exec(t)?"рен":/ҫул$/i.exec(t)?"тан":"ран";return t+e},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n("wd/R"))},"A/Ad":function(t,e,n){"use strict";var r=n("u9qw"),i={};i.attachRefs=function(t,e){if(null!==e&&!1!==e){var n=e.ref;null!=n&&function(t,e,n){"function"==typeof t?t(e.getPublicInstance()):r.addComponentAsRefTo(e,t,n)}(n,t,e._owner)}},i.shouldUpdateRefs=function(t,e){return null===t||!1===t||(null===e||!1===e)||e.ref!==t.ref||"string"==typeof e.ref&&e._owner!==t._owner},i.detachRefs=function(t,e){if(null!==e&&!1!==e){var n=e.ref;null!=n&&function(t,e,n){"function"==typeof t?t(null):r.removeComponentAsRefFrom(e,t,n)}(n,t,e._owner)}},t.exports=i},A00f:function(t,e,n){"use strict";e.__esModule=!0;var r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},n=t(e),i=e.stringifyQuery,c=e.parseQueryString;"function"!=typeof i&&(i=u),"function"!=typeof c&&(c=l);var d=function(t){return t?(null==t.query&&(t.query=c(t.search.substring(1))),t):t},h=function(t,e){if(null==e)return t;var n="string"==typeof t?(0,s.parsePath)(t):t,o=i(e);return r({},n,{search:o?"?"+o:""})};return r({},n,{getCurrentLocation:function(){return d(n.getCurrentLocation())},listenBefore:function(t){return n.listenBefore(function(e,n){return(0,o.default)(t,d(e),n)})},listen:function(t){return n.listen(function(e){return t(d(e))})},push:function(t){return n.push(h(t,t.query))},replace:function(t){return n.replace(h(t,t.query))},createPath:function(t){return n.createPath(h(t,t.query))},createHref:function(t){return n.createHref(h(t,t.query))},createLocation:function(t){for(var e=arguments.length,r=Array(e>1?e-1:0),i=1;i>"),l={array:f("array"),bool:f("boolean"),func:f("function"),number:f("number"),object:f("object"),string:f("string"),symbol:f("symbol"),any:h(a.thatReturns(null)),arrayOf:function(t){return h(function(e,n,r,a,s){if("function"!=typeof t)return new d("Property `"+s+"` of component `"+r+"` has invalid PropType notation inside arrayOf.");var u=e[n];if(!Array.isArray(u)){var l=i[a],c=m(u);return new d("Invalid "+l+" `"+s+"` of type `"+c+"` supplied to `"+r+"`, expected an array.")}for(var h=0;h=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}})}(n("wd/R"))},B0Ei:function(t,e,n){var r,i,o; -/*! - * jQuery Validation Plugin v1.14.0 - * - * http://jqueryvalidation.org/ - * - * Copyright (c) 2015 Jörn Zaefferer - * Released under the MIT license - */i=[n("K5fH")],void 0===(o="function"==typeof(r=function(t){t.extend(t.fn,{validate:function(e){if(this.length){var n=t.data(this[0],"validator");return n||(this.attr("novalidate","novalidate"),n=new t.validator(e,this[0]),t.data(this[0],"validator",n),n.settings.onsubmit&&(this.on("click.validate",":submit",function(e){n.settings.submitHandler&&(n.submitButton=e.target),t(this).hasClass("cancel")&&(n.cancelSubmit=!0),void 0!==t(this).attr("formnovalidate")&&(n.cancelSubmit=!0)}),this.on("submit.validate",function(e){function r(){var r,i;return!n.settings.submitHandler||(n.submitButton&&(r=t("").attr("name",n.submitButton.name).val(t(n.submitButton).val()).appendTo(n.currentForm)),i=n.settings.submitHandler.call(n,n.currentForm,e),n.submitButton&&r.remove(),void 0!==i&&i)}return n.settings.debug&&e.preventDefault(),n.cancelSubmit?(n.cancelSubmit=!1,r()):n.form()?n.pendingRequest?(n.formSubmitted=!0,!1):r():(n.focusInvalid(),!1)})),n)}e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var e,n,r;return t(this[0]).is("form")?e=this.validate().form():(r=[],e=!0,n=t(this[0].form).validate(),this.each(function(){e=n.element(this)&&e,r=r.concat(n.errorList)}),n.errorList=r),e},rules:function(e,n){var r,i,o,a,s,u,l=this[0];if(e)switch(r=t.data(l.form,"validator").settings,i=r.rules,o=t.validator.staticRules(l),e){case"add":t.extend(o,t.validator.normalizeRule(n)),delete o.messages,i[l.name]=o,n.messages&&(r.messages[l.name]=t.extend(r.messages[l.name],n.messages));break;case"remove":return n?(u={},t.each(n.split(/\s/),function(e,n){u[n]=o[n],delete o[n],"required"===n&&t(l).removeAttr("aria-required")}),u):(delete i[l.name],o)}return(a=t.validator.normalizeRules(t.extend({},t.validator.classRules(l),t.validator.attributeRules(l),t.validator.dataRules(l),t.validator.staticRules(l)),l)).required&&(s=a.required,delete a.required,a=t.extend({required:s},a),t(l).attr("aria-required","true")),a.remote&&(s=a.remote,delete a.remote,a=t.extend(a,{remote:s})),a}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){return!!t.trim(""+t(e).val())},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,n){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=n,this.init()},t.validator.format=function(e,n){return 1===arguments.length?function(){var n=t.makeArray(arguments);return n.unshift(e),t.validator.format.apply(this,n)}:(arguments.length>2&&n.constructor!==Array&&(n=t.makeArray(arguments).slice(1)),n.constructor!==Array&&(n=[n]),t.each(n,function(t,n){e=e.replace(new RegExp("\\{"+t+"\\}","g"),function(){return n})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t){this.lastActive=t,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(t)))},onfocusout:function(t){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(e,n){9===n.which&&""===this.elementValue(e)||-1!==t.inArray(n.keyCode,[16,17,18,20,35,36,37,38,39,40,45,144,225])||(e.name in this.submitted||e===this.lastElement)&&this.element(e)},onclick:function(t){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,n,r){"radio"===e.type?this.findByName(e.name).addClass(n).removeClass(r):t(e).addClass(n).removeClass(r)},unhighlight:function(e,n,r){"radio"===e.type?this.findByName(e.name).removeClass(n).addClass(r):t(e).removeClass(n).addClass(r)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var e,n=this.groups={};function r(e){var n=t.data(this.form,"validator"),r="on"+e.type.replace(/^validate/,""),i=n.settings;i[r]&&!t(this).is(i.ignore)&&i[r].call(n,this,e)}t.each(this.settings.groups,function(e,r){"string"==typeof r&&(r=r.split(/\s/)),t.each(r,function(t,r){n[r]=e})}),e=this.settings.rules,t.each(e,function(n,r){e[n]=t.validator.normalizeRule(r)}),t(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']",r).on("click.validate","select, option, [type='radio'], [type='checkbox']",r),this.settings.invalidHandler&&t(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),t(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){var n=this.clean(e),r=this.validationTargetFor(n),i=!0;return this.lastElement=r,void 0===r?delete this.invalid[n.name]:(this.prepareElement(r),this.currentElements=t(r),(i=!1!==this.check(r))?delete this.invalid[r.name]:this.invalid[r.name]=!0),t(e).attr("aria-invalid",!i),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),i},showErrors:function(e){if(e){for(var n in t.extend(this.errorMap,e),this.errorList=[],e)this.errorList.push({message:e[n],element:this.findByName(n)[0]});this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors();var e,n=this.elements().removeData("previousValue").removeAttr("aria-invalid");if(this.settings.unhighlight)for(e=0;n[e];e++)this.settings.unhighlight.call(this,n[e],this.settings.errorClass,"");else n.removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e,n=0;for(e in t)n++;return n},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(t){t.not(this.containers).text(""),this.addWrapper(t).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(t){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,n={};return t(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){return!this.name&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),!(this.name in n||!e.objectLength(t(this).rules())||(n[this.name]=!0,0))})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.split(" ").join(".");return t(this.settings.errorElement+"."+e,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([]),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var n,r=t(e),i=e.type;return"radio"===i||"checkbox"===i?this.findByName(e.name).filter(":checked").val():"number"===i&&void 0!==e.validity?!e.validity.badInput&&r.val():"string"==typeof(n=r.val())?n.replace(/\r/g,""):n},check:function(e){e=this.validationTargetFor(this.clean(e));var n,r,i,o=t(e).rules(),a=t.map(o,function(t,e){return e}).length,s=!1,u=this.elementValue(e);for(r in o){i={method:r,parameters:o[r]};try{if("dependency-mismatch"===(n=t.validator.methods[r].call(this,u,e,i.parameters))&&1===a){s=!0;continue}if(s=!1,"pending"===n)return void(this.toHide=this.toHide.not(this.errorsFor(e)));if(!n)return this.formatAndAdd(e,i),!1}catch(t){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+i.method+"' method.",t),t instanceof TypeError&&(t.message+=". Exception occurred when checking element "+e.id+", check the '"+i.method+"' method."),t}}if(!s)return this.objectLength(o)&&this.successList.push(e),!0},customDataMessage:function(e,n){return t(e).data("msg"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase())||t(e).data("msg")},customMessage:function(t,e){var n=this.settings.messages[t];return n&&(n.constructor===String?n:n[e])},findDefined:function(){for(var t=0;tWarning: No message defined for "+e.name+"")},formatAndAdd:function(e,n){var r=this.defaultMessage(e,n.method),i=/\$?\{(\d+)\}/g;"function"==typeof r?r=r.call(this,n.parameters,e):i.test(r)&&(r=t.validator.format(r.replace(i,"{$1}"),n.parameters)),this.errorList.push({message:r,element:e,method:n.method}),this.errorMap[e.name]=r,this.submitted[e.name]=r},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e,n;for(t=0;this.errorList[t];t++)n=this.errorList[t],this.settings.highlight&&this.settings.highlight.call(this,n.element,this.settings.errorClass,this.settings.validClass),this.showLabel(n.element,n.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,n){var r,i,o,a=this.errorsFor(e),s=this.idOrName(e),u=t(e).attr("aria-describedby");a.length?(a.removeClass(this.settings.validClass).addClass(this.settings.errorClass),a.html(n)):(a=t("<"+this.settings.errorElement+">").attr("id",s+"-error").addClass(this.settings.errorClass).html(n||""),r=a,this.settings.wrapper&&(r=a.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(r):this.settings.errorPlacement?this.settings.errorPlacement(r,t(e)):r.insertAfter(e),a.is("label")?a.attr("for",s):0===a.parents("label[for='"+s+"']").length&&(o=a.attr("id").replace(/(:|\.|\[|\]|\$)/g,"\\$1"),u?u.match(new RegExp("\\b"+o+"\\b"))||(u+=" "+o):u=o,t(e).attr("aria-describedby",u),(i=this.groups[e.name])&&t.each(this.groups,function(e,n){n===i&&t("[name='"+e+"']",this.currentForm).attr("aria-describedby",a.attr("id"))}))),!n&&this.settings.success&&(a.text(""),"string"==typeof this.settings.success?a.addClass(this.settings.success):this.settings.success(a,e)),this.toShow=this.toShow.add(a)},errorsFor:function(e){var n=this.idOrName(e),r=t(e).attr("aria-describedby"),i="label[for='"+n+"'], label[for='"+n+"'] *";return r&&(i=i+", #"+r.replace(/\s+/g,", #")),this.errors().filter(i)},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(e){return this.checkable(e)&&(e=this.findByName(e.name)),t(e).not(this.settings.ignore)[0]},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+e+"']")},getLength:function(e,n){switch(n.nodeName.toLowerCase()){case"select":return t("option:selected",n).length;case"input":if(this.checkable(n))return this.findByName(n.name).filter(":checked").length}return e.length},depend:function(t,e){return!this.dependTypes[typeof t]||this.dependTypes[typeof t](t,e)},dependTypes:{boolean:function(t){return t},string:function(e,n){return!!t(e,n.form).length},function:function(t,e){return t(e)}},optional:function(e){var n=this.elementValue(e);return!t.validator.methods.required.call(this,n,e)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,this.pending[t.name]=!0)},stopRequest:function(e,n){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[e.name],n&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!n&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,"remote")})},destroy:function(){this.resetForm(),t(this.currentForm).off(".validate").removeData("validator")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,n){e.constructor===String?this.classRuleSettings[e]=n:t.extend(this.classRuleSettings,e)},classRules:function(e){var n={},r=t(e).attr("class");return r&&t.each(r.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(n,t.validator.classRuleSettings[this])}),n},normalizeAttributeRule:function(t,e,n,r){/min|max/.test(n)&&(null===e||/number|range|text/.test(e))&&(r=Number(r),isNaN(r)&&(r=void 0)),r||0===r?t[n]=r:e===n&&"range"!==e&&(t[n]=!0)},attributeRules:function(e){var n,r,i={},o=t(e),a=e.getAttribute("type");for(n in t.validator.methods)"required"===n?(""===(r=e.getAttribute(n))&&(r=!0),r=!!r):r=o.attr(n),this.normalizeAttributeRule(i,a,n,r);return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var n,r,i={},o=t(e),a=e.getAttribute("type");for(n in t.validator.methods)r=o.data("rule"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase()),this.normalizeAttributeRule(i,a,n,r);return i},staticRules:function(e){var n={},r=t.data(e.form,"validator");return r.settings.rules&&(n=t.validator.normalizeRule(r.settings.rules[e.name])||{}),n},normalizeRules:function(e,n){return t.each(e,function(r,i){if(!1!==i){if(i.param||i.depends){var o=!0;switch(typeof i.depends){case"string":o=!!t(i.depends,n.form).length;break;case"function":o=i.depends.call(n,n)}o?e[r]=void 0===i.param||i.param:delete e[r]}}else delete e[r]}),t.each(e,function(r,i){e[r]=t.isFunction(i)?i(n):i}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var n;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(n=e[this].replace(/[\[\]]/g,"").split(/[\s,]+/),e[this]=[Number(n[0]),Number(n[1])]))}),t.validator.autoCreateRanges&&(null!=e.min&&null!=e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),null!=e.minlength&&null!=e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var n={};t.each(e.split(/\s/),function(){n[this]=!0}),e=n}return e},addMethod:function(e,n,r){t.validator.methods[e]=n,t.validator.messages[e]=void 0!==r?r:t.validator.messages[e],n.length<3&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,n,r){if(!this.depend(r,n))return"dependency-mismatch";if("select"===n.nodeName.toLowerCase()){var i=t(n).val();return i&&i.length>0}return this.checkable(n)?this.getLength(e,n)>0:e.length>0},email:function(t,e){return this.optional(e)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(t)},url:function(t,e){return this.optional(e)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(new Date(t).toString())},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(t)},number:function(t,e){return this.optional(e)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},creditcard:function(t,e){if(this.optional(e))return"dependency-mismatch";if(/[^0-9 \-]+/.test(t))return!1;var n,r,i=0,o=0,a=!1;if((t=t.replace(/\D/g,"")).length<13||t.length>19)return!1;for(n=t.length-1;n>=0;n--)r=t.charAt(n),o=parseInt(r,10),a&&(o*=2)>9&&(o-=9),i+=o,a=!a;return i%10==0},minlength:function(e,n,r){var i=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||i>=r},maxlength:function(e,n,r){var i=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||i<=r},rangelength:function(e,n,r){var i=t.isArray(e)?e.length:this.getLength(e,n);return this.optional(n)||i>=r[0]&&i<=r[1]},min:function(t,e,n){return this.optional(e)||t>=n},max:function(t,e,n){return this.optional(e)||t<=n},range:function(t,e,n){return this.optional(e)||t>=n[0]&&t<=n[1]},equalTo:function(e,n,r){var i=t(r);return this.settings.onfocusout&&i.off(".validate-equalTo").on("blur.validate-equalTo",function(){t(n).valid()}),e===i.val()},remote:function(e,n,r){if(this.optional(n))return"dependency-mismatch";var i,o,a=this.previousValue(n);return this.settings.messages[n.name]||(this.settings.messages[n.name]={}),a.originalMessage=this.settings.messages[n.name].remote,this.settings.messages[n.name].remote=a.message,r="string"==typeof r&&{url:r}||r,a.old===e?a.valid:(a.old=e,i=this,this.startRequest(n),(o={})[n.name]=e,t.ajax(t.extend(!0,{mode:"abort",port:"validate"+n.name,dataType:"json",data:o,context:i.currentForm,success:function(r){var o,s,u,l=!0===r||"true"===r;i.settings.messages[n.name].remote=a.originalMessage,l?(u=i.formSubmitted,i.prepareElement(n),i.formSubmitted=u,i.successList.push(n),delete i.invalid[n.name],i.showErrors()):(o={},s=r||i.defaultMessage(n,"remote"),o[n.name]=a.message=t.isFunction(s)?s(e):s,i.invalid[n.name]=!0,i.showErrors(o)),a.valid=l,i.stopRequest(n,l)}},r)),"pending")}}});var e,n={};t.ajaxPrefilter?t.ajaxPrefilter(function(t,e,r){var i=t.port;"abort"===t.mode&&(n[i]&&n[i].abort(),n[i]=r)}):(e=t.ajax,t.ajax=function(r){var i=("mode"in r?r:t.ajaxSettings).mode,o=("port"in r?r:t.ajaxSettings).port;return"abort"===i?(n[o]&&n[o].abort(),n[o]=e.apply(this,arguments),n[o]):e.apply(this,arguments)})})?r.apply(e,i):r)||(t.exports=o)},B55N:function(t,e,n){!function(t){"use strict";t.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n("wd/R"))},BVg3:function(t,e,n){!function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,r,i){var o=t+" ";switch(r){case"s":return n||i?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?o+(n||i?"mínútur":"mínútum"):n?o+"mínúta":o+"mínútu";case"hh":return e(t)?o+(n||i?"klukkustundir":"klukkustundum"):o+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return e(t)?n?o+"dagar":o+(i?"daga":"dögum"):n?o+"dagur":o+(i?"dag":"degi");case"M":return n?"mánuður":i?"mánuð":"mánuði";case"MM":return e(t)?n?o+"mánuðir":o+(i?"mánuði":"mánuðum"):n?o+"mánuður":o+(i?"mánuð":"mánuði");case"y":return n||i?"ár":"ári";case"yy":return e(t)?o+(n||i?"ár":"árum"):o+(n||i?"ár":"ári")}}t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},Bp9Y:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=!("undefined"==typeof window||!window.document||!window.document.createElement),t.exports=e.default},ByF4:function(t,e,n){!function(t){"use strict";t.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},CZKI:function(t,e,n){"use strict";var r=n("RttE"),i=n("L+VR"),o=n("JQ/6"),a=n("YB+A");function s(t,e){var n=null,s={top:0,left:0};function u(){n&&(clearInterval(n),n=null),r.stopScrolling(t)}var l=!1;e.event.bind(e.ownerDocument,"selectionchange",function(){t.contains(function(){var t=window.getSelection?window.getSelection():document.getSelection?document.getSelection():"";return 0===t.toString().length?null:t.getRangeAt(0).commonAncestorContainer}())?l=!0:(l=!1,u())}),e.event.bind(window,"mouseup",function(){l&&(l=!1,u())}),e.event.bind(window,"keyup",function(){l&&(l=!1,u())}),e.event.bind(window,"mousemove",function(e){if(l){var c={x:e.pageX,y:e.pageY},d={left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight};c.xd.right-3?(s.left=5,r.startScrolling(t,"x")):s.left=0,c.yd.bottom-3?(s.top=c.y-d.bottom+3<5?5:20,r.startScrolling(t,"y")):s.top=0,0===s.top&&0===s.left?u():n||(n=setInterval(function(){i.get(t)?(a(t,"top",t.scrollTop+s.top),a(t,"left",t.scrollLeft+s.left),o(t)):clearInterval(n)},50))}})}t.exports=function(t){s(t,i.get(t))}},CjzT:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n("wd/R"))},CoRJ:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n("wd/R"))},Cwxy:function(t,e,n){"use strict";var r=n("MgzW"),i=n("bUsS"),o=n("DdJX"),a=n("ohE5"),s={initialize:a,close:function(){d.isBatchingUpdates=!1}},u=[{initialize:a,close:i.flushBatchedUpdates.bind(i)},s];function l(){this.reinitializeTransaction()}r(l.prototype,o.Mixin,{getTransactionWrappers:function(){return u}});var c=new l,d={isBatchingUpdates:!1,batchedUpdates:function(t,e,n,r,i,o){var a=d.isBatchingUpdates;d.isBatchingUpdates=!0,a?t(e,n,r,i,o):c.perform(t,null,e,n,r,i,o)}};t.exports=d},"D/JM":function(t,e,n){!function(t){"use strict";t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},"DKr+":function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["thodde secondanim","thodde second"],m:["eka mintan","ek minute"],mm:[t+" mintanim",t+" mintam"],h:["eka horan","ek hor"],hh:[t+" horanim",t+" hor"],d:["eka disan","ek dis"],dd:[t+" disanim",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineanim",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsanim",t+" vorsam"]};return e?i[n][0]:i[n][1]}t.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){switch(e){case"D":return t+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return t}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokalli"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokalli":t<16?"donparam":t<20?"sanje":"rati"}})}(n("wd/R"))},DTqW:function(t,e,n){"use strict";e.__esModule=!0,e.ContextProvider=function(t){var e,n,r=o(t),a=r+"/listeners",s=r+"/eventIndex",u=r+"/subscribe";return(n={childContextTypes:(e={},e[r]=i.isRequired,e),getChildContext:function(){var t;return(t={})[r]={eventIndex:this[s],subscribe:this[u]},t},componentWillMount:function(){this[a]=[],this[s]=0},componentWillReceiveProps:function(){this[s]++},componentDidUpdate:function(){var t=this;this[a].forEach(function(e){return e(t[s])})}})[u]=function(t){var e=this;return this[a].push(t),function(){e[a]=e[a].filter(function(e){return e!==t})}},n},e.ContextSubscriber=function(t){var e,n,r=o(t),a=r+"/lastRenderedEventIndex",s=r+"/handleContextUpdate",u=r+"/unsubscribe";return(n={contextTypes:(e={},e[r]=i,e),getInitialState:function(){var t;return this.context[r]?((t={})[a]=this.context[r].eventIndex,t):{}},componentDidMount:function(){this.context[r]&&(this[u]=this.context[r].subscribe(this[s]))},componentWillReceiveProps:function(){var t;this.context[r]&&this.setState(((t={})[a]=this.context[r].eventIndex,t))},componentWillUnmount:function(){this[u]&&(this[u](),this[u]=null)}})[s]=function(t){var e;t!==this.state[a]&&this.setState(((e={})[a]=t,e))},n};var r=n("sbe7"),i=r.PropTypes.shape({subscribe:r.PropTypes.func.isRequired,eventIndex:r.PropTypes.number.isRequired});function o(t){return"@@contextSubscriber/"+t}},DZ0b:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return t.replace(r,function(t,e){return e.toUpperCase()})};var r=/-(.)/g;t.exports=e.default},DdJX:function(t,e,n){"use strict";var r=n("Hpnx"),i=(n("2NuI"),{Mixin:{reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(t,e,n,i,o,a,s,u){var l,c;this.isInTransaction()&&r("27");try{this._isInTransaction=!0,l=!0,this.initializeAll(0),c=t.call(e,n,i,o,a,s,u),l=!1}finally{try{if(l)try{this.closeAll(0)}catch(t){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return c},initializeAll:function(t){for(var e=this.transactionWrappers,n=t;n=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}})}(n("wd/R"))},DwY2:function(t,e,n){"use strict";var r=n("RttE"),i=n("1IEh"),o=n("L+VR"),a=n("JQ/6"),s={"click-rail":n("uWts"),"drag-scrollbar":n("ceno"),keyboard:n("GzIz"),wheel:n("ZtVb"),touch:n("2GjB"),selection:n("CZKI")},u=n("1wCw");t.exports=function(t,e){e="object"==typeof e?e:{},i.add(t,"ps-container");var n=o.add(t);n.settings=r.extend(n.settings,e),i.add(t,"ps-theme-"+n.settings.theme),n.settings.handlers.forEach(function(e){s[e](t)}),u(t),a(t)}},DxQv:function(t,e,n){!function(t){"use strict";t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},Dzi0:function(t,e,n){!function(t){"use strict";t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n("wd/R"))},"E+lV":function(t,e,n){!function(t){"use strict";var e={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},EOgW:function(t,e,n){!function(t){"use strict";t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n("wd/R"))},EVih:function(t,e,n){"use strict";e.__esModule=!0;var r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:{},n=t(e),a=e.basename,s=function(t){return t?(a&&null==t.basename&&(0===t.pathname.toLowerCase().indexOf(a.toLowerCase())?(t.pathname=t.pathname.substring(a.length),t.basename=a,""===t.pathname&&(t.pathname="/")):t.basename=""),t):t},u=function(t){if(!a)return t;var e="string"==typeof t?(0,o.parsePath)(t):t,n=e.pathname,i="/"===a.slice(-1)?a:a+"/",s="/"===n.charAt(0)?n.slice(1):n;return r({},e,{pathname:i+s})};return r({},n,{getCurrentLocation:function(){return s(n.getCurrentLocation())},listenBefore:function(t){return n.listenBefore(function(e,n){return(0,i.default)(t,s(e),n)})},listen:function(t){return n.listen(function(e){return t(s(e))})},push:function(t){return n.push(u(t))},replace:function(t){return n.replace(u(t))},createPath:function(t){return n.createPath(u(t))},createHref:function(t){return n.createHref(u(t))},createLocation:function(t){for(var e=arguments.length,r=Array(e>1?e-1:0),i=1;i.":"function"==typeof e?" Instead of passing a class like Foo, pass React.createElement(Foo) or .":null!=e&&void 0!==e.props?" This may be caused by unintentionally loading two independent copies of React.":"");var o,a=c(R,null,null,null,null,null,e);if(t){var s=h.get(t);o=s._processChildContext(s._context)}else o=v;var u=P(n);if(u){var l=u._currentElement.props;if(M(l,e)){var d=u._renderedComponent.getPublicInstance(),f=i&&function(){i.call(d)};return I._updateRootComponent(u,a,o,n,f),d}I.unmountComponentAtNode(n)}var p=S(n),_=p&&!!function(t){return t.getAttribute&&t.getAttribute(b)||""}(p),y=C(n),g=_&&!u&&!y,w=I._renderNewRootComponent(a,n,g,o)._renderedComponent.getPublicInstance();return i&&i.call(w),w},render:function(t,e,n){return I._renderSubtreeIntoContainer(null,t,e,n)},unmountComponentAtNode:function(t){O(t)||r("40");var e=P(t);if(!e){C(t),1===t.nodeType&&t.hasAttribute(w);return!1}return delete D[e._instance.rootID],_.batchedUpdates(E,e,t,!1),!0},_mountImageIntoNode:function(t,e,n,o,a){if(O(e)||r("41"),o){var u=S(e);if(f.canReuseMarkup(t,u))return void s.precacheNode(n,u);var l=u.getAttribute(f.CHECKSUM_ATTR_NAME);u.removeAttribute(f.CHECKSUM_ATTR_NAME);var c=u.outerHTML;u.setAttribute(f.CHECKSUM_ATTR_NAME,l);var d=t,h=function(t,e){for(var n=Math.min(t.length,e.length),r=0;r0&&void 0!==arguments[0]?arguments[0]:(0,r.default)();try{return t.activeElement}catch(t){}};var r=function(t){return t&&t.__esModule?t:{default:t}}(n("o43f"));t.exports=e.default},F3BU:function(t,e,n){"use strict";var r=n("Hpnx"),i=n("MgzW"),o=n("H0MN"),a=n("xoyb"),s=n("Ohsa"),u=n("bUsS");n("2NuI"),n("2mcs");function l(){this._rootNodeID&&c.updateWrapper(this)}var c={getHostProps:function(t,e){return null!=e.dangerouslySetInnerHTML&&r("91"),i({},o.getHostProps(t,e),{value:void 0,defaultValue:void 0,children:""+t._wrapperState.initialValue,onChange:t._wrapperState.onChange})},mountWrapper:function(t,e){var n=a.getValue(e),i=n;if(null==n){var o=e.defaultValue,s=e.children;null!=s&&(null!=o&&r("92"),Array.isArray(s)&&(s.length<=1||r("93"),s=s[0]),o=""+s),null==o&&(o=""),i=o}t._wrapperState={initialValue:""+i,listeners:null,onChange:function(t){var e=this._currentElement.props,n=a.executeOnChange(e,t);return u.asap(l,this),n}.bind(t)}},updateWrapper:function(t){var e=t._currentElement.props,n=s.getNodeFromInstance(t),r=a.getValue(e);if(null!=r){var i=""+r;i!==n.value&&(n.value=i),null==e.defaultValue&&(n.defaultValue=i)}null!=e.defaultValue&&(n.defaultValue=e.defaultValue)},postMountWrapper:function(t){var e=s.getNodeFromInstance(t);e.value=e.textContent}};t.exports=c},F6LW:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}(t,["container","containerPadding","target","placement","shouldUpdatePosition","rootClose","children","transition"]);if(!(f.show||h&&!this.state.exited))return null;var p=d;if(p=o.default.createElement(s.default,{container:e,containerPadding:n,target:r,placement:i,shouldUpdatePosition:l},p),h){var m=f.onExit,_=f.onExiting,v=f.onEnter,y=f.onEntering,g=f.onEntered;p=o.default.createElement(h,{in:f.show,transitionAppear:!0,onExit:m,onExiting:_,onExited:this.onHiddenListener,onEnter:v,onEntering:y,onEntered:g},p)}return c&&(p=o.default.createElement(u.default,{onRootClose:f.onHide},p)),o.default.createElement(a.default,{container:e},p)}},{key:"handleHidden",value:function(){var t;(this.setState({exited:!0}),this.props.onExited)&&(t=this.props).onExited.apply(t,arguments)}}]),e}();d.propTypes=r({},a.default.propTypes,s.default.propTypes,{show:o.default.PropTypes.bool,rootClose:o.default.PropTypes.bool,onHide:function(t){var e=o.default.PropTypes.func;t.rootClose&&(e=e.isRequired);for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i-1},matchesSelector:function(t,e){return(t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||function(e){return function(t,e){for(var n=t;n.parentNode;)n=n.parentNode;var r=n.querySelectorAll(e);return-1!==Array.prototype.indexOf.call(r,t)}(t,e)}).call(t,e)}};t.exports=i},FDgc:function(t,e,n){"use strict";t.exports={handlers:["click-rail","drag-scrollbar","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipePropagation:!0,useBothWheelAxes:!1,wheelPropagation:!1,wheelSpeed:1,theme:"default"}},Fdon:function(t,e,n){"use strict";var r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=function(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return"input"===e?!!r[t.type]:"textarea"===e}},Flyf:function(t,e,n){"use strict";t.exports={hasCachedChildNodes:1}},Fyuz:function(t,e,n){"use strict";e.__esModule=!0;var r=Object.assign||function(t){for(var e=1;e should not have a "'+e+'" prop')};var r=n("sbe7"),i=r.PropTypes.func,o=r.PropTypes.object,a=r.PropTypes.arrayOf,s=r.PropTypes.oneOfType,u=r.PropTypes.element,l=r.PropTypes.shape,c=r.PropTypes.string;e.history=l({listen:i.isRequired,push:i.isRequired,replace:i.isRequired,go:i.isRequired,goBack:i.isRequired,goForward:i.isRequired});var d=e.component=s([i,c]),h=(e.components=s([d,o]),e.route=s([o,u]));e.routes=s([h,a(h)])},GzIz:function(t,e,n){"use strict";var r=n("RttE"),i=n("qtIE"),o=n("L+VR"),a=n("JQ/6"),s=n("YB+A");function u(t,e){var n=!1;e.event.bind(t,"mouseenter",function(){n=!0}),e.event.bind(t,"mouseleave",function(){n=!1});e.event.bind(e.ownerDocument,"keydown",function(o){if(!(o.isDefaultPrevented&&o.isDefaultPrevented()||o.defaultPrevented)){var u=i.matches(e.scrollbarX,":focus")||i.matches(e.scrollbarY,":focus");if(n||u){var l=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(l){if("IFRAME"===l.tagName)l=l.contentDocument.activeElement;else for(;l.shadowRoot;)l=l.shadowRoot.activeElement;if(r.isEditable(l))return}var c=0,d=0;switch(o.which){case 37:c=o.metaKey?-e.contentWidth:o.altKey?-e.containerWidth:-30;break;case 38:d=o.metaKey?e.contentHeight:o.altKey?e.containerHeight:30;break;case 39:c=o.metaKey?e.contentWidth:o.altKey?e.containerWidth:30;break;case 40:d=o.metaKey?-e.contentHeight:o.altKey?-e.containerHeight:-30;break;case 33:d=90;break;case 32:d=o.shiftKey?90:-90;break;case 34:d=-90;break;case 35:d=o.ctrlKey?-e.contentHeight:-e.containerHeight;break;case 36:d=o.ctrlKey?t.scrollTop:e.containerHeight;break;default:return}s(t,"top",t.scrollTop-d),s(t,"left",t.scrollLeft+c),a(t),function(n,r){var i=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===i&&r>0||i>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var o=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===o&&n<0||o>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}(c,d)&&o.preventDefault()}}})}t.exports=function(t){u(t,o.get(t))}},H0MN:function(t,e,n){"use strict";var r={onClick:!0,onDoubleClick:!0,onMouseDown:!0,onMouseMove:!0,onMouseUp:!0,onClickCapture:!0,onDoubleClickCapture:!0,onMouseDownCapture:!0,onMouseMoveCapture:!0,onMouseUpCapture:!0},i={getHostProps:function(t,e){if(!e.disabled)return e;var n={};for(var i in e)!r[i]&&e.hasOwnProperty(i)&&(n[i]=e[i]);return n}};t.exports=i},H0zx:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){if(!t)throw new TypeError("No Element passed to `getComputedStyle()`");var e=t.ownerDocument;return"defaultView"in e?e.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):window.getComputedStyle(t,null):{getPropertyValue:function(e){var n=t.style;"float"==(e=(0,r.default)(e))&&(e="styleFloat");var a=t.currentStyle[e]||null;if(null==a&&n&&n[e]&&(a=n[e]),o.test(a)&&!i.test(e)){var s=n.left,u=t.runtimeStyle,l=u&&u.left;l&&(u.left=t.currentStyle.left),n.left="fontSize"===e?"1em":a,a=n.pixelLeft+"px",n.left=s,l&&(u.left=l)}return a}}};var r=function(t){return t&&t.__esModule?t:{default:t}}(n("9SKx"));var i=/^(top|right|bottom|left)$/,o=/^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/i;t.exports=e.default},H7XF:function(t,e,n){"use strict";e.byteLength=function(t){var e=l(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){for(var e,n=l(t),r=n[0],a=n[1],s=new o(function(t,e,n){return 3*(e+n)/4-n}(0,r,a)),u=0,c=a>0?r-4:r,d=0;d>16&255,s[u++]=e>>8&255,s[u++]=255&e;2===a&&(e=i[t.charCodeAt(d)]<<2|i[t.charCodeAt(d+1)]>>4,s[u++]=255&e);1===a&&(e=i[t.charCodeAt(d)]<<10|i[t.charCodeAt(d+1)]<<4|i[t.charCodeAt(d+2)]>>2,s[u++]=e>>8&255,s[u++]=255&e);return s},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],a=0,s=n-i;as?s:a+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function c(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function d(t,e,n){for(var r,i=[],o=e;o=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}(r[n],+t)}t.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:e,mm:e,h:e,hh:e,d:"дзень",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(t){return/^(дня|вечара)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночы":t<12?"раніцы":t<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-ы":t+"-і";case"D":return t+"-га";default:return t}},week:{dow:1,doy:7}})}(n("wd/R"))},HP3h:function(t,e,n){!function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(t){return function(e,i,o,a){var s=n(e),u=r[t][n(e)];return 2===s&&(u=u[i?0:1]),u.replace(/%d/i,e)}},o=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar-ly",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n("wd/R"))},HUKK:function(t,e,n){"use strict";var r=n("Ohsa"),i=n("+Q0w"),o={focusDOMComponent:function(){i(r.getNodeFromInstance(this))}};t.exports=o},HVDA:function(t,e,n){"use strict";function r(t){for(;t&&t.firstChild;)t=t.firstChild;return t}function i(t){for(;t;){if(t.nextSibling)return t.nextSibling;t=t.parentNode}}t.exports=function(t,e){for(var n=r(t),o=0,a=0;n;){if(3===n.nodeType){if(a=o+n.textContent.length,o<=e&&a>=e)return{node:n,offset:e-o};o=a}n=r(i(n))}}},HaSr:function(t,e,n){"use strict";e.__esModule=!0;e.canUseDOM=!("undefined"==typeof window||!window.document||!window.document.createElement)},HbRE:function(t,e,n){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},Hpnx:function(t,e,n){"use strict";t.exports=function(t){for(var e=arguments.length-1,n="Minified React error #"+t+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+t,r=0;r"+t+""},l=r.svg,c=r.xlink,d={attrs:(s={style:["position: absolute","width: 0","height: 0"].join("; ")},s[l.name]=l.uri,s[c.name]=c.uri,s)},h=function(t){this.config=n(d,t||{}),this.symbols=[]};h.prototype.add=function(t){var e=this.symbols,n=this.find(t.id);return n?(e[e.indexOf(n)]=t,!1):(e.push(t),!0)},h.prototype.remove=function(t){var e=this.symbols,n=this.find(t);return!!n&&(e.splice(e.indexOf(n),1),n.destroy(),!0)},h.prototype.find=function(t){return this.symbols.filter(function(e){return e.id===t})[0]||null},h.prototype.has=function(t){return null!==this.find(t)},h.prototype.stringify=function(){var t=this.config.attrs,e=this.symbols.map(function(t){return t.stringify()}).join("");return u(e,t)},h.prototype.toString=function(){return this.stringify()},h.prototype.destroy=function(){this.symbols.forEach(function(t){return t.destroy()})};var f=function(t){var e=t.id,n=t.viewBox,r=t.content;this.id=e,this.viewBox=n,this.content=r};f.prototype.stringify=function(){return this.content},f.prototype.toString=function(){return this.stringify()},f.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach(function(e){return delete t[e]})};var p=function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n},m=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"==typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return p(u(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,n),e}(f),_={autoConfigure:!0,mountTo:"body",syncUrlsWithBaseTag:!1,listenLocationChangeEvent:!0,locationChangeEvent:"locationChange",locationChangeAngularEmitter:!1,usagesToUpdate:"use[*|href]",moveGradientsOutsideSymbol:!1},v=function(t){return Array.prototype.slice.call(t,0)},y=navigator.userAgent,g={isChrome:/chrome/i.test(y),isFirefox:/firefox/i.test(y),isIE:/msie/i.test(y)||/trident/i.test(y),isEdge:/edge/i.test(y)},M=function(t){var e=[];return v(t.querySelectorAll("style")).forEach(function(t){t.textContent+="",e.push(t)}),e},b=function(t){return(t||window.location.href).split("#")[0]},w=function(t){angular.module("ng").run(["$rootScope",function(e){e.$on("$locationChangeSuccess",function(e,n,r){!function(t,e){var n=document.createEvent("CustomEvent");n.initCustomEvent(t,!1,!1,e),window.dispatchEvent(n)}(t,{oldUrl:r,newUrl:n})})}])},L=function(t,e){return void 0===e&&(e="linearGradient, radialGradient, pattern"),v(t.querySelectorAll("symbol")).forEach(function(t){v(t.querySelectorAll(e)).forEach(function(e){t.parentNode.insertBefore(e,t)})}),t};var k=r.xlink.uri,T="xlink:href",D=/[{}|\\\^\[\]`"<>]/g;function S(t){return t.replace(D,function(t){return"%"+t[0].charCodeAt(0).toString(16).toUpperCase()})}var x,Y=["clipPath","colorProfile","src","cursor","fill","filter","marker","markerStart","markerMid","markerEnd","mask","stroke","style"],E=Y.map(function(t){return"["+t+"]"}).join(","),C=function(t,e,n,r){var i=S(n),o=S(r);(function(t,e){return v(t).reduce(function(t,n){if(!n.attributes)return t;var r=v(n.attributes),i=e?r.filter(e):r;return t.concat(i)},[])})(t.querySelectorAll(E),function(t){var e=t.localName,n=t.value;return-1!==Y.indexOf(e)&&-1!==n.indexOf("url("+i)}).forEach(function(t){return t.value=t.value.replace(i,o)}),function(t,e,n){v(t).forEach(function(t){var r=t.getAttribute(T);if(r&&0===r.indexOf(e)){var i=r.replace(e,n);t.setAttributeNS(k,T,i)}})}(e,i,o)},O={MOUNT:"mount",SYMBOL_MOUNT:"symbol_mount"},P=function(t){function e(e){var r=this;void 0===e&&(e={}),t.call(this,n(_,e));var i=function(t){return t=t||Object.create(null),{on:function(e,n){(t[e]||(t[e]=[])).push(n)},off:function(e,n){t[e]&&t[e].splice(t[e].indexOf(n)>>>0,1)},emit:function(e,n){(t[e]||[]).map(function(t){t(n)}),(t["*"]||[]).map(function(t){t(e,n)})}}}();this._emitter=i,this.node=null;var o=this.config;if(o.autoConfigure&&this._autoConfigure(e),o.syncUrlsWithBaseTag){var a=document.getElementsByTagName("base")[0].getAttribute("href");i.on(O.MOUNT,function(){return r.updateUrls("#",a)})}var s=this._handleLocationChange.bind(this);this._handleLocationChange=s,o.listenLocationChangeEvent&&window.addEventListener(o.locationChangeEvent,s),o.locationChangeAngularEmitter&&w(o.locationChangeEvent),i.on(O.MOUNT,function(t){o.moveGradientsOutsideSymbol&&L(t)}),i.on(O.SYMBOL_MOUNT,function(t){o.moveGradientsOutsideSymbol&&L(t.parentNode),(g.isIE||g.isEdge)&&M(t)})}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={isMounted:{}};return r.isMounted.get=function(){return!!this.node},e.prototype._autoConfigure=function(t){var e=this.config;void 0===t.syncUrlsWithBaseTag&&(e.syncUrlsWithBaseTag=void 0!==document.getElementsByTagName("base")[0]),void 0===t.locationChangeAngularEmitter&&(e.locationChangeAngularEmitter="angular"in window),void 0===t.moveGradientsOutsideSymbol&&(e.moveGradientsOutsideSymbol=g.isFirefox)},e.prototype._handleLocationChange=function(t){var e=t.detail,n=e.oldUrl,r=e.newUrl;this.updateUrls(n,r)},e.prototype.add=function(e){var n=t.prototype.add.call(this,e);return this.isMounted&&n&&(e.mount(this.node),this._emitter.emit(O.SYMBOL_MOUNT,e.node)),n},e.prototype.attach=function(t){var e=this,n=this;if(n.isMounted)return n.node;var r="string"==typeof t?document.querySelector(t):t;return n.node=r,this.symbols.forEach(function(t){t.mount(n.node),e._emitter.emit(O.SYMBOL_MOUNT,t.node)}),v(r.querySelectorAll("symbol")).forEach(function(t){var e=m.createFromExistingNode(t);e.node=t,n.add(e)}),this._emitter.emit(O.MOUNT,r),r},e.prototype.destroy=function(){var t=this.config,e=this.symbols,n=this._emitter;e.forEach(function(t){return t.destroy()}),n.off("*"),window.removeEventListener(t.locationChangeEvent,this._handleLocationChange),this.isMounted&&this.unmount()},e.prototype.mount=function(t,e){void 0===t&&(t=this.config.mountTo),void 0===e&&(e=!1);if(this.isMounted)return this.node;var n="string"==typeof t?document.querySelector(t):t,r=this.render();return this.node=r,e&&n.childNodes[0]?n.insertBefore(r,n.childNodes[0]):n.appendChild(r),this._emitter.emit(O.MOUNT,r),r},e.prototype.render=function(){return p(this.stringify())},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},e.prototype.updateUrls=function(t,e){if(!this.isMounted)return!1;var n=document.querySelectorAll(this.config.usagesToUpdate);return C(this.node,n,b(t)+"#",b(e)+"#"),!0},Object.defineProperties(e.prototype,r),e}(h),A=t(function(t){ -/*! - * domready (c) Dustin Diaz 2014 - License MIT - */ -t.exports=function(){var t,e=[],n=document,r=(n.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(n.readyState);return r||n.addEventListener("DOMContentLoaded",t=function(){for(n.removeEventListener("DOMContentLoaded",t),r=1;t=e.shift();)t()}),function(t){r?setTimeout(t,0):e.push(t)}}()});!!window.__SVG_SPRITE__?x=window.__SVG_SPRITE__:(x=new P({attrs:{id:"__SVG_SPRITE_NODE__"}}),window.__SVG_SPRITE__=x);var R=function(){var t=document.getElementById("__SVG_SPRITE_NODE__");t?x.attach(t):x.mount(document.body,!0)};return document.body?R():A(R),x})}).call(this,n("yLpj"))},In39:function(t,e,n){"use strict";(function(e){var r=n("Hpnx"),i=n("3zxB"),o=n("HbRE");n("2NuI"),n("2mcs");void 0!==e&&e.env;var a={};t.exports=function(t,e,n,s,u,l){for(var c in t)if(t.hasOwnProperty(c)){var d;try{"function"!=typeof t[c]&&r("84",s||"React class",i[n],c),d=t[c](e,c,s,n,null,o)}catch(t){d=t}d instanceof Error&&!(d.message in a)&&(a[d.message]=!0)}}}).call(this,n("8oxB"))},"Ivi+":function(t,e,n){!function(t){"use strict";t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}})}(n("wd/R"))},J21I:function(t,e,n){t.exports=n("+RlI")},"JG7+":function(t,e,n){"use strict";e.__esModule=!0;var r=Object.assign||function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:i.createElement;return function(e,n){return u.reduceRight(function(t,e){return e(t,n)},t(e,n))}}(t.createElement)})))}},t.exports=e.default},JPcv:function(t,e,n){t.exports=function(){"use strict";var t=Array.prototype.slice;function e(t,e){e&&(t.prototype=Object.create(e.prototype)),t.prototype.constructor=t}function n(t){return a(t)?t:V(t)}function r(t){return s(t)?t:K(t)}function i(t){return u(t)?t:$(t)}function o(t){return a(t)&&!l(t)?t:J(t)}function a(t){return!(!t||!t[d])}function s(t){return!(!t||!t[h])}function u(t){return!(!t||!t[f])}function l(t){return s(t)||u(t)}function c(t){return!(!t||!t[p])}e(r,n),e(i,n),e(o,n),n.isIterable=a,n.isKeyed=s,n.isIndexed=u,n.isAssociative=l,n.isOrdered=c,n.Keyed=r,n.Indexed=i,n.Set=o;var d="@@__IMMUTABLE_ITERABLE__@@",h="@@__IMMUTABLE_KEYED__@@",f="@@__IMMUTABLE_INDEXED__@@",p="@@__IMMUTABLE_ORDERED__@@",m=5,_=1<>>0;if(""+n!==e||4294967295===n)return NaN;e=n}return e<0?T(t)+e:e}function S(){return!0}function x(t,e,n){return(0===t||void 0!==n&&t<=-n)&&(void 0===e||void 0!==n&&e>=n)}function Y(t,e){return C(t,e,0)}function E(t,e){return C(t,e,e)}function C(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}var O=0,P=1,A=2,R="function"==typeof Symbol&&Symbol.iterator,I="@@iterator",j=R||I;function H(t){this.next=t}function N(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function W(){return{value:void 0,done:!0}}function U(t){return!!q(t)}function z(t){return t&&"function"==typeof t.next}function F(t){var e=q(t);return e&&e.call(t)}function q(t){var e=t&&(R&&t[R]||t[I]);if("function"==typeof e)return e}function B(t){return t&&"number"==typeof t.length}function V(t){return null===t||void 0===t?ot():a(t)?t.toSeq():function(t){var e=ut(t)||"object"==typeof t&&new et(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}(t)}function K(t){return null===t||void 0===t?ot().toKeyedSeq():a(t)?s(t)?t.toSeq():t.fromEntrySeq():at(t)}function $(t){return null===t||void 0===t?ot():a(t)?s(t)?t.entrySeq():t.toIndexedSeq():st(t)}function J(t){return(null===t||void 0===t?ot():a(t)?s(t)?t.entrySeq():t:st(t)).toSetSeq()}H.prototype.toString=function(){return"[Iterator]"},H.KEYS=O,H.VALUES=P,H.ENTRIES=A,H.prototype.inspect=H.prototype.toSource=function(){return this.toString()},H.prototype[j]=function(){return this},e(V,n),V.of=function(){return V(arguments)},V.prototype.toSeq=function(){return this},V.prototype.toString=function(){return this.__toString("Seq {","}")},V.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},V.prototype.__iterate=function(t,e){return lt(this,t,e,!0)},V.prototype.__iterator=function(t,e){return ct(this,t,e,!0)},e(K,V),K.prototype.toKeyedSeq=function(){return this},e($,V),$.of=function(){return $(arguments)},$.prototype.toIndexedSeq=function(){return this},$.prototype.toString=function(){return this.__toString("Seq [","]")},$.prototype.__iterate=function(t,e){return lt(this,t,e,!1)},$.prototype.__iterator=function(t,e){return ct(this,t,e,!1)},e(J,V),J.of=function(){return J(arguments)},J.prototype.toSetSeq=function(){return this},V.isSeq=it,V.Keyed=K,V.Set=J,V.Indexed=$;var G,X,Q,Z="@@__IMMUTABLE_SEQ__@@";function tt(t){this._array=t,this.size=t.length}function et(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function nt(t){this._iterable=t,this.size=t.length||t.size}function rt(t){this._iterator=t,this._iteratorCache=[]}function it(t){return!(!t||!t[Z])}function ot(){return G||(G=new tt([]))}function at(t){var e=Array.isArray(t)?new tt(t).fromEntrySeq():z(t)?new rt(t).fromEntrySeq():U(t)?new nt(t).fromEntrySeq():"object"==typeof t?new et(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function st(t){var e=ut(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function ut(t){return B(t)?new tt(t):z(t)?new rt(t):U(t)?new nt(t):void 0}function lt(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,a=0;a<=o;a++){var s=i[n?o-a:a];if(!1===e(s[1],r?s[0]:a,t))return a+1}return a}return t.__iterateUncached(e,n)}function ct(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,a=0;return new H(function(){var t=i[n?o-a:a];return a++>o?{value:void 0,done:!0}:N(e,r?t[0]:a-1,t[1])})}return t.__iteratorUncached(e,n)}function dt(t,e){return e?function t(e,n,r,i){return Array.isArray(n)?e.call(i,r,$(n).map(function(r,i){return t(e,r,i,n)})):ft(n)?e.call(i,r,K(n).map(function(r,i){return t(e,r,i,n)})):n}(e,t,"",{"":t}):ht(t)}function ht(t){return Array.isArray(t)?$(t).map(ht).toList():ft(t)?K(t).map(ht).toMap():t}function ft(t){return t&&(t.constructor===Object||void 0===t.constructor)}function pt(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function mt(t,e){if(t===e)return!0;if(!a(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||s(t)!==s(e)||u(t)!==u(e)||c(t)!==c(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!l(t);if(c(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&pt(i[1],t)&&(n||pt(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var d=!0,h=e.__iterate(function(e,r){if(n?!t.has(e):i?!pt(e,t.get(r,y)):!pt(t.get(r,y),e))return d=!1,!1});return d&&t.size===h}function _t(t,e){if(!(this instanceof _t))return new _t(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(X)return X;X=this}}function vt(t,e){if(!t)throw new Error(e)}function yt(t,e,n){if(!(this instanceof yt))return new yt(t,e,n);if(vt(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),er?{value:void 0,done:!0}:N(t,i,n[e?r-i++:i++])})},e(et,K),et.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},et.prototype.has=function(t){return this._object.hasOwnProperty(t)},et.prototype.__iterate=function(t,e){for(var n=this._object,r=this._keys,i=r.length-1,o=0;o<=i;o++){var a=r[e?i-o:o];if(!1===t(n[a],a,this))return o+1}return o},et.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new H(function(){var a=r[e?i-o:o];return o++>i?{value:void 0,done:!0}:N(t,a,n[a])})},et.prototype[p]=!0,e(nt,$),nt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var n=this._iterable,r=F(n),i=0;if(z(r))for(var o;!(o=r.next()).done&&!1!==t(o.value,i++,this););return i},nt.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=F(n);if(!z(r))return new H(W);var i=0;return new H(function(){var e=r.next();return e.done?e:N(t,i++,e.value)})},e(rt,$),rt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var n,r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return N(t,i,r[i++])})},e(_t,$),_t.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},_t.prototype.get=function(t,e){return this.has(t)?this._value:e},_t.prototype.includes=function(t){return pt(this._value,t)},_t.prototype.slice=function(t,e){var n=this.size;return x(t,e,n)?this:new _t(this._value,E(e,n)-Y(t,n))},_t.prototype.reverse=function(){return this},_t.prototype.indexOf=function(t){return pt(this._value,t)?0:-1},_t.prototype.lastIndexOf=function(t){return pt(this._value,t)?this.size:-1},_t.prototype.__iterate=function(t,e){for(var n=0;n=0&&e=0&&nn?{value:void 0,done:!0}:N(t,o++,a)})},yt.prototype.equals=function(t){return t instanceof yt?this._start===t._start&&this._end===t._end&&this._step===t._step:mt(this,t)},e(gt,n),e(Mt,gt),e(bt,gt),e(wt,gt),gt.Keyed=Mt,gt.Indexed=bt,gt.Set=wt;var Lt="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var n=65535&(t|=0),r=65535&(e|=0);return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0};function kt(t){return t>>>1&1073741824|3221225471&t}function Tt(t){if(!1===t||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(!1===(t=t.valueOf())||null===t||void 0===t))return 0;if(!0===t)return 1;var e=typeof t;if("number"===e){if(t!=t||t===1/0)return 0;var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)n^=t/=4294967295;return kt(n)}if("string"===e)return t.length>Pt?function(t){var e=It[t];return void 0===e&&(e=Dt(t),Rt===At&&(Rt=0,It={}),Rt++,It[t]=e),e}(t):Dt(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return function(t){var e;if(Et&&void 0!==(e=St.get(t)))return e;if(void 0!==(e=t[Ot]))return e;if(!Yt){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[Ot]))return e;if(void 0!==(e=function(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}(t)))return e}if(e=++Ct,1073741824&Ct&&(Ct=0),Et)St.set(t,e);else{if(void 0!==xt&&!1===xt(t))throw new Error("Non-extensible objects are not allowed as keys.");if(Yt)Object.defineProperty(t,Ot,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[Ot]=e;else{if(void 0===t.nodeType)throw new Error("Unable to set a non-enumerable property on object.");t[Ot]=e}}return e}(t);if("function"==typeof t.toString)return Dt(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function Dt(t){for(var e=0,n=0;n=e.length)throw new Error("Missing value for key: "+e[n]);t.set(e[n],e[n+1])}})},Ht.prototype.toString=function(){return this.__toString("Map {","}")},Ht.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ht.prototype.set=function(t,e){return Zt(this,t,e)},Ht.prototype.setIn=function(t,e){return this.updateIn(t,y,function(){return e})},Ht.prototype.remove=function(t){return Zt(this,t,y)},Ht.prototype.deleteIn=function(t){return this.updateIn(t,function(){return y})},Ht.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ht.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=function t(e,n,r,i){var o=e===y,a=n.next();if(a.done){var s=o?r:e,u=i(s);return u===s?e:u}vt(o||e&&e.set,"invalid keyPath");var l=a.value,c=o?y:e.get(l,y),d=t(c,n,r,i);return d===c?e:d===y?e.remove(l):(o?Qt():e).set(l,d)}(this,nn(t),e,n);return r===y?void 0:r},Ht.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Qt()},Ht.prototype.merge=function(){return re(this,void 0,arguments)},Ht.prototype.mergeWith=function(e){var n=t.call(arguments,1);return re(this,e,n)},Ht.prototype.mergeIn=function(e){var n=t.call(arguments,1);return this.updateIn(e,Qt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,n):n[n.length-1]})},Ht.prototype.mergeDeep=function(){return re(this,ie,arguments)},Ht.prototype.mergeDeepWith=function(e){var n=t.call(arguments,1);return re(this,oe(e),n)},Ht.prototype.mergeDeepIn=function(e){var n=t.call(arguments,1);return this.updateIn(e,Qt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,n):n[n.length-1]})},Ht.prototype.sort=function(t){return Ye(Be(this,t))},Ht.prototype.sortBy=function(t,e){return Ye(Be(this,e,t))},Ht.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ht.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new L)},Ht.prototype.asImmutable=function(){return this.__ensureOwner()},Ht.prototype.wasAltered=function(){return this.__altered},Ht.prototype.__iterator=function(t,e){return new $t(this,t,e)},Ht.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ht.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Xt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ht.isMap=Nt;var Wt,Ut="@@__IMMUTABLE_MAP__@@",zt=Ht.prototype;function Ft(t,e){this.ownerID=t,this.entries=e}function qt(t,e,n){this.ownerID=t,this.bitmap=e,this.nodes=n}function Bt(t,e,n){this.ownerID=t,this.count=e,this.nodes=n}function Vt(t,e,n){this.ownerID=t,this.keyHash=e,this.entries=n}function Kt(t,e,n){this.ownerID=t,this.keyHash=e,this.entry=n}function $t(t,e,n){this._type=e,this._reverse=n,this._stack=t._root&&Gt(t._root)}function Jt(t,e){return N(t,e[0],e[1])}function Gt(t,e){return{node:t,index:0,__prev:e}}function Xt(t,e,n,r){var i=Object.create(zt);return i.size=t,i._root=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Qt(){return Wt||(Wt=Xt(0))}function Zt(t,e,n){var r,i;if(t._root){var o=b(g),a=b(M);if(r=te(t._root,t.__ownerID,0,void 0,e,n,o,a),!a.value)return t;i=t.size+(o.value?n===y?-1:1:0)}else{if(n===y)return t;i=1,r=new Ft(t.__ownerID,[[e,n]])}return t.__ownerID?(t.size=i,t._root=r,t.__hash=void 0,t.__altered=!0,t):r?Xt(i,r):Qt()}function te(t,e,n,r,i,o,a,s){return t?t.update(e,n,r,i,o,a,s):o===y?t:(w(s),w(a),new Kt(e,r,[i,o]))}function ee(t){return t.constructor===Kt||t.constructor===Vt}function ne(t,e,n,r,i){if(t.keyHash===r)return new Vt(e,r,[t.entry,i]);var o,a=(0===n?t.keyHash:t.keyHash>>>n)&v,s=(0===n?r:r>>>n)&v,u=a===s?[ne(t,e,n+m,r,i)]:(o=new Kt(e,r,i),a>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,t+=t>>8,127&(t+=t>>16)}function ue(t,e,n,r){var i=r?t:k(t);return i[e]=n,i}zt[Ut]=!0,zt.delete=zt.remove,zt.removeIn=zt.deleteIn,Ft.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,a=i.length;o=le)return function(t,e,n,r){t||(t=new L);for(var i=new Kt(t,Tt(n),[n,r]),o=0;o>>t)&v),o=this.bitmap;return 0==(o&i)?r:this.nodes[se(o&i-1)].get(t+m,e,n,r)},qt.prototype.update=function(t,e,n,r,i,o,a){void 0===n&&(n=Tt(r));var s=(0===e?n:n>>>e)&v,u=1<=ce)return function(t,e,n,r,i){for(var o=0,a=new Array(_),s=0;0!==n;s++,n>>>=1)a[s]=1&n?e[o++]:void 0;return a[r]=i,new Bt(t,o+1,a)}(t,h,l,s,p);if(c&&!p&&2===h.length&&ee(h[1^d]))return h[1^d];if(c&&p&&1===h.length&&ee(p))return p;var g=t&&t===this.ownerID,M=c?p?l:l^u:l|u,b=c?p?ue(h,d,p,g):function(t,e,n){var r=t.length-1;if(n&&e===r)return t.pop(),t;for(var i=new Array(r),o=0,a=0;a>>t)&v,o=this.nodes[i];return o?o.get(t+m,e,n,r):r},Bt.prototype.update=function(t,e,n,r,i,o,a){void 0===n&&(n=Tt(r));var s=(0===e?n:n>>>e)&v,u=i===y,l=this.nodes,c=l[s];if(u&&!c)return this;var d=te(c,t,e+m,n,r,i,o,a);if(d===c)return this;var h=this.count;if(c){if(!d&&--h0&&r<_?be(0,r,m,null,new _e(n.toArray())):e.withMutations(function(t){t.setSize(r),n.forEach(function(e,n){return t.set(n,e)})}))}function fe(t){return!(!t||!t[pe])}e(he,bt),he.of=function(){return this(arguments)},he.prototype.toString=function(){return this.__toString("List [","]")},he.prototype.get=function(t,e){if((t=D(this,t))>=0&&t=t.size||e<0)return t.withMutations(function(t){e<0?De(t,e).set(0,n):De(t,0,e+1).set(e,n)});e+=t._origin;var r=t._tail,i=t._root,o=b(M);return e>=xe(t._capacity)?r=Le(r,t.__ownerID,0,e,n,o):i=Le(i,t.__ownerID,t._level,e,n,o),o.value?t.__ownerID?(t._root=i,t._tail=r,t.__hash=void 0,t.__altered=!0,t):be(t._origin,t._capacity,t._level,i,r):t}(this,t,e)},he.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},he.prototype.insert=function(t,e){return this.splice(t,0,e)},he.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=m,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):we()},he.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations(function(n){De(n,0,e+t.length);for(var r=0;r>>e&v;if(r>=this.array.length)return new _e([],t);var i,o=0===r;if(e>0){var a=this.array[r];if((i=a&&a.removeBefore(t,e-m,n))===a&&o)return this}if(o&&!i)return this;var s=ke(this,t);if(!o)for(var u=0;u>>e&v;if(i>=this.array.length)return this;if(e>0){var o=this.array[i];if((r=o&&o.removeAfter(t,e-m,n))===o&&i===this.array.length-1)return this}var a=ke(this,t);return a.array.splice(i+1),r&&(a.array[i]=r),a};var ve,ye,ge={};function Me(t,e){var n=t._origin,r=t._capacity,i=xe(r),o=t._tail;return a(t._root,t._level,0);function a(t,s,u){return 0===s?function(t,a){var s=a===i?o&&o.array:t&&t.array,u=a>n?0:n-a,l=r-a;return l>_&&(l=_),function(){if(u===l)return ge;var t=e?--l:u++;return s&&s[t]}}(t,u):function(t,i,o){var s,u=t&&t.array,l=o>n?0:n-o>>i,c=1+(r-o>>i);return c>_&&(c=_),function(){for(;;){if(s){var t=s();if(t!==ge)return t;s=null}if(l===c)return ge;var n=e?--c:l++;s=a(u&&u[n],i-m,o+(n<>>n&v,u=t&&s0){var l=t&&t.array[s],c=Le(l,e,n-m,r,i,o);return c===l?t:((a=ke(t,e)).array[s]=c,a)}return u&&t.array[s]===i?t:(w(o),a=ke(t,e),void 0===i&&s===a.array.length-1?a.array.pop():a.array[s]=i,a)}function ke(t,e){return e&&t&&e===t.ownerID?t:new _e(t?t.array.slice():[],e)}function Te(t,e){if(e>=xe(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&v],r-=m;return n}}function De(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var r=t.__ownerID||new L,i=t._origin,o=t._capacity,a=i+e,s=void 0===n?o:n<0?o+n:i+n;if(a===i&&s===o)return t;if(a>=s)return t.clear();for(var u=t._level,l=t._root,c=0;a+c<0;)l=new _e(l&&l.array.length?[void 0,l]:[],r),c+=1<<(u+=m);c&&(a+=c,i+=c,s+=c,o+=c);for(var d=xe(o),h=xe(s);h>=1<d?new _e([],r):f;if(f&&h>d&&am;y-=m){var g=d>>>y&v;_=_.array[g]=ke(_.array[g],r)}_.array[d>>>m&v]=f}if(s=h)a-=h,s-=h,u=m,l=null,p=p&&p.removeBefore(r,0,a);else if(a>i||h>>u&v;if(M!==h>>>u&v)break;M&&(c+=(1<i&&(l=l.removeBefore(r,u,a-c)),l&&ho&&(o=l.size),a(u)||(l=l.map(function(t){return dt(t)})),r.push(l)}return o>t.size&&(t=t.setSize(o)),ae(t,e,r)}function xe(t){return t<_?0:t-1>>>m<=_&&a.size>=2*o.size?(i=a.filter(function(t,e){return void 0!==t&&s!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=s===a.size-1?a.pop():a.set(s,void 0))}else if(u){if(n===a.get(s)[1])return t;r=o,i=a.set(s,[e,n])}else r=o.set(e,a.size),i=a.set(a.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):Ce(r,i)}function Ae(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function Re(t){this._iter=t,this.size=t.size}function Ie(t){this._iter=t,this.size=t.size}function je(t){this._iter=t,this.size=t.size}function He(t){var e=Ze(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=tn,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return!1!==e(n,t,r)},n)},e.__iteratorUncached=function(e,n){if(e===A){var r=t.__iterator(e,n);return new H(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===P?O:P,n)},e}function Ne(t,e,n){var r=Ze(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,y);return o===y?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,a){return!1!==r(e.call(n,t,i,a),i,o)},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(A,i);return new H(function(){var i=o.next();if(i.done)return i;var a=i.value,s=a[0];return N(r,s,e.call(n,a[1],s,t),i)})},r}function We(t,e){var n=Ze(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=He(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=tn,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function Ue(t,e,n,r){var i=Ze(t);return r&&(i.has=function(r){var i=t.get(r,y);return i!==y&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,y);return o!==y&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var a=this,s=0;return t.__iterate(function(t,o,u){if(e.call(n,t,o,u))return s++,i(t,r?o:s-1,a)},o),s},i.__iteratorUncached=function(i,o){var a=t.__iterator(A,o),s=0;return new H(function(){for(;;){var o=a.next();if(o.done)return o;var u=o.value,l=u[0],c=u[1];if(e.call(n,c,l,t))return N(i,r?l:s++,c,o)}})},i}function ze(t,e,n,r){var i=t.size;if(void 0!==e&&(e|=0),void 0!==n&&(n===1/0?n=i:n|=0),x(e,n,i))return t;var o=Y(e,i),a=E(n,i);if(o!=o||a!=a)return ze(t.toSeq().cacheResult(),e,n,r);var s,u=a-o;u==u&&(s=u<0?0:u);var l=Ze(t);return l.size=0===s?s:t.size&&s||void 0,!r&&it(t)&&s>=0&&(l.get=function(e,n){return(e=D(this,e))>=0&&es)return{value:void 0,done:!0};var t=i.next();return r||e===P?t:N(e,u-1,e===O?void 0:t.value[1],t)})},l}function Fe(t,e,n,r){var i=Ze(t);return i.__iterateUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,u=0;return t.__iterate(function(t,o,l){if(!s||!(s=e.call(n,t,o,l)))return u++,i(t,r?o:u-1,a)}),u},i.__iteratorUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(A,o),u=!0,l=0;return new H(function(){var t,o,c;do{if((t=s.next()).done)return r||i===P?t:N(i,l++,i===O?void 0:t.value[1],t);var d=t.value;o=d[0],c=d[1],u&&(u=e.call(n,c,o,a))}while(u);return i===A?t:N(i,o,c,t)})},i}function qe(t,e,n){var r=Ze(t);return r.__iterateUncached=function(r,i){var o=0,s=!1;return function t(u,l){var c=this;u.__iterate(function(i,u){return(!e||l0}function $e(t,e,r){var i=Ze(t);return i.size=new tt(r).map(function(t){return t.size}).min(),i.__iterate=function(t,e){for(var n,r=this.__iterator(P,e),i=0;!(n=r.next()).done&&!1!==t(n.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=r.map(function(t){return t=n(t),F(i?t.reverse():t)}),a=0,s=!1;return new H(function(){var n;return s||(n=o.map(function(t){return t.next()}),s=n.some(function(t){return t.done})),s?{value:void 0,done:!0}:N(t,a++,e.apply(null,n.map(function(t){return t.value})))})},i}function Je(t,e){return it(t)?e:t.constructor(e)}function Ge(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Xe(t){return jt(t.size),T(t)}function Qe(t){return s(t)?r:u(t)?i:o}function Ze(t){return Object.create((s(t)?K:u(t)?$:J).prototype)}function tn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):V.prototype.cacheResult.call(this)}function en(t,e){return t>e?1:t=0;n--)e={value:arguments[n],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Sn(t,e)},wn.prototype.pushAll=function(t){if(0===(t=i(t)).size)return this;jt(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):Sn(e,n)},wn.prototype.pop=function(){return this.slice(1)},wn.prototype.unshift=function(){return this.push.apply(this,arguments)},wn.prototype.unshiftAll=function(t){return this.pushAll(t)},wn.prototype.shift=function(){return this.pop.apply(this,arguments)},wn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):xn()},wn.prototype.slice=function(t,e){if(x(t,e,this.size))return this;var n=Y(t,this.size),r=E(e,this.size);if(r!==this.size)return bt.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):Sn(i,o)},wn.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Sn(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},wn.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var n=0,r=this._head;r&&!1!==t(r.value,n++,this);)r=r.next;return n},wn.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new H(function(){if(r){var e=r.value;return r=r.next,N(t,n++,e)}return{value:void 0,done:!0}})},wn.isStack=Ln;var kn,Tn="@@__IMMUTABLE_STACK__@@",Dn=wn.prototype;function Sn(t,e,n,r){var i=Object.create(Dn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function xn(){return kn||(kn=Sn(0))}function Yn(t,e){var n=function(n){t.prototype[n]=e[n]};return Object.keys(e).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(n),t}Dn[Tn]=!0,Dn.withMutations=zt.withMutations,Dn.asMutable=zt.asMutable,Dn.asImmutable=zt.asImmutable,Dn.wasAltered=zt.wasAltered,n.Iterator=H,Yn(n,{toArray:function(){jt(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate(function(e,n){t[n]=e}),t},toIndexedSeq:function(){return new Re(this)},toJS:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJS?t.toJS():t}).__toJS()},toJSON:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t}).__toJS()},toKeyedSeq:function(){return new Ae(this,!0)},toMap:function(){return Ht(this.toKeyedSeq())},toObject:function(){jt(this.size);var t={};return this.__iterate(function(e,n){t[n]=e}),t},toOrderedMap:function(){return Ye(this.toKeyedSeq())},toOrderedSet:function(){return _n(s(this)?this.valueSeq():this)},toSet:function(){return un(s(this)?this.valueSeq():this)},toSetSeq:function(){return new Ie(this)},toSeq:function(){return u(this)?this.toIndexedSeq():s(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return wn(s(this)?this.valueSeq():this)},toList:function(){return he(s(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){var e=t.call(arguments,0);return Je(this,function(t,e){var n=s(t),i=[t].concat(e).map(function(t){return a(t)?n&&(t=r(t)):t=n?at(t):st(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===i.length)return t;if(1===i.length){var o=i[0];if(o===t||n&&s(o)||u(t)&&u(o))return o}var l=new tt(i);return n?l=l.toKeyedSeq():u(t)||(l=l.toSetSeq()),(l=l.flatten(!0)).size=i.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),l}(this,e))},includes:function(t){return this.some(function(e){return pt(e,t)})},entries:function(){return this.__iterator(A)},every:function(t,e){jt(this.size);var n=!0;return this.__iterate(function(r,i,o){if(!t.call(e,r,i,o))return n=!1,!1}),n},filter:function(t,e){return Je(this,Ue(this,t,e,!0))},find:function(t,e,n){var r=this.findEntry(t,e);return r?r[1]:n},forEach:function(t,e){return jt(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){jt(this.size),t=void 0!==t?""+t:",";var e="",n=!0;return this.__iterate(function(r){n?n=!1:e+=t,e+=null!==r&&void 0!==r?r.toString():""}),e},keys:function(){return this.__iterator(O)},map:function(t,e){return Je(this,Ne(this,t,e))},reduce:function(t,e,n){var r,i;return jt(this.size),arguments.length<2?i=!0:r=e,this.__iterate(function(e,o,a){i?(i=!1,r=e):r=t.call(n,r,e,o,a)}),r},reduceRight:function(t,e,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return Je(this,We(this,!0))},slice:function(t,e){return Je(this,ze(this,t,e,!0))},some:function(t,e){return!this.every(An(t),e)},sort:function(t){return Je(this,Be(this,t))},values:function(){return this.__iterator(P)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(t,e){return T(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return function(t,e,n){var r=Ht().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}(this,t,e)},equals:function(t){return mt(this,t)},entrySeq:function(){var t=this;if(t._cache)return new tt(t._cache);var e=t.toSeq().map(Pn).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(An(t),e)},findEntry:function(t,e,n){var r=n;return this.__iterate(function(n,i,o){if(t.call(e,n,i,o))return r=[i,n],!1}),r},findKey:function(t,e){var n=this.findEntry(t,e);return n&&n[0]},findLast:function(t,e,n){return this.toKeyedSeq().reverse().find(t,e,n)},findLastEntry:function(t,e,n){return this.toKeyedSeq().reverse().findEntry(t,e,n)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(S)},flatMap:function(t,e){return Je(this,function(t,e,n){var r=Qe(t);return t.toSeq().map(function(i,o){return r(e.call(n,i,o,t))}).flatten(!0)}(this,t,e))},flatten:function(t){return Je(this,qe(this,t,!0))},fromEntrySeq:function(){return new je(this)},get:function(t,e){return this.find(function(e,n){return pt(n,t)},void 0,e)},getIn:function(t,e){for(var n,r=this,i=nn(t);!(n=i.next()).done;){var o=n.value;if((r=r&&r.get?r.get(o,y):y)===y)return e}return r},groupBy:function(t,e){return function(t,e,n){var r=s(t),i=(c(t)?Ye():Ht()).asMutable();t.__iterate(function(o,a){i.update(e.call(n,o,a,t),function(t){return(t=t||[]).push(r?[a,o]:o),t})});var o=Qe(t);return i.map(function(e){return Je(t,o(e))})}(this,t,e)},has:function(t){return this.get(t,y)!==y},hasIn:function(t){return this.getIn(t,y)!==y},isSubset:function(t){return t="function"==typeof t.includes?t:n(t),this.every(function(e){return t.includes(e)})},isSuperset:function(t){return(t="function"==typeof t.isSubset?t:n(t)).isSubset(this)},keyOf:function(t){return this.findKey(function(e){return pt(e,t)})},keySeq:function(){return this.toSeq().map(On).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return Ve(this,t)},maxBy:function(t,e){return Ve(this,e,t)},min:function(t){return Ve(this,t?Rn(t):Hn)},minBy:function(t,e){return Ve(this,e?Rn(e):Hn,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return Je(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return Je(this,Fe(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(An(t),e)},sortBy:function(t,e){return Je(this,Be(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return Je(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return Je(this,function(t,e,n){var r=Ze(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var a=0;return t.__iterate(function(t,i,s){return e.call(n,t,i,s)&&++a&&r(t,i,o)}),a},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var a=t.__iterator(A,i),s=!0;return new H(function(){if(!s)return{value:void 0,done:!0};var t=a.next();if(t.done)return t;var i=t.value,u=i[0],l=i[1];return e.call(n,l,u,o)?r===A?t:N(r,u,l,t):(s=!1,{value:void 0,done:!0})})},r}(this,t,e))},takeUntil:function(t,e){return this.takeWhile(An(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function(t){if(t.size===1/0)return 0;var e=c(t),n=s(t),r=e?1:0;return function(t,e){return e=Lt(e,3432918353),e=Lt(e<<15|e>>>-15,461845907),e=Lt(e<<13|e>>>-13,5),e=Lt((e=(e+3864292196|0)^t)^e>>>16,2246822507),e=kt((e=Lt(e^e>>>13,3266489909))^e>>>16)}(t.__iterate(n?e?function(t,e){r=31*r+Nn(Tt(t),Tt(e))|0}:function(t,e){r=r+Nn(Tt(t),Tt(e))|0}:e?function(t){r=31*r+Tt(t)|0}:function(t){r=r+Tt(t)|0}),r)}(this))}});var En=n.prototype;En[d]=!0,En[j]=En.values,En.__toJS=En.toArray,En.__toStringMapper=In,En.inspect=En.toSource=function(){return this.toString()},En.chain=En.flatMap,En.contains=En.includes,Yn(r,{flip:function(){return Je(this,He(this))},mapEntries:function(t,e){var n=this,r=0;return Je(this,this.toSeq().map(function(i,o){return t.call(e,[o,i],r++,n)}).fromEntrySeq())},mapKeys:function(t,e){var n=this;return Je(this,this.toSeq().flip().map(function(r,i){return t.call(e,r,i,n)}).flip())}});var Cn=r.prototype;function On(t,e){return e}function Pn(t,e){return[e,t]}function An(t){return function(){return!t.apply(this,arguments)}}function Rn(t){return function(){return-t.apply(this,arguments)}}function In(t){return"string"==typeof t?JSON.stringify(t):String(t)}function jn(){return k(arguments)}function Hn(t,e){return te?-1:0}function Nn(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}return Cn[h]=!0,Cn[j]=En.entries,Cn.__toJS=En.toObject,Cn.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+In(t)},Yn(i,{toKeyedSeq:function(){return new Ae(this,!1)},filter:function(t,e){return Je(this,Ue(this,t,e,!1))},findIndex:function(t,e){var n=this.findEntry(t,e);return n?n[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return Je(this,We(this,!1))},slice:function(t,e){return Je(this,ze(this,t,e,!1))},splice:function(t,e){var n=arguments.length;if(e=Math.max(0|e,0),0===n||2===n&&!e)return this;t=Y(t,t<0?this.count():this.size);var r=this.slice(0,t);return Je(this,1===n?r:r.concat(k(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var n=this.findLastEntry(t,e);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(t){return Je(this,qe(this,t,!1))},get:function(t,e){return(t=D(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return(t=D(this,t))>=0&&(void 0!==this.size?this.size===1/0||t0&&e.forEach(function(t){o.remove(t)}),o.appendTo(n.scrollbarXRail,t)),t.contains(n.scrollbarYRail)||((e=o.queryChildren(t,".ps-scrollbar-y-rail")).length>0&&e.forEach(function(t){o.remove(t)}),o.appendTo(n.scrollbarYRail,t)),!n.settings.suppressScrollX&&n.containerWidth+n.settings.scrollXMarginOffset=n.railXWidth-n.scrollbarXWidth&&(n.scrollbarXLeft=n.railXWidth-n.scrollbarXWidth),n.scrollbarYTop>=n.railYHeight-n.scrollbarYHeight&&(n.scrollbarYTop=n.railYHeight-n.scrollbarYHeight),function(t,e){var n={width:e.railXWidth};e.isRtl?n.left=e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:n.left=t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-t.scrollTop:n.top=e.scrollbarXTop+t.scrollTop,o.css(e.scrollbarXRail,n);var r={top:t.scrollTop,height:e.railYHeight};e.isScrollbarYUsingRight?e.isRtl?r.right=e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth:r.right=e.scrollbarYRight-t.scrollLeft:e.isRtl?r.left=e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:r.left=e.scrollbarYLeft+t.scrollLeft,o.css(e.scrollbarYRail,r),o.css(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),o.css(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})}(t,n),n.scrollbarXActive?i.add(t,"ps-active-x"):(i.remove(t,"ps-active-x"),n.scrollbarXWidth=0,n.scrollbarXLeft=0,s(t,"left",0)),n.scrollbarYActive?i.add(t,"ps-active-y"):(i.remove(t,"ps-active-y"),n.scrollbarYHeight=0,n.scrollbarYTop=0,s(t,"top",0))}},JVSJ:function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},Jh1g:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e=0||Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}(t,["autoWidth","viewportOffsetTop","children"]),a=this.state,u=a.offsetTop,c=a.offsetBottom,d=a.width;delete o.container;var h=Math.max(u,n||0),f=this.props,p=f.affixStyle,m=f.bottomStyle;return e&&(p=r({width:d},p),m=r({width:d},m)),s.default.createElement("div",null,s.default.createElement("div",{ref:"positioner"}),s.default.createElement(l.default,r({},o,{offsetTop:h,viewportOffsetTop:n,offsetBottom:c,affixStyle:p,bottomStyle:m}),i))}}]),e}();_.propTypes=r({},l.default.propTypes,{container:s.default.PropTypes.oneOfType([u.default,s.default.PropTypes.func]),autoWidth:s.default.PropTypes.bool}),_.defaultProps={viewportOffsetTop:0,autoWidth:!0},e.default=_,t.exports=e.default},JuzC:function(t,e,n){"use strict";var r=n("oEPF"),i={getChildMapping:function(t,e){return t?r(t):t},mergeChildMappings:function(t,e){function n(n){return e.hasOwnProperty(n)?e[n]:t[n]}t=t||{},e=e||{};var r,i={},o=[];for(var a in t)e.hasOwnProperty(a)?o.length&&(i[a]=o,o=[]):o.push(a);var s={};for(var u in e){if(i.hasOwnProperty(u))for(r=0;r10&&t<20}function i(t){return e[t].split("_")}function o(t,e,o,a){var s=t+" ";return 1===t?s+n(0,e,o[0],a):e?s+(r(t)?i(o)[1]:i(o)[0]):a?s+i(o)[1]:s+(r(t)?i(o)[1]:i(o)[2])}t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(t,e,n,r){return e?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"},m:n,mm:o,h:n,hh:o,d:n,dd:o,M:n,MM:o,y:n,yy:o},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})}(n("wd/R"))},"K/tc":function(t,e,n){!function(t){"use strict";t.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n("wd/R"))},K5fH:function(t,e,n){t.exports=n("WSL2"),window.jQuery=t.exports},K669:function(t,e,n){"use strict";e.__esModule=!0,e.isPromise=function(t){return t&&"function"==typeof t.then}},KDbw:function(t,e,n){"use strict";!function(){var t="chrome"in window&&window.navigator.userAgent.indexOf("Edge")<0;if(!("u2f"in window)&&t){var e,n=window.u2f={};n.EXTENSION_ID="kmendfapggjehodndflmmgagdbamhnfd",n.MessageTypes={U2F_REGISTER_REQUEST:"u2f_register_request",U2F_REGISTER_RESPONSE:"u2f_register_response",U2F_SIGN_REQUEST:"u2f_sign_request",U2F_SIGN_RESPONSE:"u2f_sign_response",U2F_GET_API_VERSION_REQUEST:"u2f_get_api_version_request",U2F_GET_API_VERSION_RESPONSE:"u2f_get_api_version_response"},n.ErrorCodes={OK:0,OTHER_ERROR:1,BAD_REQUEST:2,CONFIGURATION_UNSUPPORTED:3,DEVICE_INELIGIBLE:4,TIMEOUT:5},n.U2fRequest,n.U2fResponse,n.Error,n.Transport,n.Transports,n.SignRequest,n.SignResponse,n.RegisterRequest,n.RegisterResponse,n.RegisteredKey,n.GetJsApiVersionResponse,n.getMessagePort=function(t){if("undefined"!=typeof chrome&&chrome.runtime){var e={type:n.MessageTypes.U2F_SIGN_REQUEST,signRequests:[]};chrome.runtime.sendMessage(n.EXTENSION_ID,e,function(){chrome.runtime.lastError?n.getIframePort_(t):n.getChromeRuntimePort_(t)})}else n.isAndroidChrome_()?n.getAuthenticatorPort_(t):n.isIosChrome_()?n.getIosPort_(t):n.getIframePort_(t)},n.isAndroidChrome_=function(){var t=navigator.userAgent;return-1!=t.indexOf("Chrome")&&-1!=t.indexOf("Android")},n.isIosChrome_=function(){return["iPhone","iPad","iPod"].indexOf(navigator.platform)>-1},n.getChromeRuntimePort_=function(t){var e=chrome.runtime.connect(n.EXTENSION_ID,{includeTlsChannelId:!0});setTimeout(function(){t(new n.WrappedChromeRuntimePort_(e))},0)},n.getAuthenticatorPort_=function(t){setTimeout(function(){t(new n.WrappedAuthenticatorPort_)},0)},n.getIosPort_=function(t){setTimeout(function(){t(new n.WrappedIosPort_)},0)},n.WrappedChromeRuntimePort_=function(t){this.port_=t},n.formatSignRequest_=function(t,r,i,o,a){if(void 0===e||e<1.1){for(var s=[],u=0;u=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},"L+VR":function(t,e,n){"use strict";var r=n("RttE"),i=n("1IEh"),o=n("FDgc"),a=n("qtIE"),s=n("35u6"),u=n("GWe7"),l={};function c(t){return t.getAttribute("data-ps-id")}e.add=function(t){var e=u();return function(t,e){t.setAttribute("data-ps-id",e)}(t,e),l[e]=new function(t){var e=this;function n(){i.add(t,"ps-focus")}function u(){i.remove(t,"ps-focus")}e.settings=r.clone(o),e.containerWidth=null,e.containerHeight=null,e.contentWidth=null,e.contentHeight=null,e.isRtl="rtl"===a.css(t,"direction"),e.isNegativeScroll=function(){var e,n=t.scrollLeft;return t.scrollLeft=-1,e=t.scrollLeft<0,t.scrollLeft=n,e}(),e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,e.event=new s,e.ownerDocument=t.ownerDocument||document,e.scrollbarXRail=a.appendTo(a.e("div","ps-scrollbar-x-rail"),t),e.scrollbarX=a.appendTo(a.e("div","ps-scrollbar-x"),e.scrollbarXRail),e.scrollbarX.setAttribute("tabindex",0),e.event.bind(e.scrollbarX,"focus",n),e.event.bind(e.scrollbarX,"blur",u),e.scrollbarXActive=null,e.scrollbarXWidth=null,e.scrollbarXLeft=null,e.scrollbarXBottom=r.toInt(a.css(e.scrollbarXRail,"bottom")),e.isScrollbarXUsingBottom=e.scrollbarXBottom==e.scrollbarXBottom,e.scrollbarXTop=e.isScrollbarXUsingBottom?null:r.toInt(a.css(e.scrollbarXRail,"top")),e.railBorderXWidth=r.toInt(a.css(e.scrollbarXRail,"borderLeftWidth"))+r.toInt(a.css(e.scrollbarXRail,"borderRightWidth")),a.css(e.scrollbarXRail,"display","block"),e.railXMarginWidth=r.toInt(a.css(e.scrollbarXRail,"marginLeft"))+r.toInt(a.css(e.scrollbarXRail,"marginRight")),a.css(e.scrollbarXRail,"display",""),e.railXWidth=null,e.railXRatio=null,e.scrollbarYRail=a.appendTo(a.e("div","ps-scrollbar-y-rail"),t),e.scrollbarY=a.appendTo(a.e("div","ps-scrollbar-y"),e.scrollbarYRail),e.scrollbarY.setAttribute("tabindex",0),e.event.bind(e.scrollbarY,"focus",n),e.event.bind(e.scrollbarY,"blur",u),e.scrollbarYActive=null,e.scrollbarYHeight=null,e.scrollbarYTop=null,e.scrollbarYRight=r.toInt(a.css(e.scrollbarYRail,"right")),e.isScrollbarYUsingRight=e.scrollbarYRight==e.scrollbarYRight,e.scrollbarYLeft=e.isScrollbarYUsingRight?null:r.toInt(a.css(e.scrollbarYRail,"left")),e.scrollbarYOuterWidth=e.isRtl?r.outerWidth(e.scrollbarY):null,e.railBorderYWidth=r.toInt(a.css(e.scrollbarYRail,"borderTopWidth"))+r.toInt(a.css(e.scrollbarYRail,"borderBottomWidth")),a.css(e.scrollbarYRail,"display","block"),e.railYMarginHeight=r.toInt(a.css(e.scrollbarYRail,"marginTop"))+r.toInt(a.css(e.scrollbarYRail,"marginBottom")),a.css(e.scrollbarYRail,"display",""),e.railYHeight=null,e.railYRatio=null}(t),l[e]},e.remove=function(t){delete l[c(t)],function(t){t.removeAttribute("data-ps-id")}(t)},e.get=function(t){return l[c(t)]}},L7e8:function(t,e,n){!function(e,n){t.exports=n()}(0,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}return n.m=t,n.c=e,n.p="",n(0)}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),n(1);var i=r(n(2)),o=r(n(6)),a=r(n(3)),s=n(5),u=n(11),l=n(10),c=n(9),d=r(n(7));e.default={Reactor:o.default,Store:i.default,Immutable:a.default,isKeyPath:u.isKeyPath,isGetter:l.isGetter,toJS:s.toJS,toImmutable:s.toImmutable,isImmutable:s.isImmutable,createReactMixin:d.default,LRUCache:c.LRUCache},t.exports=e.default},function(t,e){"use strict";try{window.console&&console.log||(console={log:function(){},debug:function(){},info:function(){},warn:function(){},error:function(){}})}catch(t){}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n>>0;if(""+n!==e||4294967295===n)return NaN;e=n}return e<0?T(t)+e:e}function S(){return!0}function x(t,e,n){return(0===t||void 0!==n&&t<=-n)&&(void 0===e||void 0!==n&&e>=n)}function Y(t,e){return C(t,e,0)}function E(t,e){return C(t,e,e)}function C(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}var O=0,P=1,A=2,R="function"==typeof Symbol&&Symbol.iterator,I="@@iterator",j=R||I;function H(t){this.next=t}function N(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function W(){return{value:void 0,done:!0}}function U(t){return!!q(t)}function z(t){return t&&"function"==typeof t.next}function F(t){var e=q(t);return e&&e.call(t)}function q(t){var e=t&&(R&&t[R]||t[I]);if("function"==typeof e)return e}function B(t){return t&&"number"==typeof t.length}function V(t){return null===t||void 0===t?ot():a(t)?t.toSeq():function(t){var e=ut(t)||"object"==typeof t&&new et(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}(t)}function K(t){return null===t||void 0===t?ot().toKeyedSeq():a(t)?s(t)?t.toSeq():t.fromEntrySeq():at(t)}function $(t){return null===t||void 0===t?ot():a(t)?s(t)?t.entrySeq():t.toIndexedSeq():st(t)}function J(t){return(null===t||void 0===t?ot():a(t)?s(t)?t.entrySeq():t:st(t)).toSetSeq()}H.prototype.toString=function(){return"[Iterator]"},H.KEYS=O,H.VALUES=P,H.ENTRIES=A,H.prototype.inspect=H.prototype.toSource=function(){return this.toString()},H.prototype[j]=function(){return this},e(V,n),V.of=function(){return V(arguments)},V.prototype.toSeq=function(){return this},V.prototype.toString=function(){return this.__toString("Seq {","}")},V.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},V.prototype.__iterate=function(t,e){return lt(this,t,e,!0)},V.prototype.__iterator=function(t,e){return ct(this,t,e,!0)},e(K,V),K.prototype.toKeyedSeq=function(){return this},e($,V),$.of=function(){return $(arguments)},$.prototype.toIndexedSeq=function(){return this},$.prototype.toString=function(){return this.__toString("Seq [","]")},$.prototype.__iterate=function(t,e){return lt(this,t,e,!1)},$.prototype.__iterator=function(t,e){return ct(this,t,e,!1)},e(J,V),J.of=function(){return J(arguments)},J.prototype.toSetSeq=function(){return this},V.isSeq=it,V.Keyed=K,V.Set=J,V.Indexed=$;var G,X,Q,Z="@@__IMMUTABLE_SEQ__@@";function tt(t){this._array=t,this.size=t.length}function et(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function nt(t){this._iterable=t,this.size=t.length||t.size}function rt(t){this._iterator=t,this._iteratorCache=[]}function it(t){return!(!t||!t[Z])}function ot(){return G||(G=new tt([]))}function at(t){var e=Array.isArray(t)?new tt(t).fromEntrySeq():z(t)?new rt(t).fromEntrySeq():U(t)?new nt(t).fromEntrySeq():"object"==typeof t?new et(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function st(t){var e=ut(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function ut(t){return B(t)?new tt(t):z(t)?new rt(t):U(t)?new nt(t):void 0}function lt(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,a=0;a<=o;a++){var s=i[n?o-a:a];if(!1===e(s[1],r?s[0]:a,t))return a+1}return a}return t.__iterateUncached(e,n)}function ct(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,a=0;return new H(function(){var t=i[n?o-a:a];return a++>o?{value:void 0,done:!0}:N(e,r?t[0]:a-1,t[1])})}return t.__iteratorUncached(e,n)}function dt(t,e){return e?function t(e,n,r,i){return Array.isArray(n)?e.call(i,r,$(n).map(function(r,i){return t(e,r,i,n)})):ft(n)?e.call(i,r,K(n).map(function(r,i){return t(e,r,i,n)})):n}(e,t,"",{"":t}):ht(t)}function ht(t){return Array.isArray(t)?$(t).map(ht).toList():ft(t)?K(t).map(ht).toMap():t}function ft(t){return t&&(t.constructor===Object||void 0===t.constructor)}function pt(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function mt(t,e){if(t===e)return!0;if(!a(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||s(t)!==s(e)||u(t)!==u(e)||c(t)!==c(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!l(t);if(c(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&pt(i[1],t)&&(n||pt(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var d=!0,h=e.__iterate(function(e,r){if(n?!t.has(e):i?!pt(e,t.get(r,y)):!pt(t.get(r,y),e))return d=!1,!1});return d&&t.size===h}function _t(t,e){if(!(this instanceof _t))return new _t(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(X)return X;X=this}}function vt(t,e){if(!t)throw new Error(e)}function yt(t,e,n){if(!(this instanceof yt))return new yt(t,e,n);if(vt(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),er?{value:void 0,done:!0}:N(t,i,n[e?r-i++:i++])})},e(et,K),et.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},et.prototype.has=function(t){return this._object.hasOwnProperty(t)},et.prototype.__iterate=function(t,e){for(var n=this._object,r=this._keys,i=r.length-1,o=0;o<=i;o++){var a=r[e?i-o:o];if(!1===t(n[a],a,this))return o+1}return o},et.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new H(function(){var a=r[e?i-o:o];return o++>i?{value:void 0,done:!0}:N(t,a,n[a])})},et.prototype[p]=!0,e(nt,$),nt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var n=this._iterable,r=F(n),i=0;if(z(r))for(var o;!(o=r.next()).done&&!1!==t(o.value,i++,this););return i},nt.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=F(n);if(!z(r))return new H(W);var i=0;return new H(function(){var e=r.next();return e.done?e:N(t,i++,e.value)})},e(rt,$),rt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var n,r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return N(t,i,r[i++])})},e(_t,$),_t.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},_t.prototype.get=function(t,e){return this.has(t)?this._value:e},_t.prototype.includes=function(t){return pt(this._value,t)},_t.prototype.slice=function(t,e){var n=this.size;return x(t,e,n)?this:new _t(this._value,E(e,n)-Y(t,n))},_t.prototype.reverse=function(){return this},_t.prototype.indexOf=function(t){return pt(this._value,t)?0:-1},_t.prototype.lastIndexOf=function(t){return pt(this._value,t)?this.size:-1},_t.prototype.__iterate=function(t,e){for(var n=0;n=0&&e=0&&nn?{value:void 0,done:!0}:N(t,o++,a)})},yt.prototype.equals=function(t){return t instanceof yt?this._start===t._start&&this._end===t._end&&this._step===t._step:mt(this,t)},e(gt,n),e(Mt,gt),e(bt,gt),e(wt,gt),gt.Keyed=Mt,gt.Indexed=bt,gt.Set=wt;var Lt="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var n=65535&(t|=0),r=65535&(e|=0);return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0};function kt(t){return t>>>1&1073741824|3221225471&t}function Tt(t){if(!1===t||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(!1===(t=t.valueOf())||null===t||void 0===t))return 0;if(!0===t)return 1;var e=typeof t;if("number"===e){if(t!=t||t===1/0)return 0;var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)n^=t/=4294967295;return kt(n)}if("string"===e)return t.length>Pt?function(t){var e=It[t];return void 0===e&&(e=Dt(t),Rt===At&&(Rt=0,It={}),Rt++,It[t]=e),e}(t):Dt(t);if("function"==typeof t.hashCode)return t.hashCode();if("object"===e)return function(t){var e;if(Et&&void 0!==(e=St.get(t)))return e;if(void 0!==(e=t[Ot]))return e;if(!Yt){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[Ot]))return e;if(void 0!==(e=function(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}(t)))return e}if(e=++Ct,1073741824&Ct&&(Ct=0),Et)St.set(t,e);else{if(void 0!==xt&&!1===xt(t))throw new Error("Non-extensible objects are not allowed as keys.");if(Yt)Object.defineProperty(t,Ot,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[Ot]=e;else{if(void 0===t.nodeType)throw new Error("Unable to set a non-enumerable property on object.");t[Ot]=e}}return e}(t);if("function"==typeof t.toString)return Dt(t.toString());throw new Error("Value type "+e+" cannot be hashed.")}function Dt(t){for(var e=0,n=0;n=e.length)throw new Error("Missing value for key: "+e[n]);t.set(e[n],e[n+1])}})},Ht.prototype.toString=function(){return this.__toString("Map {","}")},Ht.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ht.prototype.set=function(t,e){return Zt(this,t,e)},Ht.prototype.setIn=function(t,e){return this.updateIn(t,y,function(){return e})},Ht.prototype.remove=function(t){return Zt(this,t,y)},Ht.prototype.deleteIn=function(t){return this.updateIn(t,function(){return y})},Ht.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ht.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=function t(e,n,r,i){var o=e===y,a=n.next();if(a.done){var s=o?r:e,u=i(s);return u===s?e:u}vt(o||e&&e.set,"invalid keyPath");var l=a.value,c=o?y:e.get(l,y),d=t(c,n,r,i);return d===c?e:d===y?e.remove(l):(o?Qt():e).set(l,d)}(this,nn(t),e,n);return r===y?void 0:r},Ht.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Qt()},Ht.prototype.merge=function(){return re(this,void 0,arguments)},Ht.prototype.mergeWith=function(e){var n=t.call(arguments,1);return re(this,e,n)},Ht.prototype.mergeIn=function(e){var n=t.call(arguments,1);return this.updateIn(e,Qt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,n):n[n.length-1]})},Ht.prototype.mergeDeep=function(){return re(this,ie,arguments)},Ht.prototype.mergeDeepWith=function(e){var n=t.call(arguments,1);return re(this,oe(e),n)},Ht.prototype.mergeDeepIn=function(e){var n=t.call(arguments,1);return this.updateIn(e,Qt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,n):n[n.length-1]})},Ht.prototype.sort=function(t){return Ye(Be(this,t))},Ht.prototype.sortBy=function(t,e){return Ye(Be(this,e,t))},Ht.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ht.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new L)},Ht.prototype.asImmutable=function(){return this.__ensureOwner()},Ht.prototype.wasAltered=function(){return this.__altered},Ht.prototype.__iterator=function(t,e){return new $t(this,t,e)},Ht.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ht.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Xt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ht.isMap=Nt;var Wt,Ut="@@__IMMUTABLE_MAP__@@",zt=Ht.prototype;function Ft(t,e){this.ownerID=t,this.entries=e}function qt(t,e,n){this.ownerID=t,this.bitmap=e,this.nodes=n}function Bt(t,e,n){this.ownerID=t,this.count=e,this.nodes=n}function Vt(t,e,n){this.ownerID=t,this.keyHash=e,this.entries=n}function Kt(t,e,n){this.ownerID=t,this.keyHash=e,this.entry=n}function $t(t,e,n){this._type=e,this._reverse=n,this._stack=t._root&&Gt(t._root)}function Jt(t,e){return N(t,e[0],e[1])}function Gt(t,e){return{node:t,index:0,__prev:e}}function Xt(t,e,n,r){var i=Object.create(zt);return i.size=t,i._root=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Qt(){return Wt||(Wt=Xt(0))}function Zt(t,e,n){var r,i;if(t._root){var o=b(g),a=b(M);if(r=te(t._root,t.__ownerID,0,void 0,e,n,o,a),!a.value)return t;i=t.size+(o.value?n===y?-1:1:0)}else{if(n===y)return t;i=1,r=new Ft(t.__ownerID,[[e,n]])}return t.__ownerID?(t.size=i,t._root=r,t.__hash=void 0,t.__altered=!0,t):r?Xt(i,r):Qt()}function te(t,e,n,r,i,o,a,s){return t?t.update(e,n,r,i,o,a,s):o===y?t:(w(s),w(a),new Kt(e,r,[i,o]))}function ee(t){return t.constructor===Kt||t.constructor===Vt}function ne(t,e,n,r,i){if(t.keyHash===r)return new Vt(e,r,[t.entry,i]);var o,a=(0===n?t.keyHash:t.keyHash>>>n)&v,s=(0===n?r:r>>>n)&v,u=a===s?[ne(t,e,n+m,r,i)]:(o=new Kt(e,r,i),a>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,t+=t>>8,127&(t+=t>>16)}function ue(t,e,n,r){var i=r?t:k(t);return i[e]=n,i}zt[Ut]=!0,zt.delete=zt.remove,zt.removeIn=zt.deleteIn,Ft.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,a=i.length;o=le)return function(t,e,n,r){t||(t=new L);for(var i=new Kt(t,Tt(n),[n,r]),o=0;o>>t)&v),o=this.bitmap;return 0==(o&i)?r:this.nodes[se(o&i-1)].get(t+m,e,n,r)},qt.prototype.update=function(t,e,n,r,i,o,a){void 0===n&&(n=Tt(r));var s=(0===e?n:n>>>e)&v,u=1<=ce)return function(t,e,n,r,i){for(var o=0,a=new Array(_),s=0;0!==n;s++,n>>>=1)a[s]=1&n?e[o++]:void 0;return a[r]=i,new Bt(t,o+1,a)}(t,h,l,s,p);if(c&&!p&&2===h.length&&ee(h[1^d]))return h[1^d];if(c&&p&&1===h.length&&ee(p))return p;var g=t&&t===this.ownerID,M=c?p?l:l^u:l|u,b=c?p?ue(h,d,p,g):function(t,e,n){var r=t.length-1;if(n&&e===r)return t.pop(),t;for(var i=new Array(r),o=0,a=0;a>>t)&v,o=this.nodes[i];return o?o.get(t+m,e,n,r):r},Bt.prototype.update=function(t,e,n,r,i,o,a){void 0===n&&(n=Tt(r));var s=(0===e?n:n>>>e)&v,u=i===y,l=this.nodes,c=l[s];if(u&&!c)return this;var d=te(c,t,e+m,n,r,i,o,a);if(d===c)return this;var h=this.count;if(c){if(!d&&--h0&&r<_?be(0,r,m,null,new _e(n.toArray())):e.withMutations(function(t){t.setSize(r),n.forEach(function(e,n){return t.set(n,e)})}))}function fe(t){return!(!t||!t[pe])}e(he,bt),he.of=function(){return this(arguments)},he.prototype.toString=function(){return this.__toString("List [","]")},he.prototype.get=function(t,e){if((t=D(this,t))>=0&&t=t.size||e<0)return t.withMutations(function(t){e<0?De(t,e).set(0,n):De(t,0,e+1).set(e,n)});e+=t._origin;var r=t._tail,i=t._root,o=b(M);return e>=xe(t._capacity)?r=Le(r,t.__ownerID,0,e,n,o):i=Le(i,t.__ownerID,t._level,e,n,o),o.value?t.__ownerID?(t._root=i,t._tail=r,t.__hash=void 0,t.__altered=!0,t):be(t._origin,t._capacity,t._level,i,r):t}(this,t,e)},he.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},he.prototype.insert=function(t,e){return this.splice(t,0,e)},he.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=m,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):we()},he.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations(function(n){De(n,0,e+t.length);for(var r=0;r>>e&v;if(r>=this.array.length)return new _e([],t);var i,o=0===r;if(e>0){var a=this.array[r];if((i=a&&a.removeBefore(t,e-m,n))===a&&o)return this}if(o&&!i)return this;var s=ke(this,t);if(!o)for(var u=0;u>>e&v;if(i>=this.array.length)return this;if(e>0){var o=this.array[i];if((r=o&&o.removeAfter(t,e-m,n))===o&&i===this.array.length-1)return this}var a=ke(this,t);return a.array.splice(i+1),r&&(a.array[i]=r),a};var ve,ye,ge={};function Me(t,e){var n=t._origin,r=t._capacity,i=xe(r),o=t._tail;return a(t._root,t._level,0);function a(t,s,u){return 0===s?function(t,a){var s=a===i?o&&o.array:t&&t.array,u=a>n?0:n-a,l=r-a;return l>_&&(l=_),function(){if(u===l)return ge;var t=e?--l:u++;return s&&s[t]}}(t,u):function(t,i,o){var s,u=t&&t.array,l=o>n?0:n-o>>i,c=1+(r-o>>i);return c>_&&(c=_),function(){for(;;){if(s){var t=s();if(t!==ge)return t;s=null}if(l===c)return ge;var n=e?--c:l++;s=a(u&&u[n],i-m,o+(n<>>n&v,u=t&&s0){var l=t&&t.array[s],c=Le(l,e,n-m,r,i,o);return c===l?t:((a=ke(t,e)).array[s]=c,a)}return u&&t.array[s]===i?t:(w(o),a=ke(t,e),void 0===i&&s===a.array.length-1?a.array.pop():a.array[s]=i,a)}function ke(t,e){return e&&t&&e===t.ownerID?t:new _e(t?t.array.slice():[],e)}function Te(t,e){if(e>=xe(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&v],r-=m;return n}}function De(t,e,n){void 0!==e&&(e|=0),void 0!==n&&(n|=0);var r=t.__ownerID||new L,i=t._origin,o=t._capacity,a=i+e,s=void 0===n?o:n<0?o+n:i+n;if(a===i&&s===o)return t;if(a>=s)return t.clear();for(var u=t._level,l=t._root,c=0;a+c<0;)l=new _e(l&&l.array.length?[void 0,l]:[],r),c+=1<<(u+=m);c&&(a+=c,i+=c,s+=c,o+=c);for(var d=xe(o),h=xe(s);h>=1<d?new _e([],r):f;if(f&&h>d&&am;y-=m){var g=d>>>y&v;_=_.array[g]=ke(_.array[g],r)}_.array[d>>>m&v]=f}if(s=h)a-=h,s-=h,u=m,l=null,p=p&&p.removeBefore(r,0,a);else if(a>i||h>>u&v;if(M!==h>>>u&v)break;M&&(c+=(1<i&&(l=l.removeBefore(r,u,a-c)),l&&ho&&(o=l.size),a(u)||(l=l.map(function(t){return dt(t)})),r.push(l)}return o>t.size&&(t=t.setSize(o)),ae(t,e,r)}function xe(t){return t<_?0:t-1>>>m<=_&&a.size>=2*o.size?(i=a.filter(function(t,e){return void 0!==t&&s!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=s===a.size-1?a.pop():a.set(s,void 0))}else if(u){if(n===a.get(s)[1])return t;r=o,i=a.set(s,[e,n])}else r=o.set(e,a.size),i=a.set(a.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):Ce(r,i)}function Ae(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function Re(t){this._iter=t,this.size=t.size}function Ie(t){this._iter=t,this.size=t.size}function je(t){this._iter=t,this.size=t.size}function He(t){var e=Ze(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=tn,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return!1!==e(n,t,r)},n)},e.__iteratorUncached=function(e,n){if(e===A){var r=t.__iterator(e,n);return new H(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===P?O:P,n)},e}function Ne(t,e,n){var r=Ze(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,y);return o===y?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,a){return!1!==r(e.call(n,t,i,a),i,o)},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(A,i);return new H(function(){var i=o.next();if(i.done)return i;var a=i.value,s=a[0];return N(r,s,e.call(n,a[1],s,t),i)})},r}function We(t,e){var n=Ze(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=He(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=tn,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function Ue(t,e,n,r){var i=Ze(t);return r&&(i.has=function(r){var i=t.get(r,y);return i!==y&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,y);return o!==y&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var a=this,s=0;return t.__iterate(function(t,o,u){if(e.call(n,t,o,u))return s++,i(t,r?o:s-1,a)},o),s},i.__iteratorUncached=function(i,o){var a=t.__iterator(A,o),s=0;return new H(function(){for(;;){var o=a.next();if(o.done)return o;var u=o.value,l=u[0],c=u[1];if(e.call(n,c,l,t))return N(i,r?l:s++,c,o)}})},i}function ze(t,e,n,r){var i=t.size;if(void 0!==e&&(e|=0),void 0!==n&&(n===1/0?n=i:n|=0),x(e,n,i))return t;var o=Y(e,i),a=E(n,i);if(o!=o||a!=a)return ze(t.toSeq().cacheResult(),e,n,r);var s,u=a-o;u==u&&(s=u<0?0:u);var l=Ze(t);return l.size=0===s?s:t.size&&s||void 0,!r&&it(t)&&s>=0&&(l.get=function(e,n){return(e=D(this,e))>=0&&es)return{value:void 0,done:!0};var t=i.next();return r||e===P?t:N(e,u-1,e===O?void 0:t.value[1],t)})},l}function Fe(t,e,n,r){var i=Ze(t);return i.__iterateUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,u=0;return t.__iterate(function(t,o,l){if(!s||!(s=e.call(n,t,o,l)))return u++,i(t,r?o:u-1,a)}),u},i.__iteratorUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(A,o),u=!0,l=0;return new H(function(){var t,o,c;do{if((t=s.next()).done)return r||i===P?t:N(i,l++,i===O?void 0:t.value[1],t);var d=t.value;o=d[0],c=d[1],u&&(u=e.call(n,c,o,a))}while(u);return i===A?t:N(i,o,c,t)})},i}function qe(t,e,n){var r=Ze(t);return r.__iterateUncached=function(r,i){var o=0,s=!1;return function t(u,l){var c=this;u.__iterate(function(i,u){return(!e||l0}function $e(t,e,r){var i=Ze(t);return i.size=new tt(r).map(function(t){return t.size}).min(),i.__iterate=function(t,e){for(var n,r=this.__iterator(P,e),i=0;!(n=r.next()).done&&!1!==t(n.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=r.map(function(t){return t=n(t),F(i?t.reverse():t)}),a=0,s=!1;return new H(function(){var n;return s||(n=o.map(function(t){return t.next()}),s=n.some(function(t){return t.done})),s?{value:void 0,done:!0}:N(t,a++,e.apply(null,n.map(function(t){return t.value})))})},i}function Je(t,e){return it(t)?e:t.constructor(e)}function Ge(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Xe(t){return jt(t.size),T(t)}function Qe(t){return s(t)?r:u(t)?i:o}function Ze(t){return Object.create((s(t)?K:u(t)?$:J).prototype)}function tn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):V.prototype.cacheResult.call(this)}function en(t,e){return t>e?1:t=0;n--)e={value:arguments[n],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Sn(t,e)},wn.prototype.pushAll=function(t){if(0===(t=i(t)).size)return this;jt(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):Sn(e,n)},wn.prototype.pop=function(){return this.slice(1)},wn.prototype.unshift=function(){return this.push.apply(this,arguments)},wn.prototype.unshiftAll=function(t){return this.pushAll(t)},wn.prototype.shift=function(){return this.pop.apply(this,arguments)},wn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):xn()},wn.prototype.slice=function(t,e){if(x(t,e,this.size))return this;var n=Y(t,this.size),r=E(e,this.size);if(r!==this.size)return bt.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):Sn(i,o)},wn.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Sn(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},wn.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var n=0,r=this._head;r&&!1!==t(r.value,n++,this);)r=r.next;return n},wn.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new H(function(){if(r){var e=r.value;return r=r.next,N(t,n++,e)}return{value:void 0,done:!0}})},wn.isStack=Ln;var kn,Tn="@@__IMMUTABLE_STACK__@@",Dn=wn.prototype;function Sn(t,e,n,r){var i=Object.create(Dn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function xn(){return kn||(kn=Sn(0))}function Yn(t,e){var n=function(n){t.prototype[n]=e[n]};return Object.keys(e).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(n),t}Dn[Tn]=!0,Dn.withMutations=zt.withMutations,Dn.asMutable=zt.asMutable,Dn.asImmutable=zt.asImmutable,Dn.wasAltered=zt.wasAltered,n.Iterator=H,Yn(n,{toArray:function(){jt(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate(function(e,n){t[n]=e}),t},toIndexedSeq:function(){return new Re(this)},toJS:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJS?t.toJS():t}).__toJS()},toJSON:function(){return this.toSeq().map(function(t){return t&&"function"==typeof t.toJSON?t.toJSON():t}).__toJS()},toKeyedSeq:function(){return new Ae(this,!0)},toMap:function(){return Ht(this.toKeyedSeq())},toObject:function(){jt(this.size);var t={};return this.__iterate(function(e,n){t[n]=e}),t},toOrderedMap:function(){return Ye(this.toKeyedSeq())},toOrderedSet:function(){return _n(s(this)?this.valueSeq():this)},toSet:function(){return un(s(this)?this.valueSeq():this)},toSetSeq:function(){return new Ie(this)},toSeq:function(){return u(this)?this.toIndexedSeq():s(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return wn(s(this)?this.valueSeq():this)},toList:function(){return he(s(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(t,e){return 0===this.size?t+e:t+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+e},concat:function(){var e=t.call(arguments,0);return Je(this,function(t,e){var n=s(t),i=[t].concat(e).map(function(t){return a(t)?n&&(t=r(t)):t=n?at(t):st(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===i.length)return t;if(1===i.length){var o=i[0];if(o===t||n&&s(o)||u(t)&&u(o))return o}var l=new tt(i);return n?l=l.toKeyedSeq():u(t)||(l=l.toSetSeq()),(l=l.flatten(!0)).size=i.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),l}(this,e))},includes:function(t){return this.some(function(e){return pt(e,t)})},entries:function(){return this.__iterator(A)},every:function(t,e){jt(this.size);var n=!0;return this.__iterate(function(r,i,o){if(!t.call(e,r,i,o))return n=!1,!1}),n},filter:function(t,e){return Je(this,Ue(this,t,e,!0))},find:function(t,e,n){var r=this.findEntry(t,e);return r?r[1]:n},forEach:function(t,e){return jt(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){jt(this.size),t=void 0!==t?""+t:",";var e="",n=!0;return this.__iterate(function(r){n?n=!1:e+=t,e+=null!==r&&void 0!==r?r.toString():""}),e},keys:function(){return this.__iterator(O)},map:function(t,e){return Je(this,Ne(this,t,e))},reduce:function(t,e,n){var r,i;return jt(this.size),arguments.length<2?i=!0:r=e,this.__iterate(function(e,o,a){i?(i=!1,r=e):r=t.call(n,r,e,o,a)}),r},reduceRight:function(t,e,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return Je(this,We(this,!0))},slice:function(t,e){return Je(this,ze(this,t,e,!0))},some:function(t,e){return!this.every(An(t),e)},sort:function(t){return Je(this,Be(this,t))},values:function(){return this.__iterator(P)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(t,e){return T(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return function(t,e,n){var r=Ht().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}(this,t,e)},equals:function(t){return mt(this,t)},entrySeq:function(){var t=this;if(t._cache)return new tt(t._cache);var e=t.toSeq().map(Pn).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(An(t),e)},findEntry:function(t,e,n){var r=n;return this.__iterate(function(n,i,o){if(t.call(e,n,i,o))return r=[i,n],!1}),r},findKey:function(t,e){var n=this.findEntry(t,e);return n&&n[0]},findLast:function(t,e,n){return this.toKeyedSeq().reverse().find(t,e,n)},findLastEntry:function(t,e,n){return this.toKeyedSeq().reverse().findEntry(t,e,n)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(S)},flatMap:function(t,e){return Je(this,function(t,e,n){var r=Qe(t);return t.toSeq().map(function(i,o){return r(e.call(n,i,o,t))}).flatten(!0)}(this,t,e))},flatten:function(t){return Je(this,qe(this,t,!0))},fromEntrySeq:function(){return new je(this)},get:function(t,e){return this.find(function(e,n){return pt(n,t)},void 0,e)},getIn:function(t,e){for(var n,r=this,i=nn(t);!(n=i.next()).done;){var o=n.value;if((r=r&&r.get?r.get(o,y):y)===y)return e}return r},groupBy:function(t,e){return function(t,e,n){var r=s(t),i=(c(t)?Ye():Ht()).asMutable();t.__iterate(function(o,a){i.update(e.call(n,o,a,t),function(t){return(t=t||[]).push(r?[a,o]:o),t})});var o=Qe(t);return i.map(function(e){return Je(t,o(e))})}(this,t,e)},has:function(t){return this.get(t,y)!==y},hasIn:function(t){return this.getIn(t,y)!==y},isSubset:function(t){return t="function"==typeof t.includes?t:n(t),this.every(function(e){return t.includes(e)})},isSuperset:function(t){return(t="function"==typeof t.isSubset?t:n(t)).isSubset(this)},keyOf:function(t){return this.findKey(function(e){return pt(e,t)})},keySeq:function(){return this.toSeq().map(On).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return Ve(this,t)},maxBy:function(t,e){return Ve(this,e,t)},min:function(t){return Ve(this,t?Rn(t):Hn)},minBy:function(t,e){return Ve(this,e?Rn(e):Hn,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return Je(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return Je(this,Fe(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(An(t),e)},sortBy:function(t,e){return Je(this,Be(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return Je(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return Je(this,function(t,e,n){var r=Ze(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var a=0;return t.__iterate(function(t,i,s){return e.call(n,t,i,s)&&++a&&r(t,i,o)}),a},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var a=t.__iterator(A,i),s=!0;return new H(function(){if(!s)return{value:void 0,done:!0};var t=a.next();if(t.done)return t;var i=t.value,u=i[0],l=i[1];return e.call(n,l,u,o)?r===A?t:N(r,u,l,t):(s=!1,{value:void 0,done:!0})})},r}(this,t,e))},takeUntil:function(t,e){return this.takeWhile(An(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function(t){if(t.size===1/0)return 0;var e=c(t),n=s(t),r=e?1:0;return function(t,e){return e=Lt(e,3432918353),e=Lt(e<<15|e>>>-15,461845907),e=Lt(e<<13|e>>>-13,5),e=Lt((e=(e+3864292196|0)^t)^e>>>16,2246822507),e=kt((e=Lt(e^e>>>13,3266489909))^e>>>16)}(t.__iterate(n?e?function(t,e){r=31*r+Nn(Tt(t),Tt(e))|0}:function(t,e){r=r+Nn(Tt(t),Tt(e))|0}:e?function(t){r=31*r+Tt(t)|0}:function(t){r=r+Tt(t)|0}),r)}(this))}});var En=n.prototype;En[d]=!0,En[j]=En.values,En.__toJS=En.toArray,En.__toStringMapper=In,En.inspect=En.toSource=function(){return this.toString()},En.chain=En.flatMap,En.contains=En.includes,Yn(r,{flip:function(){return Je(this,He(this))},mapEntries:function(t,e){var n=this,r=0;return Je(this,this.toSeq().map(function(i,o){return t.call(e,[o,i],r++,n)}).fromEntrySeq())},mapKeys:function(t,e){var n=this;return Je(this,this.toSeq().flip().map(function(r,i){return t.call(e,r,i,n)}).flip())}});var Cn=r.prototype;function On(t,e){return e}function Pn(t,e){return[e,t]}function An(t){return function(){return!t.apply(this,arguments)}}function Rn(t){return function(){return-t.apply(this,arguments)}}function In(t){return"string"==typeof t?JSON.stringify(t):String(t)}function jn(){return k(arguments)}function Hn(t,e){return te?-1:0}function Nn(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}return Cn[h]=!0,Cn[j]=En.entries,Cn.__toJS=En.toObject,Cn.__toStringMapper=function(t,e){return JSON.stringify(e)+": "+In(t)},Yn(i,{toKeyedSeq:function(){return new Ae(this,!1)},filter:function(t,e){return Je(this,Ue(this,t,e,!1))},findIndex:function(t,e){var n=this.findEntry(t,e);return n?n[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return Je(this,We(this,!1))},slice:function(t,e){return Je(this,ze(this,t,e,!1))},splice:function(t,e){var n=arguments.length;if(e=Math.max(0|e,0),0===n||2===n&&!e)return this;t=Y(t,t<0?this.count():this.size);var r=this.slice(0,t);return Je(this,1===n?r:r.concat(k(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var n=this.findLastEntry(t,e);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(t){return Je(this,qe(this,t,!1))},get:function(t,e){return(t=D(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return(t=D(this,t))>=0&&(void 0!==this.size?this.size===1/0||t-1&&t%1==0&&t<=Number.MAX_VALUE}(o))for(;++a0)){var e=this.reactorState.get("dirtyStores");if(0!==e.size){o.default.Set().withMutations(function(n){n.union(t.observerState.get("any")),e.forEach(function(e){var r=t.observerState.getIn(["stores",e]);r&&n.union(r)})}).forEach(function(e){var n=t.observerState.getIn(["observersMap",e]);if(n){var r=n.get("getter"),i=n.get("handler"),a=s.evaluate(t.prevReactorState,r),u=s.evaluate(t.reactorState,r);t.prevReactorState=a.reactorState,t.reactorState=u.reactorState;var l=a.result,c=u.result;o.default.is(l,c)||i.call(null,c)}});var n=s.resetDirtyStores(this.reactorState);this.prevReactorState=n,this.reactorState=n}}}},{key:"batchStart",value:function(){this.__batchDepth++}},{key:"batchEnd",value:function(){if(this.__batchDepth--,this.__batchDepth<=0){this.__isDispatching=!0;try{this.__notify()}catch(t){throw this.__isDispatching=!1,t}this.__isDispatching=!1}}}]),t}();e.default=(0,f.toFactory)(m),t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(4);e.default=function(t){return{getInitialState:function(){return function(t,e){var n={};return(0,r.each)(e,function(e,r){n[r]=t.evaluate(e)}),n}(t,this.getDataBindings())},componentDidMount:function(){var e=this;this.__unwatchFns=[],(0,r.each)(this.getDataBindings(),function(n,r){var i=t.observe(n,function(t){e.setState(function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}({},r,t))});e.__unwatchFns.push(i)})},componentWillUnmount:function(){for(;this.__unwatchFns.length;)this.__unwatchFns.shift()()}}},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.registerStores=function(t,e){return t.withMutations(function(t){(0,u.each)(e,function(e,n){t.getIn(["stores",n])&&console.warn("Store already defined for id = "+n);var r=e.getInitialState();if(void 0===r&&d(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store getInitialState() must return a value, did you forget a return statement");if(d(t,"throwOnNonImmutableStore")&&!(0,o.isImmutableValue)(r))throw new Error("Store getInitialState() must return an immutable value, did you forget to call toImmutable");t.update("stores",function(t){return t.set(n,e)}).update("state",function(t){return t.set(n,r)}).update("dirtyStores",function(t){return t.add(n)}).update("storeStates",function(t){return _(t,[n])})}),m(t)})},e.replaceStores=function(t,e){return t.withMutations(function(t){(0,u.each)(e,function(e,n){t.update("stores",function(t){return t.set(n,e)})})})},e.dispatch=function(t,e,n){var r=t.get("logger");if(void 0===e&&d(t,"throwOnUndefinedActionType"))throw new Error("`dispatch` cannot be called with an `undefined` action type.");var i=t.get("state"),o=t.get("dirtyStores"),a=i.withMutations(function(a){r.dispatchStart(t,e,n),t.get("stores").forEach(function(i,s){var u=a.get(s),l=void 0;try{l=i.handle(u,e,n)}catch(e){throw r.dispatchError(t,e.message),e}if(void 0===l&&d(t,"throwOnUndefinedStoreReturnValue")){var c="Store handler must return a value, did you forget a return statement";throw r.dispatchError(t,c),new Error(c)}a.set(s,l),u!==l&&(o=o.add(s))}),r.dispatchEnd(t,a,o,i)});return m(t.set("state",a).set("dirtyStores",o).update("storeStates",function(t){return _(t,o)}))},e.loadState=function(t,e){var n=[],i=(0,o.toImmutable)({}).withMutations(function(r){(0,u.each)(e,function(e,i){var o=t.getIn(["stores",i]);if(o){var a=o.deserialize(e);void 0!==a&&(r.set(i,a),n.push(i))}})}),a=r.default.Set(n);return t.update("state",function(t){return t.merge(i)}).update("dirtyStores",function(t){return t.union(a)}).update("storeStates",function(t){return _(t,n)})},e.addObserver=function(t,e,n){var i=e;(0,s.isKeyPath)(e)&&(e=(0,a.fromKeyPath)(e));var o=t.get("nextId"),u=(0,a.getStoreDeps)(e),l=r.default.Map({id:o,storeDeps:u,getterKey:i,getter:e,handler:n}),c=void 0;c=0===u.size?t.update("any",function(t){return t.add(o)}):t.withMutations(function(t){u.forEach(function(e){var n=["stores",e];t.hasIn(n)||t.setIn(n,r.default.Set()),t.updateIn(["stores",e],function(t){return t.add(o)})})});return{observerState:c=c.set("nextId",o+1).setIn(["observersMap",o],l),entry:l}},e.getOption=d,e.removeObserver=function(t,e,n){var r=t.get("observersMap").filter(function(t){var r=t.get("getterKey"),i=!n||t.get("handler")===n;return!!i&&((0,s.isKeyPath)(e)&&(0,s.isKeyPath)(r)?(0,s.isEqual)(e,r):e===r)});return t.withMutations(function(t){r.forEach(function(e){return h(t,e)})})},e.removeObserverByEntry=h,e.reset=function(t){var e=t.get("state");return t.withMutations(function(t){var n=t.get("stores"),r=n.keySeq().toJS();n.forEach(function(n,r){var i=e.get(r),a=n.handleReset(i);if(void 0===a&&d(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store handleReset() must return a value, did you forget a return statement");if(d(t,"throwOnNonImmutableStore")&&!(0,o.isImmutableValue)(a))throw new Error("Store reset state must be an immutable value, did you forget to call toImmutable");t.setIn(["state",r],a)}),t.update("storeStates",function(t){return _(t,r)}),p(t)})},e.evaluate=f,e.serialize=function(t){var e={};return t.get("stores").forEach(function(n,r){var i=t.getIn(["state",r]),o=n.serialize(i);void 0!==o&&(e[r]=o)}),e},e.resetDirtyStores=p;var r=function(t){return t&&t.__esModule?t:{default:t}}(n(3)),i=n(9),o=n(5),a=n(10),s=n(11),u=n(4),l=r.default.Record({result:null,reactorState:null});function c(t,e){return new l({result:t,reactorState:e})}function d(t,e){var n=t.getIn(["options",e]);if(void 0===n)throw new Error("Invalid option: "+e);return n}function h(t,e){return t.withMutations(function(t){var n=e.get("id"),r=e.get("storeDeps");0===r.size?t.update("any",function(t){return t.remove(n)}):r.forEach(function(e){t.updateIn(["stores",e],function(t){return t?t.remove(n):t})}),t.removeIn(["observersMap",n])})}function f(t,e){var n=t.get("state");if((0,s.isKeyPath)(e))return c(n.getIn(e),t);if(!(0,a.isGetter)(e))throw new Error("evaluate must be passed a keyPath or Getter");var r=t.get("cache").lookup(e),u=!r||function(t,e){var n=e.get("storeStates");return!n.size||n.some(function(e,n){return t.getIn(["storeStates",n])!==e})}(t,r);return u&&(r=function(t,e){var n=(0,a.getDeps)(e).map(function(e){return f(t,e).result}),r=(0,a.getComputeFn)(e).apply(null,n),s=(0,a.getStoreDeps)(e),u=(0,o.toImmutable)({}).withMutations(function(e){s.forEach(function(n){var r=t.getIn(["storeStates",n]);e.set(n,r)})});return(0,i.CacheEntry)({value:r,storeStates:u,dispatchId:t.get("dispatchId")})}(t,e)),c(r.get("value"),t.update("cache",function(t){return u?t.miss(e,r):t.hit(e)}))}function p(t){return t.set("dirtyStores",r.default.Set())}function m(t){return t.update("dispatchId",function(t){return t+1})}function _(t,e){return t.withMutations(function(t){e.forEach(function(e){var n=t.has(e)?t.get(e)+1:1;t.set(e,n)})})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;nn.dispatchId)throw new Error("Refusing to cache older value");return n}))}},{key:"evict",value:function(e){return new t(this.cache.remove(e))}}]),t}();e.BasicCache=s;var u=1e3,l=1,c=function(){function t(){var e=arguments.length<=0||void 0===arguments[0]?u:arguments[0],n=arguments.length<=1||void 0===arguments[1]?l:arguments[1],r=arguments.length<=2||void 0===arguments[2]?new s:arguments[2],a=arguments.length<=3||void 0===arguments[3]?(0,o.OrderedSet)():arguments[3];i(this,t),console.log("using LRU"),this.limit=e,this.evictCount=n,this.cache=r,this.lru=a}return r(t,[{key:"lookup",value:function(t,e){return this.cache.lookup(t,e)}},{key:"has",value:function(t){return this.cache.has(t)}},{key:"asMap",value:function(){return this.cache.asMap()}},{key:"hit",value:function(e){return this.cache.has(e)?new t(this.limit,this.evictCount,this.cache,this.lru.remove(e).add(e)):this}},{key:"miss",value:function(e,n){var r;if(this.lru.size>=this.limit){if(this.has(e))return new t(this.limit,this.evictCount,this.cache.miss(e,n),this.lru.remove(e).add(e));var i=this.lru.take(this.evictCount).reduce(function(t,e){return t.evict(e)},this.cache).miss(e,n);r=new t(this.limit,this.evictCount,i,this.lru.skip(this.evictCount).add(e))}else r=new t(this.limit,this.evictCount,this.cache.miss(e,n),this.lru.add(e));return r}},{key:"evict",value:function(e){return this.cache.has(e)?new t(this.limit,this.evictCount,this.cache.evict(e),this.lru.remove(e)):this}}]),t}();e.LRUCache=c},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=function(t){return t&&t.__esModule?t:{default:t}}(r),o=n(4),a=n(11),s=function(t){return t};function u(t){return(0,o.isArray)(t)&&(0,o.isFunction)(t[t.length-1])}function l(t){return t.slice(0,t.length-1)}function c(t,e){e||(e=i.default.Set());var n=i.default.Set().withMutations(function(e){if(!u(t))throw new Error("getFlattenedDeps must be passed a Getter");l(t).forEach(function(t){if((0,a.isKeyPath)(t))e.add((0,r.List)(t));else{if(!u(t))throw new Error("Invalid getter, each dependency must be a KeyPath or Getter");e.union(c(t))}})});return e.union(n)}e.default={isGetter:u,getComputeFn:function(t){return t[t.length-1]},getFlattenedDeps:c,getStoreDeps:function(t){if(t.hasOwnProperty("__storeDeps"))return t.__storeDeps;var e=c(t).map(function(t){return t.first()}).filter(function(t){return!!t});return Object.defineProperty(t,"__storeDeps",{enumerable:!1,configurable:!1,writable:!1,value:e}),e},getDeps:l,fromKeyPath:function(t){if(!(0,a.isKeyPath)(t))throw new Error("Cannot create Getter from KeyPath: "+t);return[t,s]}},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isKeyPath=function(t){return(0,i.isArray)(t)&&!(0,i.isFunction)(t[t.length-1])},e.isEqual=function(t,e){var n=r.default.List(t),i=r.default.List(e);return r.default.is(n,i)};var r=function(t){return t&&t.__esModule?t:{default:t}}(n(3)),i=n(4)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(8),i={dispatchStart:function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.groupCollapsed("Dispatch: %s",e),console.group("payload"),console.debug(n),console.groupEnd())},dispatchError:function(t,e){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.debug("Dispatch error: "+e),console.groupEnd())},dispatchEnd:function(t,e,n,i){(0,r.getOption)(t,"logDispatches")&&console.group&&((0,r.getOption)(t,"logDirtyStores")&&console.log("Stores updated:",n.toList().toJS()),(0,r.getOption)(t,"logAppState")&&console.debug("Dispatch done, new state: ",e.toJS()),console.groupEnd())}};e.ConsoleGroupLogger=i;e.NoopLogger={dispatchStart:function(t,e,n){},dispatchError:function(t,e){},dispatchEnd:function(t,e,n){}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n(9),o=n(12),a=(0,r.Map)({logDispatches:!1,logAppState:!1,logDirtyStores:!1,throwOnUndefinedActionType:!1,throwOnUndefinedStoreReturnValue:!1,throwOnNonImmutableStore:!1,throwOnDispatchInDispatch:!1});e.PROD_OPTIONS=a;var s=(0,r.Map)({logDispatches:!0,logAppState:!0,logDirtyStores:!0,throwOnUndefinedActionType:!0,throwOnUndefinedStoreReturnValue:!0,throwOnNonImmutableStore:!0,throwOnDispatchInDispatch:!0});e.DEBUG_OPTIONS=s;var u=(0,r.Record)({dispatchId:0,state:(0,r.Map)(),stores:(0,r.Map)(),cache:(0,i.DefaultCache)(),logger:o.NoopLogger,storeStates:(0,r.Map)(),dirtyStores:(0,r.Set)(),debug:!1,options:a});e.ReactorState=u;var l=(0,r.Record)({any:(0,r.Set)(),stores:(0,r.Map)({}),observersMap:(0,r.Map)({}),nextId:1});e.ObserverState=l}])})},LQBj:function(t,e,n){"use strict";e.__esModule=!0,e.compilePattern=a,e.matchPattern=s,e.getParamNames=function(t){return a(t).paramNames},e.getParams=function(t,e){var n=s(t,e);if(!n)return null;var r=n.paramNames,i=n.paramValues,o={};return r.forEach(function(t,e){o[t]=i[e]}),o},e.formatPattern=function(t,e){e=e||{};for(var n=a(t).tokens,i=0,o="",s=0,u=[],l=void 0,c=void 0,d=void 0,h=0,f=n.length;h0||(0,r.default)(!1),null!=d&&(o+=encodeURI(d));else if("("===l)u[i]="",i+=1;else if(")"===l){var p=u.pop();(i-=1)?u[i-1]+=p:o+=p}else if("\\("===l)o+="(";else if("\\)"===l)o+=")";else if(":"===l.charAt(0))if(c=l.substring(1),null!=(d=e[c])||i>0||(0,r.default)(!1),null==d){if(i){u[i-1]="";for(var m=n.indexOf(l),_=n.slice(m,n.length),v=-1,y=0;y<_.length;y++)if(")"==_[y]){v=y;break}v>0||(0,r.default)(!1),h=m+v-1}}else i?u[i-1]+=encodeURIComponent(d):o+=encodeURIComponent(d);else i?u[i-1]+=l:o+=l;return i<=0||(0,r.default)(!1),o.replace(/\/+/g,"/")};var r=function(t){return t&&t.__esModule?t:{default:t}}(n("QLaP"));function i(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var o=Object.create(null);function a(t){return o[t]||(o[t]=function(t){for(var e="",n=[],r=[],o=void 0,a=0,s=/:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)|\\\(|\\\)/g;o=s.exec(t);)o.index!==a&&(r.push(t.slice(a,o.index)),e+=i(t.slice(a,o.index))),o[1]?(e+="([^/]+)",n.push(o[1])):"**"===o[0]?(e+="(.*)",n.push("splat")):"*"===o[0]?(e+="(.*?)",n.push("splat")):"("===o[0]?e+="(?:":")"===o[0]?e+=")?":"\\("===o[0]?e+="\\(":"\\)"===o[0]&&(e+="\\)"),r.push(o[0]),a=s.lastIndex;return a!==t.length&&(r.push(t.slice(a,t.length)),e+=i(t.slice(a,t.length))),{pattern:t,regexpSource:e,paramNames:n,tokens:r}}(t)),o[t]}function s(t,e){"/"!==t.charAt(0)&&(t="/"+t);var n=a(t),r=n.regexpSource,i=n.paramNames,o=n.tokens;"/"!==t.charAt(t.length-1)&&(r+="/?"),"*"===o[o.length-1]&&(r+="$");var s=e.match(new RegExp("^"+r,"i"));if(null==s)return null;var u=s[0],l=e.substr(u.length);if(l){if("/"!==u.charAt(u.length-1))return null;l="/"+l}return{remainingPathname:l,paramNames:i,paramValues:s.slice(1).map(function(t){return t&&decodeURIComponent(t)})}}},Loxo:function(t,e,n){!function(t){"use strict";t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n("wd/R"))},LsM9:function(t,e,n){"use strict";var r=n("Hpnx"),i=(n("2NuI"),!1),o={replaceNodeWithMarkup:null,processChildrenUpdates:null,injection:{injectEnvironment:function(t){i&&r("104"),o.replaceNodeWithMarkup=t.replaceNodeWithMarkup,o.processChildrenUpdates=t.processChildrenUpdates,i=!0}}};t.exports=o},LvDl:function(t,e,n){(function(t,r){var i; -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var o,a=200,s="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",u="Expected a function",l="__lodash_hash_undefined__",c=500,d="__lodash_placeholder__",h=1,f=2,p=4,m=1,_=2,v=1,y=2,g=4,M=8,b=16,w=32,L=64,k=128,T=256,D=512,S=30,x="...",Y=800,E=16,C=1,O=2,P=1/0,A=9007199254740991,R=1.7976931348623157e308,I=NaN,j=4294967295,H=j-1,N=j>>>1,W=[["ary",k],["bind",v],["bindKey",y],["curry",M],["curryRight",b],["flip",D],["partial",w],["partialRight",L],["rearg",T]],U="[object Arguments]",z="[object Array]",F="[object AsyncFunction]",q="[object Boolean]",B="[object Date]",V="[object DOMException]",K="[object Error]",$="[object Function]",J="[object GeneratorFunction]",G="[object Map]",X="[object Number]",Q="[object Null]",Z="[object Object]",tt="[object Proxy]",et="[object RegExp]",nt="[object Set]",rt="[object String]",it="[object Symbol]",ot="[object Undefined]",at="[object WeakMap]",st="[object WeakSet]",ut="[object ArrayBuffer]",lt="[object DataView]",ct="[object Float32Array]",dt="[object Float64Array]",ht="[object Int8Array]",ft="[object Int16Array]",pt="[object Int32Array]",mt="[object Uint8Array]",_t="[object Uint8ClampedArray]",vt="[object Uint16Array]",yt="[object Uint32Array]",gt=/\b__p \+= '';/g,Mt=/\b(__p \+=) '' \+/g,bt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,wt=/&(?:amp|lt|gt|quot|#39);/g,Lt=/[&<>"']/g,kt=RegExp(wt.source),Tt=RegExp(Lt.source),Dt=/<%-([\s\S]+?)%>/g,St=/<%([\s\S]+?)%>/g,xt=/<%=([\s\S]+?)%>/g,Yt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Et=/^\w*$/,Ct=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ot=/[\\^$.*+?()[\]{}|]/g,Pt=RegExp(Ot.source),At=/^\s+|\s+$/g,Rt=/^\s+/,It=/\s+$/,jt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ht=/\{\n\/\* \[wrapped with (.+)\] \*/,Nt=/,? & /,Wt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ut=/\\(\\)?/g,zt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ft=/\w*$/,qt=/^[-+]0x[0-9a-f]+$/i,Bt=/^0b[01]+$/i,Vt=/^\[object .+?Constructor\]$/,Kt=/^0o[0-7]+$/i,$t=/^(?:0|[1-9]\d*)$/,Jt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Gt=/($^)/,Xt=/['\n\r\u2028\u2029\\]/g,Qt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Zt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",te="[\\ud800-\\udfff]",ee="["+Zt+"]",ne="["+Qt+"]",re="\\d+",ie="[\\u2700-\\u27bf]",oe="[a-z\\xdf-\\xf6\\xf8-\\xff]",ae="[^\\ud800-\\udfff"+Zt+re+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",se="\\ud83c[\\udffb-\\udfff]",ue="[^\\ud800-\\udfff]",le="(?:\\ud83c[\\udde6-\\uddff]){2}",ce="[\\ud800-\\udbff][\\udc00-\\udfff]",de="[A-Z\\xc0-\\xd6\\xd8-\\xde]",he="(?:"+oe+"|"+ae+")",fe="(?:"+de+"|"+ae+")",pe="(?:"+ne+"|"+se+")"+"?",me="[\\ufe0e\\ufe0f]?"+pe+("(?:\\u200d(?:"+[ue,le,ce].join("|")+")[\\ufe0e\\ufe0f]?"+pe+")*"),_e="(?:"+[ie,le,ce].join("|")+")"+me,ve="(?:"+[ue+ne+"?",ne,le,ce,te].join("|")+")",ye=RegExp("['’]","g"),ge=RegExp(ne,"g"),Me=RegExp(se+"(?="+se+")|"+ve+me,"g"),be=RegExp([de+"?"+oe+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ee,de,"$"].join("|")+")",fe+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ee,de+he,"$"].join("|")+")",de+"?"+he+"+(?:['’](?:d|ll|m|re|s|t|ve))?",de+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",re,_e].join("|"),"g"),we=RegExp("[\\u200d\\ud800-\\udfff"+Qt+"\\ufe0e\\ufe0f]"),Le=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ke=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Te=-1,De={};De[ct]=De[dt]=De[ht]=De[ft]=De[pt]=De[mt]=De[_t]=De[vt]=De[yt]=!0,De[U]=De[z]=De[ut]=De[q]=De[lt]=De[B]=De[K]=De[$]=De[G]=De[X]=De[Z]=De[et]=De[nt]=De[rt]=De[at]=!1;var Se={};Se[U]=Se[z]=Se[ut]=Se[lt]=Se[q]=Se[B]=Se[ct]=Se[dt]=Se[ht]=Se[ft]=Se[pt]=Se[G]=Se[X]=Se[Z]=Se[et]=Se[nt]=Se[rt]=Se[it]=Se[mt]=Se[_t]=Se[vt]=Se[yt]=!0,Se[K]=Se[$]=Se[at]=!1;var xe={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ye=parseFloat,Ee=parseInt,Ce="object"==typeof t&&t&&t.Object===Object&&t,Oe="object"==typeof self&&self&&self.Object===Object&&self,Pe=Ce||Oe||Function("return this")(),Ae="object"==typeof e&&e&&!e.nodeType&&e,Re=Ae&&"object"==typeof r&&r&&!r.nodeType&&r,Ie=Re&&Re.exports===Ae,je=Ie&&Ce.process,He=function(){try{var t=Re&&Re.require&&Re.require("util").types;return t||je&&je.binding&&je.binding("util")}catch(t){}}(),Ne=He&&He.isArrayBuffer,We=He&&He.isDate,Ue=He&&He.isMap,ze=He&&He.isRegExp,Fe=He&&He.isSet,qe=He&&He.isTypedArray;function Be(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ve(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function Qe(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function bn(t,e){for(var n=t.length;n--&&un(e,t[n],0)>-1;);return n}var wn=fn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Ln=fn({"&":"&","<":"<",">":">",'"':""","'":"'"});function kn(t){return"\\"+xe[t]}function Tn(t){return we.test(t)}function Dn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function Sn(t,e){return function(n){return t(e(n))}}function xn(t,e){for(var n=-1,r=t.length,i=0,o=[];++n",""":'"',"'":"'"});var An=function t(e){var n=(e=null==e?Pe:An.defaults(Pe.Object(),e,An.pick(Pe,ke))).Array,r=e.Date,i=e.Error,Qt=e.Function,Zt=e.Math,te=e.Object,ee=e.RegExp,ne=e.String,re=e.TypeError,ie=n.prototype,oe=Qt.prototype,ae=te.prototype,se=e["__core-js_shared__"],ue=oe.toString,le=ae.hasOwnProperty,ce=0,de=function(){var t=/[^.]+$/.exec(se&&se.keys&&se.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),he=ae.toString,fe=ue.call(te),pe=Pe._,me=ee("^"+ue.call(le).replace(Ot,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),_e=Ie?e.Buffer:o,ve=e.Symbol,Me=e.Uint8Array,we=_e?_e.allocUnsafe:o,xe=Sn(te.getPrototypeOf,te),Ce=te.create,Oe=ae.propertyIsEnumerable,Ae=ie.splice,Re=ve?ve.isConcatSpreadable:o,je=ve?ve.iterator:o,He=ve?ve.toStringTag:o,on=function(){try{var t=Ho(te,"defineProperty");return t({},"",{}),t}catch(t){}}(),fn=e.clearTimeout!==Pe.clearTimeout&&e.clearTimeout,Rn=r&&r.now!==Pe.Date.now&&r.now,In=e.setTimeout!==Pe.setTimeout&&e.setTimeout,jn=Zt.ceil,Hn=Zt.floor,Nn=te.getOwnPropertySymbols,Wn=_e?_e.isBuffer:o,Un=e.isFinite,zn=ie.join,Fn=Sn(te.keys,te),qn=Zt.max,Bn=Zt.min,Vn=r.now,Kn=e.parseInt,$n=Zt.random,Jn=ie.reverse,Gn=Ho(e,"DataView"),Xn=Ho(e,"Map"),Qn=Ho(e,"Promise"),Zn=Ho(e,"Set"),tr=Ho(e,"WeakMap"),er=Ho(te,"create"),nr=tr&&new tr,rr={},ir=ca(Gn),or=ca(Xn),ar=ca(Qn),sr=ca(Zn),ur=ca(tr),lr=ve?ve.prototype:o,cr=lr?lr.valueOf:o,dr=lr?lr.toString:o;function hr(t){if(Ss(t)&&!_s(t)&&!(t instanceof _r)){if(t instanceof mr)return t;if(le.call(t,"__wrapped__"))return da(t)}return new mr(t)}var fr=function(){function t(){}return function(e){if(!Ds(e))return{};if(Ce)return Ce(e);t.prototype=e;var n=new t;return t.prototype=o,n}}();function pr(){}function mr(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=o}function _r(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=j,this.__views__=[]}function vr(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Ar(t,e,n,r,i,a){var s,u=e&h,l=e&f,c=e&p;if(n&&(s=i?n(t,r,i,a):n(t)),s!==o)return s;if(!Ds(t))return t;var d=_s(t);if(d){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&le.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!u)return eo(t,s)}else{var m=Uo(t),_=m==$||m==J;if(Ms(t))return Ji(t,u);if(m==Z||m==U||_&&!i){if(s=l||_?{}:Fo(t),!u)return l?function(t,e){return no(t,Wo(t),e)}(t,function(t,e){return t&&no(e,iu(e),t)}(s,t)):function(t,e){return no(t,No(t),e)}(t,Er(s,t))}else{if(!Se[m])return i?t:{};s=function(t,e,n){var r=t.constructor;switch(e){case ut:return Gi(t);case q:case B:return new r(+t);case lt:return function(t,e){var n=e?Gi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case ct:case dt:case ht:case ft:case pt:case mt:case _t:case vt:case yt:return Xi(t,n);case G:return new r;case X:case rt:return new r(t);case et:return function(t){var e=new t.constructor(t.source,Ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case nt:return new r;case it:return function(t){return cr?te(cr.call(t)):{}}(t)}}(t,m,u)}}a||(a=new br);var v=a.get(t);if(v)return v;a.set(t,s),Os(t)?t.forEach(function(r){s.add(Ar(r,e,n,r,t,a))}):xs(t)&&t.forEach(function(r,i){s.set(i,Ar(r,e,n,i,t,a))});var y=d?o:(c?l?Co:Eo:l?iu:ru)(t);return Ke(y||t,function(r,i){y&&(r=t[i=r]),Sr(s,i,Ar(r,e,n,i,t,a))}),s}function Rr(t,e,n){var r=n.length;if(null==t)return!r;for(t=te(t);r--;){var i=n[r],a=e[i],s=t[i];if(s===o&&!(i in t)||!a(s))return!1}return!0}function Ir(t,e,n){if("function"!=typeof t)throw new re(u);return ra(function(){t.apply(o,n)},e)}function jr(t,e,n,r){var i=-1,o=Xe,s=!0,u=t.length,l=[],c=e.length;if(!u)return l;n&&(e=Ze(e,vn(n))),r?(o=Qe,s=!1):e.length>=a&&(o=gn,s=!1,e=new Mr(e));t:for(;++i-1},yr.prototype.set=function(t,e){var n=this.__data__,r=xr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},gr.prototype.clear=function(){this.size=0,this.__data__={hash:new vr,map:new(Xn||yr),string:new vr}},gr.prototype.delete=function(t){var e=Io(this,t).delete(t);return this.size-=e?1:0,e},gr.prototype.get=function(t){return Io(this,t).get(t)},gr.prototype.has=function(t){return Io(this,t).has(t)},gr.prototype.set=function(t,e){var n=Io(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Mr.prototype.add=Mr.prototype.push=function(t){return this.__data__.set(t,l),this},Mr.prototype.has=function(t){return this.__data__.has(t)},br.prototype.clear=function(){this.__data__=new yr,this.size=0},br.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},br.prototype.get=function(t){return this.__data__.get(t)},br.prototype.has=function(t){return this.__data__.has(t)},br.prototype.set=function(t,e){var n=this.__data__;if(n instanceof yr){var r=n.__data__;if(!Xn||r.length0&&n(s)?e>1?Fr(s,e-1,n,r,i):tn(i,s):r||(i[i.length]=s)}return i}var qr=ao(),Br=ao(!0);function Vr(t,e){return t&&qr(t,e,ru)}function Kr(t,e){return t&&Br(t,e,ru)}function $r(t,e){return Ge(e,function(e){return Ls(t[e])})}function Jr(t,e){for(var n=0,r=(e=Bi(e,t)).length;null!=t&&ne}function Zr(t,e){return null!=t&&le.call(t,e)}function ti(t,e){return null!=t&&e in te(t)}function ei(t,e,r){for(var i=r?Qe:Xe,a=t[0].length,s=t.length,u=s,l=n(s),c=1/0,d=[];u--;){var h=t[u];u&&e&&(h=Ze(h,vn(e))),c=Bn(h.length,c),l[u]=!r&&(e||a>=120&&h.length>=120)?new Mr(u&&h):o}h=t[0];var f=-1,p=l[0];t:for(;++f=s)return u;var l=n[r];return u*("desc"==l?-1:1)}}return t.index-e.index}(t,e,n)})}function vi(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)s!==t&&Ae.call(s,u,1),Ae.call(t,u,1);return t}function gi(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;Bo(i)?Ae.call(t,i,1):ji(t,i)}}return t}function Mi(t,e){return t+Hn($n()*(e-t+1))}function bi(t,e){var n="";if(!t||e<1||e>A)return n;do{e%2&&(n+=t),(e=Hn(e/2))&&(t+=t)}while(e);return n}function wi(t,e){return ia(Zo(t,e,Yu),t+"")}function Li(t){return Lr(hu(t))}function ki(t,e){var n=hu(t);return sa(n,Pr(e,0,n.length))}function Ti(t,e,n,r){if(!Ds(t))return t;for(var i=-1,a=(e=Bi(e,t)).length,s=a-1,u=t;null!=u&&++io?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var a=n(o);++i>>1,a=t[o];null!==a&&!As(a)&&(n?a<=e:a=a){var c=e?null:wo(t);if(c)return Yn(c);s=!1,i=gn,l=new Mr}else l=e?[]:u;t:for(;++r=r?t:Yi(t,e,n)}var $i=fn||function(t){return Pe.clearTimeout(t)};function Ji(t,e){if(e)return t.slice();var n=t.length,r=we?we(n):new t.constructor(n);return t.copy(r),r}function Gi(t){var e=new t.constructor(t.byteLength);return new Me(e).set(new Me(t)),e}function Xi(t,e){var n=e?Gi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Qi(t,e){if(t!==e){var n=t!==o,r=null===t,i=t==t,a=As(t),s=e!==o,u=null===e,l=e==e,c=As(e);if(!u&&!c&&!a&&t>e||a&&s&&l&&!u&&!c||r&&s&&l||!n&&l||!i)return 1;if(!r&&!a&&!c&&t1?n[i-1]:o,s=i>2?n[2]:o;for(a=t.length>3&&"function"==typeof a?(i--,a):o,s&&Vo(n[0],n[1],s)&&(a=i<3?o:a,i=1),e=te(e);++r-1?i[a?e[s]:s]:o}}function ho(t){return Yo(function(e){var n=e.length,r=n,i=mr.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new re(u);if(i&&!s&&"wrapper"==Po(a))var s=new mr([],!0)}for(r=s?r:n;++r1&&M.reverse(),h&&cu))return!1;var c=a.get(t);if(c&&a.get(e))return c==e;var d=-1,h=!0,f=n&_?new Mr:o;for(a.set(t,e),a.set(e,t);++d-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(jt,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ke(W,function(n){var r="_."+n[0];e&n[1]&&!Xe(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(Ht);return e?e[1].split(Nt):[]}(r),n)))}function aa(t){var e=0,n=0;return function(){var r=Vn(),i=E-(r-n);if(n=r,i>0){if(++e>=Y)return arguments[0]}else e=0;return t.apply(o,arguments)}}function sa(t,e){var n=-1,r=t.length,i=r-1;for(e=e===o?r:e;++n1?t[e-1]:o;return Ca(t,n="function"==typeof n?(t.pop(),n):o)});function Ha(t){var e=hr(t);return e.__chain__=!0,e}function Na(t,e){return e(t)}var Wa=Yo(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Or(e,t)};return!(e>1||this.__actions__.length)&&r instanceof _r&&Bo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:Na,args:[i],thisArg:o}),new mr(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(o),t})):this.thru(i)});var Ua=ro(function(t,e,n){le.call(t,n)?++t[n]:Cr(t,n,1)});var za=co(ma),Fa=co(_a);function qa(t,e){return(_s(t)?Ke:Hr)(t,Ro(e,3))}function Ba(t,e){return(_s(t)?$e:Nr)(t,Ro(e,3))}var Va=ro(function(t,e,n){le.call(t,n)?t[n].push(e):Cr(t,n,[e])});var Ka=wi(function(t,e,r){var i=-1,o="function"==typeof e,a=ys(t)?n(t.length):[];return Hr(t,function(t){a[++i]=o?Be(e,t,r):ni(t,e,r)}),a}),$a=ro(function(t,e,n){Cr(t,n,e)});function Ja(t,e){return(_s(t)?Ze:di)(t,Ro(e,3))}var Ga=ro(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]});var Xa=wi(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Vo(t,e[0],e[1])?e=[]:n>2&&Vo(e[0],e[1],e[2])&&(e=[e[0]]),_i(t,Fr(e,1),[])}),Qa=Rn||function(){return Pe.Date.now()};function Za(t,e,n){return e=n?o:e,e=t&&null==e?t.length:e,ko(t,k,o,o,o,o,e)}function ts(t,e){var n;if("function"!=typeof e)throw new re(u);return t=Ws(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=o),n}}var es=wi(function(t,e,n){var r=v;if(n.length){var i=xn(n,Ao(es));r|=w}return ko(t,r,e,n,i)}),ns=wi(function(t,e,n){var r=v|y;if(n.length){var i=xn(n,Ao(ns));r|=w}return ko(e,r,t,n,i)});function rs(t,e,n){var r,i,a,s,l,c,d=0,h=!1,f=!1,p=!0;if("function"!=typeof t)throw new re(u);function m(e){var n=r,a=i;return r=i=o,d=e,s=t.apply(a,n)}function _(t){var n=t-c;return c===o||n>=e||n<0||f&&t-d>=a}function v(){var t=Qa();if(_(t))return y(t);l=ra(v,function(t){var n=e-(t-c);return f?Bn(n,a-(t-d)):n}(t))}function y(t){return l=o,p&&r?m(t):(r=i=o,s)}function g(){var t=Qa(),n=_(t);if(r=arguments,i=this,c=t,n){if(l===o)return function(t){return d=t,l=ra(v,e),h?m(t):s}(c);if(f)return $i(l),l=ra(v,e),m(c)}return l===o&&(l=ra(v,e)),s}return e=zs(e)||0,Ds(n)&&(h=!!n.leading,a=(f="maxWait"in n)?qn(zs(n.maxWait)||0,e):a,p="trailing"in n?!!n.trailing:p),g.cancel=function(){l!==o&&$i(l),d=0,r=c=i=l=o},g.flush=function(){return l===o?s:y(Qa())},g}var is=wi(function(t,e){return Ir(t,1,e)}),os=wi(function(t,e,n){return Ir(t,zs(e)||0,n)});function as(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new re(u);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(as.Cache||gr),n}function ss(t){if("function"!=typeof t)throw new re(u);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}as.Cache=gr;var us=Vi(function(t,e){var n=(e=1==e.length&&_s(e[0])?Ze(e[0],vn(Ro())):Ze(Fr(e,1),vn(Ro()))).length;return wi(function(r){for(var i=-1,o=Bn(r.length,n);++i=e}),ms=ri(function(){return arguments}())?ri:function(t){return Ss(t)&&le.call(t,"callee")&&!Oe.call(t,"callee")},_s=n.isArray,vs=Ne?vn(Ne):function(t){return Ss(t)&&Xr(t)==ut};function ys(t){return null!=t&&Ts(t.length)&&!Ls(t)}function gs(t){return Ss(t)&&ys(t)}var Ms=Wn||zu,bs=We?vn(We):function(t){return Ss(t)&&Xr(t)==B};function ws(t){if(!Ss(t))return!1;var e=Xr(t);return e==K||e==V||"string"==typeof t.message&&"string"==typeof t.name&&!Es(t)}function Ls(t){if(!Ds(t))return!1;var e=Xr(t);return e==$||e==J||e==F||e==tt}function ks(t){return"number"==typeof t&&t==Ws(t)}function Ts(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=A}function Ds(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Ss(t){return null!=t&&"object"==typeof t}var xs=Ue?vn(Ue):function(t){return Ss(t)&&Uo(t)==G};function Ys(t){return"number"==typeof t||Ss(t)&&Xr(t)==X}function Es(t){if(!Ss(t)||Xr(t)!=Z)return!1;var e=xe(t);if(null===e)return!0;var n=le.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&ue.call(n)==fe}var Cs=ze?vn(ze):function(t){return Ss(t)&&Xr(t)==et};var Os=Fe?vn(Fe):function(t){return Ss(t)&&Uo(t)==nt};function Ps(t){return"string"==typeof t||!_s(t)&&Ss(t)&&Xr(t)==rt}function As(t){return"symbol"==typeof t||Ss(t)&&Xr(t)==it}var Rs=qe?vn(qe):function(t){return Ss(t)&&Ts(t.length)&&!!De[Xr(t)]};var Is=go(ci),js=go(function(t,e){return t<=e});function Hs(t){if(!t)return[];if(ys(t))return Ps(t)?On(t):eo(t);if(je&&t[je])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[je]());var e=Uo(t);return(e==G?Dn:e==nt?Yn:hu)(t)}function Ns(t){return t?(t=zs(t))===P||t===-P?(t<0?-1:1)*R:t==t?t:0:0===t?t:0}function Ws(t){var e=Ns(t),n=e%1;return e==e?n?e-n:e:0}function Us(t){return t?Pr(Ws(t),0,j):0}function zs(t){if("number"==typeof t)return t;if(As(t))return I;if(Ds(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Ds(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(At,"");var n=Bt.test(t);return n||Kt.test(t)?Ee(t.slice(2),n?2:8):qt.test(t)?I:+t}function Fs(t){return no(t,iu(t))}function qs(t){return null==t?"":Ri(t)}var Bs=io(function(t,e){if(Go(e)||ys(e))no(e,ru(e),t);else for(var n in e)le.call(e,n)&&Sr(t,n,e[n])}),Vs=io(function(t,e){no(e,iu(e),t)}),Ks=io(function(t,e,n,r){no(e,iu(e),t,r)}),$s=io(function(t,e,n,r){no(e,ru(e),t,r)}),Js=Yo(Or);var Gs=wi(function(t,e){t=te(t);var n=-1,r=e.length,i=r>2?e[2]:o;for(i&&Vo(e[0],e[1],i)&&(r=1);++n1),e}),no(t,Co(t),n),r&&(n=Ar(n,h|f|p,So));for(var i=e.length;i--;)ji(n,e[i]);return n});var uu=Yo(function(t,e){return null==t?{}:function(t,e){return vi(t,e,function(e,n){return Zs(t,n)})}(t,e)});function lu(t,e){if(null==t)return{};var n=Ze(Co(t),function(t){return[t]});return e=Ro(e),vi(t,n,function(t,n){return e(t,n[0])})}var cu=Lo(ru),du=Lo(iu);function hu(t){return null==t?[]:yn(t,ru(t))}var fu=uo(function(t,e,n){return e=e.toLowerCase(),t+(n?pu(e):e)});function pu(t){return wu(qs(t).toLowerCase())}function mu(t){return(t=qs(t))&&t.replace(Jt,wn).replace(ge,"")}var _u=uo(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),vu=uo(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),yu=so("toLowerCase");var gu=uo(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()});var Mu=uo(function(t,e,n){return t+(n?" ":"")+wu(e)});var bu=uo(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),wu=so("toUpperCase");function Lu(t,e,n){return t=qs(t),(e=n?o:e)===o?function(t){return Le.test(t)}(t)?function(t){return t.match(be)||[]}(t):function(t){return t.match(Wt)||[]}(t):t.match(e)||[]}var ku=wi(function(t,e){try{return Be(t,o,e)}catch(t){return ws(t)?t:new i(t)}}),Tu=Yo(function(t,e){return Ke(e,function(e){e=la(e),Cr(t,e,es(t[e],t))}),t});function Du(t){return function(){return t}}var Su=ho(),xu=ho(!0);function Yu(t){return t}function Eu(t){return si("function"==typeof t?t:Ar(t,h))}var Cu=wi(function(t,e){return function(n){return ni(n,t,e)}}),Ou=wi(function(t,e){return function(n){return ni(t,n,e)}});function Pu(t,e,n){var r=ru(e),i=$r(e,r);null!=n||Ds(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=$r(e,ru(e)));var o=!(Ds(n)&&"chain"in n&&!n.chain),a=Ls(t);return Ke(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=eo(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,tn([this.value()],arguments))})}),t}function Au(){}var Ru=_o(Ze),Iu=_o(Je),ju=_o(rn);function Hu(t){return Ko(t)?hn(la(t)):function(t){return function(e){return Jr(e,t)}}(t)}var Nu=yo(),Wu=yo(!0);function Uu(){return[]}function zu(){return!1}var Fu=mo(function(t,e){return t+e},0),qu=bo("ceil"),Bu=mo(function(t,e){return t/e},1),Vu=bo("floor");var Ku=mo(function(t,e){return t*e},1),$u=bo("round"),Ju=mo(function(t,e){return t-e},0);return hr.after=function(t,e){if("function"!=typeof e)throw new re(u);return t=Ws(t),function(){if(--t<1)return e.apply(this,arguments)}},hr.ary=Za,hr.assign=Bs,hr.assignIn=Vs,hr.assignInWith=Ks,hr.assignWith=$s,hr.at=Js,hr.before=ts,hr.bind=es,hr.bindAll=Tu,hr.bindKey=ns,hr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return _s(t)?t:[t]},hr.chain=Ha,hr.chunk=function(t,e,r){e=(r?Vo(t,e,r):e===o)?1:qn(Ws(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var a=0,s=0,u=n(jn(i/e));ai?0:i+n),(r=r===o||r>i?i:Ws(r))<0&&(r+=i),r=n>r?0:Us(r);n>>0)?(t=qs(t))&&("string"==typeof e||null!=e&&!Cs(e))&&!(e=Ri(e))&&Tn(t)?Ki(On(t),0,n):t.split(e,n):[]},hr.spread=function(t,e){if("function"!=typeof t)throw new re(u);return e=null==e?0:qn(Ws(e),0),wi(function(n){var r=n[e],i=Ki(n,0,e);return r&&tn(i,r),Be(t,this,i)})},hr.tail=function(t){var e=null==t?0:t.length;return e?Yi(t,1,e):[]},hr.take=function(t,e,n){return t&&t.length?Yi(t,0,(e=n||e===o?1:Ws(e))<0?0:e):[]},hr.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?Yi(t,(e=r-(e=n||e===o?1:Ws(e)))<0?0:e,r):[]},hr.takeRightWhile=function(t,e){return t&&t.length?Ni(t,Ro(e,3),!1,!0):[]},hr.takeWhile=function(t,e){return t&&t.length?Ni(t,Ro(e,3)):[]},hr.tap=function(t,e){return e(t),t},hr.throttle=function(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new re(u);return Ds(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),rs(t,e,{leading:r,maxWait:e,trailing:i})},hr.thru=Na,hr.toArray=Hs,hr.toPairs=cu,hr.toPairsIn=du,hr.toPath=function(t){return _s(t)?Ze(t,la):As(t)?[t]:eo(ua(qs(t)))},hr.toPlainObject=Fs,hr.transform=function(t,e,n){var r=_s(t),i=r||Ms(t)||Rs(t);if(e=Ro(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Ds(t)&&Ls(o)?fr(xe(t)):{}}return(i?Ke:Vr)(t,function(t,r,i){return e(n,t,r,i)}),n},hr.unary=function(t){return Za(t,1)},hr.union=Sa,hr.unionBy=xa,hr.unionWith=Ya,hr.uniq=function(t){return t&&t.length?Ii(t):[]},hr.uniqBy=function(t,e){return t&&t.length?Ii(t,Ro(e,2)):[]},hr.uniqWith=function(t,e){return e="function"==typeof e?e:o,t&&t.length?Ii(t,o,e):[]},hr.unset=function(t,e){return null==t||ji(t,e)},hr.unzip=Ea,hr.unzipWith=Ca,hr.update=function(t,e,n){return null==t?t:Hi(t,e,qi(n))},hr.updateWith=function(t,e,n,r){return r="function"==typeof r?r:o,null==t?t:Hi(t,e,qi(n),r)},hr.values=hu,hr.valuesIn=function(t){return null==t?[]:yn(t,iu(t))},hr.without=Oa,hr.words=Lu,hr.wrap=function(t,e){return ls(qi(e),t)},hr.xor=Pa,hr.xorBy=Aa,hr.xorWith=Ra,hr.zip=Ia,hr.zipObject=function(t,e){return zi(t||[],e||[],Sr)},hr.zipObjectDeep=function(t,e){return zi(t||[],e||[],Ti)},hr.zipWith=ja,hr.entries=cu,hr.entriesIn=du,hr.extend=Vs,hr.extendWith=Ks,Pu(hr,hr),hr.add=Fu,hr.attempt=ku,hr.camelCase=fu,hr.capitalize=pu,hr.ceil=qu,hr.clamp=function(t,e,n){return n===o&&(n=e,e=o),n!==o&&(n=(n=zs(n))==n?n:0),e!==o&&(e=(e=zs(e))==e?e:0),Pr(zs(t),e,n)},hr.clone=function(t){return Ar(t,p)},hr.cloneDeep=function(t){return Ar(t,h|p)},hr.cloneDeepWith=function(t,e){return Ar(t,h|p,e="function"==typeof e?e:o)},hr.cloneWith=function(t,e){return Ar(t,p,e="function"==typeof e?e:o)},hr.conformsTo=function(t,e){return null==e||Rr(t,e,ru(e))},hr.deburr=mu,hr.defaultTo=function(t,e){return null==t||t!=t?e:t},hr.divide=Bu,hr.endsWith=function(t,e,n){t=qs(t),e=Ri(e);var r=t.length,i=n=n===o?r:Pr(Ws(n),0,r);return(n-=e.length)>=0&&t.slice(n,i)==e},hr.eq=hs,hr.escape=function(t){return(t=qs(t))&&Tt.test(t)?t.replace(Lt,Ln):t},hr.escapeRegExp=function(t){return(t=qs(t))&&Pt.test(t)?t.replace(Ot,"\\$&"):t},hr.every=function(t,e,n){var r=_s(t)?Je:Wr;return n&&Vo(t,e,n)&&(e=o),r(t,Ro(e,3))},hr.find=za,hr.findIndex=ma,hr.findKey=function(t,e){return an(t,Ro(e,3),Vr)},hr.findLast=Fa,hr.findLastIndex=_a,hr.findLastKey=function(t,e){return an(t,Ro(e,3),Kr)},hr.floor=Vu,hr.forEach=qa,hr.forEachRight=Ba,hr.forIn=function(t,e){return null==t?t:qr(t,Ro(e,3),iu)},hr.forInRight=function(t,e){return null==t?t:Br(t,Ro(e,3),iu)},hr.forOwn=function(t,e){return t&&Vr(t,Ro(e,3))},hr.forOwnRight=function(t,e){return t&&Kr(t,Ro(e,3))},hr.get=Qs,hr.gt=fs,hr.gte=ps,hr.has=function(t,e){return null!=t&&zo(t,e,Zr)},hr.hasIn=Zs,hr.head=ya,hr.identity=Yu,hr.includes=function(t,e,n,r){t=ys(t)?t:hu(t),n=n&&!r?Ws(n):0;var i=t.length;return n<0&&(n=qn(i+n,0)),Ps(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&un(t,e,n)>-1},hr.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Ws(n);return i<0&&(i=qn(r+i,0)),un(t,e,i)},hr.inRange=function(t,e,n){return e=Ns(e),n===o?(n=e,e=0):n=Ns(n),function(t,e,n){return t>=Bn(e,n)&&t=-A&&t<=A},hr.isSet=Os,hr.isString=Ps,hr.isSymbol=As,hr.isTypedArray=Rs,hr.isUndefined=function(t){return t===o},hr.isWeakMap=function(t){return Ss(t)&&Uo(t)==at},hr.isWeakSet=function(t){return Ss(t)&&Xr(t)==st},hr.join=function(t,e){return null==t?"":zn.call(t,e)},hr.kebabCase=_u,hr.last=wa,hr.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==o&&(i=(i=Ws(n))<0?qn(r+i,0):Bn(i,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,i):sn(t,cn,i,!0)},hr.lowerCase=vu,hr.lowerFirst=yu,hr.lt=Is,hr.lte=js,hr.max=function(t){return t&&t.length?Ur(t,Yu,Qr):o},hr.maxBy=function(t,e){return t&&t.length?Ur(t,Ro(e,2),Qr):o},hr.mean=function(t){return dn(t,Yu)},hr.meanBy=function(t,e){return dn(t,Ro(e,2))},hr.min=function(t){return t&&t.length?Ur(t,Yu,ci):o},hr.minBy=function(t,e){return t&&t.length?Ur(t,Ro(e,2),ci):o},hr.stubArray=Uu,hr.stubFalse=zu,hr.stubObject=function(){return{}},hr.stubString=function(){return""},hr.stubTrue=function(){return!0},hr.multiply=Ku,hr.nth=function(t,e){return t&&t.length?mi(t,Ws(e)):o},hr.noConflict=function(){return Pe._===this&&(Pe._=pe),this},hr.noop=Au,hr.now=Qa,hr.pad=function(t,e,n){t=qs(t);var r=(e=Ws(e))?Cn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return vo(Hn(i),n)+t+vo(jn(i),n)},hr.padEnd=function(t,e,n){t=qs(t);var r=(e=Ws(e))?Cn(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var i=$n();return Bn(t+i*(e-t+Ye("1e-"+((i+"").length-1))),e)}return Mi(t,e)},hr.reduce=function(t,e,n){var r=_s(t)?en:pn,i=arguments.length<3;return r(t,Ro(e,4),n,i,Hr)},hr.reduceRight=function(t,e,n){var r=_s(t)?nn:pn,i=arguments.length<3;return r(t,Ro(e,4),n,i,Nr)},hr.repeat=function(t,e,n){return e=(n?Vo(t,e,n):e===o)?1:Ws(e),bi(qs(t),e)},hr.replace=function(){var t=arguments,e=qs(t[0]);return t.length<3?e:e.replace(t[1],t[2])},hr.result=function(t,e,n){var r=-1,i=(e=Bi(e,t)).length;for(i||(i=1,t=o);++rA)return[];var n=j,r=Bn(t,j);e=Ro(e),t-=j;for(var i=_n(r,e);++n=a)return t;var u=n-Cn(r);if(u<1)return r;var l=s?Ki(s,0,u).join(""):t.slice(0,u);if(i===o)return l+r;if(s&&(u+=l.length-u),Cs(i)){if(t.slice(u).search(i)){var c,d=l;for(i.global||(i=ee(i.source,qs(Ft.exec(i))+"g")),i.lastIndex=0;c=i.exec(d);)var h=c.index;l=l.slice(0,h===o?u:h)}}else if(t.indexOf(Ri(i),u)!=u){var f=l.lastIndexOf(i);f>-1&&(l=l.slice(0,f))}return l+r},hr.unescape=function(t){return(t=qs(t))&&kt.test(t)?t.replace(wt,Pn):t},hr.uniqueId=function(t){var e=++ce;return qs(t)+e},hr.upperCase=bu,hr.upperFirst=wu,hr.each=qa,hr.eachRight=Ba,hr.first=ya,Pu(hr,function(){var t={};return Vr(hr,function(e,n){le.call(hr.prototype,n)||(t[n]=e)}),t}(),{chain:!1}),hr.VERSION="4.17.14",Ke(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){hr[t].placeholder=hr}),Ke(["drop","take"],function(t,e){_r.prototype[t]=function(n){n=n===o?1:qn(Ws(n),0);var r=this.__filtered__&&!e?new _r(this):this.clone();return r.__filtered__?r.__takeCount__=Bn(n,r.__takeCount__):r.__views__.push({size:Bn(n,j),type:t+(r.__dir__<0?"Right":"")}),r},_r.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),Ke(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==C||3==n;_r.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Ro(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Ke(["head","last"],function(t,e){var n="take"+(e?"Right":"");_r.prototype[t]=function(){return this[n](1).value()[0]}}),Ke(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");_r.prototype[t]=function(){return this.__filtered__?new _r(this):this[n](1)}}),_r.prototype.compact=function(){return this.filter(Yu)},_r.prototype.find=function(t){return this.filter(t).head()},_r.prototype.findLast=function(t){return this.reverse().find(t)},_r.prototype.invokeMap=wi(function(t,e){return"function"==typeof t?new _r(this):this.map(function(n){return ni(n,t,e)})}),_r.prototype.reject=function(t){return this.filter(ss(Ro(t)))},_r.prototype.slice=function(t,e){t=Ws(t);var n=this;return n.__filtered__&&(t>0||e<0)?new _r(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==o&&(n=(e=Ws(e))<0?n.dropRight(-e):n.take(e-t)),n)},_r.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},_r.prototype.toArray=function(){return this.take(j)},Vr(_r.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=hr[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);i&&(hr.prototype[e]=function(){var e=this.__wrapped__,s=r?[1]:arguments,u=e instanceof _r,l=s[0],c=u||_s(e),d=function(t){var e=i.apply(hr,tn([t],s));return r&&h?e[0]:e};c&&n&&"function"==typeof l&&1!=l.length&&(u=c=!1);var h=this.__chain__,f=!!this.__actions__.length,p=a&&!h,m=u&&!f;if(!a&&c){e=m?e:new _r(this);var _=t.apply(e,s);return _.__actions__.push({func:Na,args:[d],thisArg:o}),new mr(_,h)}return p&&m?t.apply(this,s):(_=this.thru(d),p?r?_.value()[0]:_.value():_)})}),Ke(["pop","push","shift","sort","splice","unshift"],function(t){var e=ie[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);hr.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(_s(i)?i:[],t)}return this[n](function(n){return e.apply(_s(n)?n:[],t)})}}),Vr(_r.prototype,function(t,e){var n=hr[e];if(n){var r=n.name+"";le.call(rr,r)||(rr[r]=[]),rr[r].push({name:e,func:n})}}),rr[fo(o,y).name]=[{name:"wrapper",func:o}],_r.prototype.clone=function(){var t=new _r(this.__wrapped__);return t.__actions__=eo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=eo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=eo(this.__views__),t},_r.prototype.reverse=function(){if(this.__filtered__){var t=new _r(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},_r.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=_s(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r=this.__values__.length;return{done:t,value:t?o:this.__values__[this.__index__++]}},hr.prototype.plant=function(t){for(var e,n=this;n instanceof pr;){var r=da(n);r.__index__=0,r.__values__=o,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e},hr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof _r){var e=t;return this.__actions__.length&&(e=new _r(this)),(e=e.reverse()).__actions__.push({func:Na,args:[Da],thisArg:o}),new mr(e,this.__chain__)}return this.thru(Da)},hr.prototype.toJSON=hr.prototype.valueOf=hr.prototype.value=function(){return Wi(this.__wrapped__,this.__actions__)},hr.prototype.first=hr.prototype.head,je&&(hr.prototype[je]=function(){return this}),hr}();Pe._=An,(i=function(){return An}.call(e,n,e,r))===o||(r.exports=i)}).call(this)}).call(this,n("yLpj"),n("YuTi")(t))},Lyyb:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return Math.max(t.documentElement.offsetHeight||0,t.height||0,t.body.scrollHeight||0,t.body.offsetHeight||0)},t.exports=e.default},"M/3T":function(t,e,n){"use strict";var r=n("YuV3"),i=n("Rc3x"),o=n("xLLm"),a=n("Ohsa"),s=n("4Ssj"),u=n("gwiw"),l=n("jl2H"),c=n("Fdon"),d=n("GTce"),h=n("rzV7"),f=r.topLevelTypes,p=o.canUseDOM&&"documentMode"in document&&document.documentMode<=11,m={select:{phasedRegistrationNames:{bubbled:d({onSelect:null}),captured:d({onSelectCapture:null})},dependencies:[f.topBlur,f.topContextMenu,f.topFocus,f.topKeyDown,f.topMouseDown,f.topMouseUp,f.topSelectionChange]}},_=null,v=null,y=null,g=!1,M=!1,b=d({onSelect:null});function w(t,e){if(g||null==_||_!==l())return null;var n=function(t){if("selectionStart"in t&&s.hasSelectionCapabilities(t))return{start:t.selectionStart,end:t.selectionEnd};if(window.getSelection){var e=window.getSelection();return{anchorNode:e.anchorNode,anchorOffset:e.anchorOffset,focusNode:e.focusNode,focusOffset:e.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}(_);if(!y||!h(y,n)){y=n;var r=u.getPooled(m.select,v,t,e);return r.type="select",r.target=_,i.accumulateTwoPhaseDispatches(r),r}return null}var L={eventTypes:m,extractEvents:function(t,e,n,r){if(!M)return null;var i=e?a.getNodeFromInstance(e):window;switch(t){case f.topFocus:(c(i)||"true"===i.contentEditable)&&(_=i,v=e,y=null);break;case f.topBlur:_=null,v=null,y=null;break;case f.topMouseDown:g=!0;break;case f.topContextMenu:case f.topMouseUp:return g=!1,w(n,r);case f.topSelectionChange:if(p)break;case f.topKeyDown:case f.topKeyUp:return w(n,r)}return null},didPutListener:function(t,e,n){e===b&&(M=!0)}};t.exports=L},MgzW:function(t,e,n){"use strict"; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,a,s=function(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),u=1;u0;)t=t._hostParent,n--;for(;o-n>0;)e=e._hostParent,o--;for(var s=n;s--;){if(t===e)return t;t=t._hostParent,e=e._hostParent}return null}t.exports={isAncestor:function(t,e){"_hostNode"in t||r("35"),"_hostNode"in e||r("35");for(;e;){if(e===t)return!0;e=e._hostParent}return!1},getLowestCommonAncestor:i,getParentInstance:function(t){return"_hostNode"in t||r("36"),t._hostParent},traverseTwoPhase:function(t,e,n){for(var r,i=[];t;)i.push(t),t=t._hostParent;for(r=i.length;r-- >0;)e(i[r],!1,n);for(r=0;r0;)n(l[u],!1,o)}}},Nezt:function(t,e,n){"use strict";var r=n("Hpnx"),i=(n("Mlyf"),n("Ohsa")),o=n("dnI5"),a=n("hF74");n("2NuI"),n("2mcs");t.exports=function(t){if(null==t)return null;if(1===t.nodeType)return t;var e=o.get(t);if(e)return(e=a(e))?i.getNodeFromInstance(e):null;"function"==typeof t.render?r("44"):r("45",Object.keys(t))}},NgHg:function(t,e,n){"use strict";var r=/-(.)/g;t.exports=function(t){return t.replace(r,function(t,e){return e.toUpperCase()})}},"O+UP":function(t,e,n){"use strict";var r=n("RttE"),i=n("qtIE"),o=n("L+VR"),a=n("JQ/6"),s=n("YB+A");t.exports=function(t){var e=o.get(t);e&&(e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,i.css(e.scrollbarXRail,"display","block"),i.css(e.scrollbarYRail,"display","block"),e.railXMarginWidth=r.toInt(i.css(e.scrollbarXRail,"marginLeft"))+r.toInt(i.css(e.scrollbarXRail,"marginRight")),e.railYMarginHeight=r.toInt(i.css(e.scrollbarYRail,"marginTop"))+r.toInt(i.css(e.scrollbarYRail,"marginBottom")),i.css(e.scrollbarXRail,"display","none"),i.css(e.scrollbarYRail,"display","none"),a(t),s(t,"top",t.scrollTop),s(t,"left",t.scrollLeft),i.css(e.scrollbarXRail,"display",""),i.css(e.scrollbarYRail,"display",""))}},O0vw:function(t,e,n){"use strict";n("MgzW");var r=n("ohE5"),i=(n("2mcs"),r);t.exports=i},O9o6:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return!(!t||!r.test(t))};var r=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;t.exports=e.default},OIYi:function(t,e,n){!function(t){"use strict";t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}})}(n("wd/R"))},OUwc:function(t,e,n){"use strict";var r=n("Hpnx"),i=(n("2NuI"),function(t){if(this.instancePool.length){var e=this.instancePool.pop();return this.call(e,t),e}return new this(t)}),o=function(t){t instanceof this||r("25"),t.destructor(),this.instancePool.length=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n("wd/R"))},Ohsa:function(t,e,n){"use strict";var r=n("Hpnx"),i=n("IWzG"),o=n("Flyf"),a=(n("2NuI"),i.ID_ATTRIBUTE_NAME),s=o,u="__reactInternalInstance$"+Math.random().toString(36).slice(2);function l(t){for(var e;e=t._renderedComponent;)t=e;return t}function c(t,e){var n=l(t);n._hostNode=e,e[u]=n}function d(t,e){if(!(t._flags&s.hasCachedChildNodes)){var n=t._renderedChildren,i=e.firstChild;t:for(var o in n)if(n.hasOwnProperty(o)){var u=n[o],d=l(u)._domID;if(0!==d){for(;null!==i;i=i.nextSibling)if(1===i.nodeType&&i.getAttribute(a)===String(d)||8===i.nodeType&&i.nodeValue===" react-text: "+d+" "||8===i.nodeType&&i.nodeValue===" react-empty: "+d+" "){c(u,i);continue t}r("32",d)}}t._flags|=s.hasCachedChildNodes}}function h(t){if(t[u])return t[u];for(var e,n,r=[];!t[u];){if(r.push(t),!t.parentNode)return null;t=t.parentNode}for(;t&&(n=t[u]);t=r.pop())e=n,r.length&&d(n,t);return e}var f={getClosestInstanceFromNode:h,getInstanceFromNode:function(t){var e=h(t);return null!=e&&e._hostNode===t?e:null},getNodeFromInstance:function(t){if(void 0===t._hostNode&&r("33"),t._hostNode)return t._hostNode;for(var e=[];!t._hostNode;)e.push(t),t._hostParent||r("34"),t=t._hostParent;for(;e.length;t=e.pop())d(t,t._hostNode);return t._hostNode},precacheChildNodes:d,precacheNode:c,uncacheNode:function(t){var e=t._hostNode;e&&(delete e[u],t._hostNode=null)}};t.exports=f},OjkT:function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n("wd/R"))},P5bY:function(t,e,n){"use strict";t.exports={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"}},P8bY:function(t,e,n){"use strict";var r=n("mWC9");function i(t,e,n,i){return r.call(this,t,e,n,i)}r.augmentClass(i,{deltaX:function(t){return"deltaX"in t?t.deltaX:"wheelDeltaX"in t?-t.wheelDeltaX:0},deltaY:function(t){return"deltaY"in t?t.deltaY:"wheelDeltaY"in t?-t.wheelDeltaY:"wheelDelta"in t?-t.wheelDelta:0},deltaZ:null,deltaMode:null}),t.exports=i},PA2r:function(t,e,n){!function(t){"use strict";var e="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");function r(t){return t>1&&t<5&&1!=~~(t/10)}function i(t,e,n,i){var o=t+" ";switch(n){case"s":return e||i?"pár sekund":"pár sekundami";case"m":return e?"minuta":i?"minutu":"minutou";case"mm":return e||i?o+(r(t)?"minuty":"minut"):o+"minutami";case"h":return e?"hodina":i?"hodinu":"hodinou";case"hh":return e||i?o+(r(t)?"hodiny":"hodin"):o+"hodinami";case"d":return e||i?"den":"dnem";case"dd":return e||i?o+(r(t)?"dny":"dní"):o+"dny";case"M":return e||i?"měsíc":"měsícem";case"MM":return e||i?o+(r(t)?"měsíce":"měsíců"):o+"měsíci";case"y":return e||i?"rok":"rokem";case"yy":return e||i?o+(r(t)?"roky":"let"):o+"lety"}}t.defineLocale("cs",{months:e,monthsShort:n,monthsParse:function(t,e){var n,r=[];for(n=0;n<12;n++)r[n]=new RegExp("^"+t[n]+"$|^"+e[n]+"$","i");return r}(e,n),shortMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(n),longMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(e),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},PDX0:function(t,e){(function(e){t.exports=e}).call(this,{})},PZZ8:function(t,e,n){"use strict";e.__esModule=!0,e.default=function(t){function e(e,n,r,i,o,a){var s=i||"<>",u=a||r;if(null==n[r])return e?new Error("Required "+o+" `"+u+"` was not specified in `"+s+"`."):null;for(var l=arguments.length,c=Array(l>6?l-6:0),d=6;d=10?t:t+12},week:{dow:0,doy:6}})}(n("wd/R"))},Plyv:function(t,e,n){"use strict";e.__esModule=!0;var r=n("qe8o"),i=n("K669");e.default=function(t,e){(0,r.mapAsync)(t.routes,function(e,n,r){!function(t,e,n){if(e.component||e.components)n(null,e.component||e.components);else{var r=e.getComponent||e.getComponents;if(r){var o=r.call(e,t,n);(0,i.isPromise)(o)&&o.then(function(t){return n(null,t)},n)}else n()}}(t,e,r)},e)},t.exports=e.default},PpIw:function(t,e,n){!function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}})}(n("wd/R"))},Q92V:function(t,e){!function(n){if("object"==typeof e&&void 0!==t)t.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Terminal=n()}}(function(){return function(){return function t(e,n,r){function i(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};e[a][0].call(c.exports,function(t){return i(e[a][1][t]||t)},c,c.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a0&&t.terminal.handler(n)}},0)},t.prototype.updateCompositionElements=function(t){var e=this;if(this.isComposing){var n=this.terminal.element.querySelector(".terminal-cursor");if(n){var r=this.terminal.element.querySelector(".xterm-rows").offsetTop+n.offsetTop;this.compositionView.style.left=n.offsetLeft+"px",this.compositionView.style.top=r+"px",this.compositionView.style.height=n.offsetHeight+"px",this.compositionView.style.lineHeight=n.offsetHeight+"px";var i=this.compositionView.getBoundingClientRect();this.textarea.style.left=n.offsetLeft+"px",this.textarea.style.top=r+"px",this.textarea.style.width=i.width+"px",this.textarea.style.height=i.height+"px",this.textarea.style.lineHeight=i.height+"px"}t||setTimeout(function(){return e.updateCompositionElements(!0)},0)}},t.prototype.clearTextareaPosition=function(){this.textarea.style.left="",this.textarea.style.top=""},t}();n.CompositionHelper=r},{}],3:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),function(t){t.NUL="\0",t.SOH="",t.STX="",t.ETX="",t.EOT="",t.ENQ="",t.ACK="",t.BEL="",t.BS="\b",t.HT="\t",t.LF="\n",t.VT="\v",t.FF="\f",t.CR="\r",t.SO="",t.SI="",t.DLE="",t.DC1="",t.DC2="",t.DC3="",t.DC4="",t.NAK="",t.SYN="",t.ETB="",t.CAN="",t.EM="",t.SUB="",t.ESC="",t.FS="",t.GS="",t.RS="",t.US="",t.SP=" ",t.DEL=""}(n.C0||(n.C0={}))},{}],4:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(){this._events=this._events||{}}return t.prototype.on=function(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)},t.prototype.off=function(t,e){if(this._events[t])for(var n=this._events[t],r=n.length;r--;)if(n[r]===e||n[r].listener===e)return void n.splice(r,1)},t.prototype.removeAllListeners=function(t){this._events[t]&&delete this._events[t]},t.prototype.once=function(t,e){function n(){var r=Array.prototype.slice.call(arguments);return this.off(t,n),e.apply(this,r)}return n.listener=e,this.on(t,n)},t.prototype.emit=function(t){if(this._events[t])for(var e=Array.prototype.slice.call(arguments,1),n=this._events[t],r=0;r=" "){var n=a(e);this._terminal.charset&&this._terminal.charset[t]&&(t=this._terminal.charset[t]);var r=this._terminal.y+this._terminal.ybase;if(!n&&this._terminal.x)return void(this._terminal.lines.get(r)[this._terminal.x-1]&&(this._terminal.lines.get(r)[this._terminal.x-1][2]?this._terminal.lines.get(r)[this._terminal.x-1][1]+=t:this._terminal.lines.get(r)[this._terminal.x-2]&&(this._terminal.lines.get(r)[this._terminal.x-2][1]+=t),this._terminal.updateRange(this._terminal.y)));if(this._terminal.x+n-1>=this._terminal.cols)if(this._terminal.wraparoundMode)this._terminal.x=0,this._terminal.y++,this._terminal.y>this._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll());else if(2===n)return;if(r=this._terminal.y+this._terminal.ybase,this._terminal.insertMode)for(var i=0;ithis._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll()),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.carriageReturn=function(){this._terminal.x=0},t.prototype.backspace=function(){this._terminal.x>0&&this._terminal.x--},t.prototype.tab=function(){this._terminal.x=this._terminal.nextStop()},t.prototype.shiftOut=function(){this._terminal.setgLevel(1)},t.prototype.shiftIn=function(){this._terminal.setgLevel(0)},t.prototype.insertChars=function(t){var e,n,r,i;for((e=t[0])<1&&(e=1),n=this._terminal.y+this._terminal.ybase,r=this._terminal.x,i=[this._terminal.eraseAttr()," ",1];e--&&r=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.cursorForward=function(t){var e=t[0];e<1&&(e=1),this._terminal.x+=e,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.cursorBackward=function(t){var e=t[0];e<1&&(e=1),this._terminal.x>=this._terminal.cols&&this._terminal.x--,this._terminal.x-=e,this._terminal.x<0&&(this._terminal.x=0)},t.prototype.cursorNextLine=function(t){var e=t[0];e<1&&(e=1),this._terminal.y+=e,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=0},t.prototype.cursorPrecedingLine=function(t){var e=t[0];e<1&&(e=1),this._terminal.y-=e,this._terminal.y<0&&(this._terminal.y=0),this._terminal.x=0},t.prototype.cursorCharAbsolute=function(t){var e=t[0];e<1&&(e=1),this._terminal.x=e-1},t.prototype.cursorPosition=function(t){var e,n;e=t[0]-1,n=t.length>=2?t[1]-1:0,e<0?e=0:e>=this._terminal.rows&&(e=this._terminal.rows-1),n<0?n=0:n>=this._terminal.cols&&(n=this._terminal.cols-1),this._terminal.x=n,this._terminal.y=e},t.prototype.cursorForwardTab=function(t){for(var e=t[0]||1;e--;)this._terminal.x=this._terminal.nextStop()},t.prototype.eraseInDisplay=function(t){var e;switch(t[0]){case 0:for(this._terminal.eraseRight(this._terminal.x,this._terminal.y),e=this._terminal.y+1;e=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.HPositionRelative=function(t){var e=t[0];e<1&&(e=1),this._terminal.x+=e,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.repeatPrecedingCharacter=function(t){for(var e=t[0]||1,n=this._terminal.lines.get(this._terminal.ybase+this._terminal.y),r=n[this._terminal.x-1]||[this._terminal.defAttr," ",1];e--;)n[this._terminal.x++]=r},t.prototype.sendDeviceAttributes=function(t){t[0]>0||(this._terminal.prefix?">"===this._terminal.prefix&&(this._terminal.is("xterm")?this._terminal.send(r.C0.ESC+"[>0;276;0c"):this._terminal.is("rxvt-unicode")?this._terminal.send(r.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._terminal.send(t[0]+"c"):this._terminal.is("screen")&&this._terminal.send(r.C0.ESC+"[>83;40003;0c")):this._terminal.is("xterm")||this._terminal.is("rxvt-unicode")||this._terminal.is("screen")?this._terminal.send(r.C0.ESC+"[?1;2c"):this._terminal.is("linux")&&this._terminal.send(r.C0.ESC+"[?6c"))},t.prototype.linePosAbsolute=function(t){var e=t[0];e<1&&(e=1),this._terminal.y=e-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1)},t.prototype.VPositionRelative=function(t){var e=t[0];e<1&&(e=1),this._terminal.y+=e,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},t.prototype.HVPosition=function(t){t[0]<1&&(t[0]=1),t[1]<1&&(t[1]=1),this._terminal.y=t[0]-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=t[1]-1,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},t.prototype.tabClear=function(t){var e=t[0];e<=0?delete this._terminal.tabs[this._terminal.x]:3===e&&(this._terminal.tabs={})},t.prototype.setMode=function(t){if(t.length>1)for(var e=0;e1e3,this._terminal.mouseEvents=!0,this._terminal.element.style.cursor="default",this._terminal.log("Binding to mouse events.");break;case 1004:this._terminal.sendFocus=!0;break;case 1005:this._terminal.utfMouse=!0;break;case 1006:this._terminal.sgrMouse=!0;break;case 1015:this._terminal.urxvtMouse=!0;break;case 25:this._terminal.cursorHidden=!1;break;case 1049:case 47:case 1047:if(!this._terminal.normal){var n={lines:this._terminal.lines,ybase:this._terminal.ybase,ydisp:this._terminal.ydisp,x:this._terminal.x,y:this._terminal.y,scrollTop:this._terminal.scrollTop,scrollBottom:this._terminal.scrollBottom,tabs:this._terminal.tabs};this._terminal.reset(),this._terminal.viewport.syncScrollArea(),this._terminal.normal=n,this._terminal.showCursor()}}}else switch(t[0]){case 4:this._terminal.insertMode=!0}},t.prototype.resetMode=function(t){if(t.length>1)for(var e=0;e>18,o=this._terminal.curAttr>>9&511,a=511&this._terminal.curAttr;r=30&&e<=37?o=e-30:e>=40&&e<=47?a=e-40:e>=90&&e<=97?o=(e+=8)-90:e>=100&&e<=107?a=(e+=8)-100:0===e?(i=this._terminal.defAttr>>18,o=this._terminal.defAttr>>9&511,a=511&this._terminal.defAttr):1===e?i|=1:4===e?i|=2:5===e?i|=4:7===e?i|=8:8===e?i|=16:22===e?i&=-2:24===e?i&=-3:25===e?i&=-5:27===e?i&=-9:28===e?i&=-17:39===e?o=this._terminal.defAttr>>9&511:49===e?a=511&this._terminal.defAttr:38===e?2===t[r+1]?(r+=2,-1===(o=this._terminal.matchColor(255&t[r],255&t[r+1],255&t[r+2]))&&(o=511),r+=2):5===t[r+1]&&(o=e=255&t[r+=2]):48===e?2===t[r+1]?(r+=2,-1===(a=this._terminal.matchColor(255&t[r],255&t[r+1],255&t[r+2]))&&(a=511),r+=2):5===t[r+1]&&(a=e=255&t[r+=2]):100===e?(o=this._terminal.defAttr>>9&511,a=511&this._terminal.defAttr):this._terminal.error("Unknown SGR attribute: %d.",e);this._terminal.curAttr=i<<18|o<<9|a}else this._terminal.curAttr=this._terminal.defAttr},t.prototype.deviceStatus=function(t){if(this._terminal.prefix){if("?"===this._terminal.prefix)switch(t[0]){case 6:this._terminal.send(r.C0.ESC+"[?"+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R")}}else switch(t[0]){case 5:this._terminal.send(r.C0.ESC+"[0n");break;case 6:this._terminal.send(r.C0.ESC+"["+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R")}},t.prototype.softReset=function(t){this._terminal.cursorHidden=!1,this._terminal.insertMode=!1,this._terminal.originMode=!1,this._terminal.wraparoundMode=!0,this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._terminal.applicationCursor=!1,this._terminal.scrollTop=0,this._terminal.scrollBottom=this._terminal.rows-1,this._terminal.curAttr=this._terminal.defAttr,this._terminal.x=this._terminal.y=0,this._terminal.charset=null,this._terminal.glevel=0,this._terminal.charsets=[null]},t.prototype.setCursorStyle=function(t){var e=t[0]<1?1:t[0];switch(e){case 1:case 2:this._terminal.setOption("cursorStyle","block");break;case 3:case 4:this._terminal.setOption("cursorStyle","underline");break;case 5:case 6:this._terminal.setOption("cursorStyle","bar")}var n=e%2==1;this._terminal.setOption("cursorBlink",n)},t.prototype.setScrollRegion=function(t){this._terminal.prefix||(this._terminal.scrollTop=(t[0]||1)-1,this._terminal.scrollBottom=(t[1]&&t[1]<=this._terminal.rows?t[1]:this._terminal.rows)-1,this._terminal.x=0,this._terminal.y=0)},t.prototype.saveCursor=function(t){this._terminal.savedX=this._terminal.x,this._terminal.savedY=this._terminal.y},t.prototype.restoreCursor=function(t){this._terminal.x=this._terminal.savedX||0,this._terminal.y=this._terminal.savedY||0},t}();n.InputHandler=o;var a=function(t){var e=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];return function(n){return 0===n?t.nul:n<32||n>=127&&n<160?t.control:function(t){var n,r=0,i=e.length-1;if(te[i][1])return!1;for(;i>=r;)if(n=Math.floor((r+i)/2),t>e[n][1])r=n+1;else{if(!(t=4352&&(t<=4447||9001===t||9002===t||t>=11904&&t<=42191&&12351!==t||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=131072&&t<=196605||t>=196608&&t<=262141)}(n)?2:1}}({nul:0,control:0})},{"./Charsets":1,"./EscapeSequences":3}],6:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=new RegExp("(?:^|[^\\da-z\\.-]+)((https?:\\/\\/)((([\\da-z\\.-]+)\\.([a-z\\.]{2,6}))|((\\d{1,3}\\.){3}\\d{1,3})|(localhost))(:\\d{1,5})?(\\/[\\/\\w\\.\\-%]*)*(\\?[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;\\=\\.\\-]*)?(#[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;\\=\\.\\-]*)?)($|[^\\/\\w\\.\\-%]+)"),i=0,o=function(){function t(t,e){this._nextLinkMatcherId=i,this._document=t,this._rows=e,this._rowTimeoutIds=[],this._linkMatchers=[],this.registerLinkMatcher(r,null,{matchIndex:1})}return t.prototype.linkifyRow=function(e){var n=this._rowTimeoutIds[e];n&&clearTimeout(n),this._rowTimeoutIds[e]=setTimeout(this._linkifyRow.bind(this,e),t.TIME_BEFORE_LINKIFY)},t.prototype.attachHypertextLinkHandler=function(t){this._linkMatchers[i].handler=t},t.prototype.registerLinkMatcher=function(t,e,n){if(void 0===n&&(n={}),this._nextLinkMatcherId!==i&&!e)throw new Error("handler must be defined");var r={id:this._nextLinkMatcherId++,regex:t,handler:e,matchIndex:n.matchIndex,validationCallback:n.validationCallback,priority:n.priority||0};return this._addLinkMatcherToList(r),r.id},t.prototype._addLinkMatcherToList=function(t){if(0!==this._linkMatchers.length){for(var e=this._linkMatchers.length-1;e>=0;e--)if(t.priority<=this._linkMatchers[e].priority)return void this._linkMatchers.splice(e+1,0,t);this._linkMatchers.splice(0,0,t)}else this._linkMatchers.push(t)},t.prototype.deregisterLinkMatcher=function(t){for(var e=1;e=0){var u=this._createAnchorElement(e,n,r);if(a.textContent.length===e.length)if(3===a.nodeType)this._replaceNode(a,u);else{var l=a;if("A"===l.nodeName)return;l.innerHTML="",l.appendChild(u)}else this._replaceNodeSubstringWithNode(a,u,e,s);return u}}},t.prototype._findLinkMatch=function(t,e,n){var r=t.match(e);return r&&0!==r.length?r["number"!=typeof n?0:n]:null},t.prototype._createAnchorElement=function(t,e,n){var r=this._document.createElement("a");return r.textContent=t,n?(r.href=t,r.target="_blank",r.addEventListener("click",function(n){if(e)return e(n,t)})):r.addEventListener("click",function(n){if(!r.classList.contains("xterm-invalid-link"))return e(n,t)}),r},t.prototype._replaceNode=function(t){for(var e=[],n=1;n":function(t){return t.setPrefix(">")},"!":function(t){return t.setPrefix("!")},0:function(t){return t.setParam(10*t.getParam())},1:function(t){return t.setParam(10*t.getParam()+1)},2:function(t){return t.setParam(10*t.getParam()+2)},3:function(t){return t.setParam(10*t.getParam()+3)},4:function(t){return t.setParam(10*t.getParam()+4)},5:function(t){return t.setParam(10*t.getParam()+5)},6:function(t){return t.setParam(10*t.getParam()+6)},7:function(t){return t.setParam(10*t.getParam()+7)},8:function(t){return t.setParam(10*t.getParam()+8)},9:function(t){return t.setParam(10*t.getParam()+9)},$:function(t){return t.setPostfix("$")},'"':function(t){return t.setPostfix('"')}," ":function(t){return t.setPostfix(" ")},"'":function(t){return t.setPostfix("'")},";":function(t){return t.finalizeParam()}};s[r.C0.CAN]=function(t){return t.setState(u.NORMAL)};var u,l={};l["@"]=function(t,e,n){return t.insertChars(e)},l.A=function(t,e,n){return t.cursorUp(e)},l.B=function(t,e,n){return t.cursorDown(e)},l.C=function(t,e,n){return t.cursorForward(e)},l.D=function(t,e,n){return t.cursorBackward(e)},l.E=function(t,e,n){return t.cursorNextLine(e)},l.F=function(t,e,n){return t.cursorPrecedingLine(e)},l.G=function(t,e,n){return t.cursorCharAbsolute(e)},l.H=function(t,e,n){return t.cursorPosition(e)},l.I=function(t,e,n){return t.cursorForwardTab(e)},l.J=function(t,e,n){return t.eraseInDisplay(e)},l.K=function(t,e,n){return t.eraseInLine(e)},l.L=function(t,e,n){return t.insertLines(e)},l.M=function(t,e,n){return t.deleteLines(e)},l.P=function(t,e,n){return t.deleteChars(e)},l.S=function(t,e,n){return t.scrollUp(e)},l.T=function(t,e,n){e.length<2&&!n&&t.scrollDown(e)},l.X=function(t,e,n){return t.eraseChars(e)},l.Z=function(t,e,n){return t.cursorBackwardTab(e)},l["`"]=function(t,e,n){return t.charPosAbsolute(e)},l.a=function(t,e,n){return t.HPositionRelative(e)},l.b=function(t,e,n){return t.repeatPrecedingCharacter(e)},l.c=function(t,e,n){return t.sendDeviceAttributes(e)},l.d=function(t,e,n){return t.linePosAbsolute(e)},l.e=function(t,e,n){return t.VPositionRelative(e)},l.f=function(t,e,n){return t.HVPosition(e)},l.g=function(t,e,n){return t.tabClear(e)},l.h=function(t,e,n){return t.setMode(e)},l.l=function(t,e,n){return t.resetMode(e)},l.m=function(t,e,n){return t.charAttributes(e)},l.n=function(t,e,n){return t.deviceStatus(e)},l.p=function(t,e,n){switch(n){case"!":t.softReset(e)}},l.q=function(t,e,n,r){" "===r&&t.setCursorStyle(e)},l.r=function(t,e){return t.setScrollRegion(e)},l.s=function(t,e){return t.saveCursor(e)},l.u=function(t,e){return t.restoreCursor(e)},l[r.C0.CAN]=function(t,e,n,r,i){return i.setState(u.NORMAL)},function(t){t[t.NORMAL=0]="NORMAL",t[t.ESCAPED=1]="ESCAPED",t[t.CSI_PARAM=2]="CSI_PARAM",t[t.CSI=3]="CSI",t[t.OSC=4]="OSC",t[t.CHARSET=5]="CHARSET",t[t.DCS=6]="DCS",t[t.IGNORE=7]="IGNORE"}(u||(u={}));var c=function(){function t(t,e){this._inputHandler=t,this._terminal=e,this._state=u.NORMAL}return t.prototype.parse=function(t){var e,n,c,d,h=t.length;for(this._position=0,this._terminal.surrogate_high&&(t=this._terminal.surrogate_high+t,this._terminal.surrogate_high="");this._position":this._terminal.log("Switching back to normal keypad."),this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._state=u.NORMAL;break;default:this._state=u.NORMAL,this._terminal.error("Unknown ESC control: %s.",n)}break;case u.CHARSET:n in i.CHARSETS?(e=i.CHARSETS[n],"/"===n&&this.skipNextChar()):e=i.DEFAULT_CHARSET,this._terminal.setgCharset(this._terminal.gcharset,e),this._terminal.gcharset=null,this._state=u.NORMAL;break;case u.OSC:if(n===r.C0.ESC||n===r.C0.BEL){switch(n===r.C0.ESC&&this._position++,this._terminal.params.push(this._terminal.currentParam),this._terminal.params[0]){case 0:case 1:case 2:this._terminal.params[1]&&(this._terminal.title=this._terminal.params[1],this._terminal.handleTitle(this._terminal.title))}this._terminal.params=[],this._terminal.currentParam=0,this._state=u.NORMAL}else this._terminal.params.length?this._terminal.currentParam+=n:n>="0"&&n<="9"?this._terminal.currentParam=10*this._terminal.currentParam+n.charCodeAt(0)-48:";"===n&&(this._terminal.params.push(this._terminal.currentParam),this._terminal.currentParam="");break;case u.CSI_PARAM:if(n in s){s[n](this);break}this.finalizeParam(),this._state=u.CSI;case u.CSI:n in l?l[n](this._inputHandler,this._terminal.params,this._terminal.prefix,this._terminal.postfix,this):this._terminal.error("Unknown CSI code: %s.",n),this._state=u.NORMAL,this._terminal.prefix="",this._terminal.postfix="";break;case u.DCS:if(n===r.C0.ESC||n===r.C0.BEL){switch(n===r.C0.ESC&&this._position++,this._terminal.prefix){case"":break;case"$q":switch(this._terminal.currentParam){case'"q':this._terminal.send(r.C0.ESC+'P1$r0"q'+r.C0.ESC+"\\");break;case'"p':this._terminal.send(r.C0.ESC+'P1$r61"p'+r.C0.ESC+"\\");break;case"r":var f=this._terminal.scrollTop+1+";"+(this._terminal.scrollBottom+1)+"r";this._terminal.send(r.C0.ESC+"P1$r"+f+r.C0.ESC+"\\");break;case"m":this._terminal.send(r.C0.ESC+"P1$r0m"+r.C0.ESC+"\\");break;default:this._terminal.error("Unknown DCS Pt: %s.",f)}break;case"+p":case"+q":break;default:this._terminal.error("Unknown DCS prefix: %s.",this._terminal.prefix)}this._terminal.currentParam=0,this._terminal.prefix="",this._state=u.NORMAL}else this._terminal.currentParam?this._terminal.currentParam+=n:this._terminal.prefix||"$"===n||"+"===n?2===this._terminal.prefix.length?this._terminal.currentParam=n:this._terminal.prefix+=n:this._terminal.currentParam=n;break;case u.IGNORE:n!==r.C0.ESC&&n!==r.C0.BEL||(n===r.C0.ESC&&this._position++,this._state=u.NORMAL)}}},t.prototype.setState=function(t){this._state=t},t.prototype.setPrefix=function(t){this._terminal.prefix=t},t.prototype.setPostfix=function(t){this._terminal.postfix=t},t.prototype.setParam=function(t){this._terminal.currentParam=t},t.prototype.getParam=function(){return this._terminal.currentParam},t.prototype.finalizeParam=function(){this._terminal.params.push(this._terminal.currentParam),this._terminal.currentParam=0},t.prototype.skipNextChar=function(){this._position++},t}();n.Parser=c},{"./Charsets":1,"./EscapeSequences":3}],8:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r;!function(t){t[t.BOLD=1]="BOLD",t[t.UNDERLINE=2]="UNDERLINE",t[t.BLINK=4]="BLINK",t[t.INVERSE=8]="INVERSE",t[t.INVISIBLE=16]="INVISIBLE"}(r||(r={}));var i=null,o=function(){function t(t){this._terminal=t,this._refreshRowsQueue=[],this._refreshFramesSkipped=0,this._refreshAnimationFrame=null,null===i&&(i=function(t){var e=t.getElementsByTagName("body")[0],n=t.createElement("span");n.innerHTML="hello world",e.appendChild(n);var r=n.scrollWidth;n.style.fontWeight="bold";var i=n.scrollWidth;return e.removeChild(n),r!==i}(this._terminal.document))}return t.prototype.queueRefresh=function(t,e){this._refreshRowsQueue.push({start:t,end:e}),this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame(this._refreshLoop.bind(this)))},t.prototype._refreshLoop=function(){if(this._terminal.writeBuffer.length>0&&this._refreshFramesSkipped++<=5)this._refreshAnimationFrame=window.requestAnimationFrame(this._refreshLoop.bind(this));else{var t,e;if(this._refreshFramesSkipped=0,this._refreshRowsQueue.length>4)t=0,e=this._terminal.rows-1;else{t=this._refreshRowsQueue[0].start,e=this._refreshRowsQueue[0].end;for(var n=1;ne&&(e=this._refreshRowsQueue[n].end)}this._refreshRowsQueue=[],this._refreshAnimationFrame=null,this._refresh(t,e)}},t.prototype._refresh=function(t,e){var n,o,a,s,u,l,c,d,h,f,p,m,_,v,y;document.activeElement;for(e-t>=this._terminal.rows/2&&(y=this._terminal.element.parentNode)&&this._terminal.element.removeChild(this._terminal.rowContainer),d=this._terminal.cols,o=t,e>=this._terminal.rows&&(this._terminal.log("`end` is too large. Most likely a bad CSR."),e=this._terminal.rows-1);o<=e;o++)if(v=o+this._terminal.ydisp,(s=this._terminal.lines.get(v))&&this._terminal.children[o]){for(u="",n=this._terminal.y===o-(this._terminal.ybase-this._terminal.ydisp)&&this._terminal.cursorState&&!this._terminal.cursorHidden?this._terminal.x:-1,f=this._terminal.defAttr,a=0;a"),h!==this._terminal.defAttr))if(-1===h)u+='';else{var g=[];p=511&h,m=h>>9&511,(_=h>>18)&r.BOLD&&(i||g.push("xterm-bold"),m<8&&(m+=8)),_&r.UNDERLINE&&g.push("xterm-underline"),_&r.BLINK&&g.push("xterm-blink"),_&r.INVERSE&&(p=[m,m=p][0],1&_&&m<8&&(m+=8)),_&r.INVISIBLE&&g.push("xterm-hidden"),_&r.INVERSE&&(257===p&&(p=15),256===m&&(m=0)),p<256&&g.push("xterm-bg-color-"+p),m<256&&g.push("xterm-color-"+m),u+="'),l){case"&":u+="&";break;case"<":u+="<";break;case">":u+=">";break;default:u+=l<=" "?" ":l}2===c&&(u+=""),f=h}f!==this._terminal.defAttr&&(u+=""),this._terminal.children[o].innerHTML=u}y&&this._terminal.element.appendChild(this._terminal.rowContainer),this._terminal.emit("refresh",{element:this._terminal.element,start:t,end:e})},t}();n.Renderer=o},{}],9:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e,n,r){var i=this;this.terminal=t,this.viewportElement=e,this.scrollArea=n,this.charMeasure=r,this.currentRowHeight=0,this.lastRecordedBufferLength=0,this.lastRecordedViewportHeight=0,this.terminal.on("scroll",this.syncScrollArea.bind(this)),this.terminal.on("resize",this.syncScrollArea.bind(this)),this.viewportElement.addEventListener("scroll",this.onScroll.bind(this)),setTimeout(function(){return i.syncScrollArea()},0)}return t.prototype.refresh=function(){if(this.charMeasure.height>0){var t=this.charMeasure.height!==this.currentRowHeight;t&&(this.currentRowHeight=this.charMeasure.height,this.viewportElement.style.lineHeight=this.charMeasure.height+"px",this.terminal.rowContainer.style.lineHeight=this.charMeasure.height+"px");var e=this.lastRecordedViewportHeight!==this.terminal.rows;(t||e)&&(this.lastRecordedViewportHeight=this.terminal.rows,this.viewportElement.style.height=this.charMeasure.height*this.terminal.rows+"px"),this.scrollArea.style.height=this.charMeasure.height*this.lastRecordedBufferLength+"px"}},t.prototype.syncScrollArea=function(){this.lastRecordedBufferLength!==this.terminal.lines.length?(this.lastRecordedBufferLength=this.terminal.lines.length,this.refresh()):this.lastRecordedViewportHeight!==this.terminal.rows?this.refresh():this.charMeasure.height!==this.currentRowHeight&&this.refresh();var t=this.terminal.ydisp*this.currentRowHeight;this.viewportElement.scrollTop!==t&&(this.viewportElement.scrollTop=t)},t.prototype.onScroll=function(t){var e=Math.round(this.viewportElement.scrollTop/this.currentRowHeight)-this.terminal.ydisp;this.terminal.scrollDisp(e,!0)},t.prototype.onWheel=function(t){if(0!==t.deltaY){var e=1;t.deltaMode===WheelEvent.DOM_DELTA_LINE?e=this.currentRowHeight:t.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(e=this.currentRowHeight*this.terminal.rows),this.viewportElement.scrollTop+=t.deltaY*e,t.preventDefault()}},t}();n.Viewport=r},{}],10:[function(t,e,n){"use strict";function r(t){var e=String.fromCharCode(32),n=String.fromCharCode(160),r=new RegExp(n,"g");return t.split("\n").map(function(t){return t.replace(/\s+$/g,"").replace(r,e)}).join("\n")}Object.defineProperty(n,"__esModule",{value:!0}),n.prepareTextForClipboard=r,n.copyHandler=function(t,e){var n=r(window.getSelection().toString());e.browser.isMSIE?window.clipboardData.setData("Text",n):t.clipboardData.setData("text/plain",n),t.preventDefault()},n.pasteHandler=function(t,e){t.stopPropagation();var n=function(n){return e.handler(n),e.textarea.value="",e.cancel(t)};e.browser.isMSIE?window.clipboardData&&n(window.clipboardData.getData("Text")):t.clipboardData&&n(t.clipboardData.getData("text/plain"))},n.rightClickHandler=function(t,e){var n=document.getSelection(),i=r(n.toString()),o=!1,a=t.clientX,s=t.clientY;if(n.rangeCount){for(var u=n.getRangeAt(0).getClientRects(),l=0;lc.left&&ac.top&&sthis._length)for(var e=this._length;e=t;i--)this._array[this._getCyclicIndex(i+n.length)]=this._array[this._getCyclicIndex(i)];for(i=0;ithis.maxLength?(this._startIndex+=this._length+n.length-this.maxLength,this._length=this.maxLength):this._length+=n.length}},t.prototype.trimStart=function(t){t>this._length&&(t=this._length),this._startIndex+=t,this._length-=t},t.prototype.shiftElements=function(t,e,n){if(!(e<=0)){if(t<0||t>=this._length)throw new Error("start argument out of range");if(t+n<0)throw new Error("Cannot shift elements in list beyond index 0");if(n>0){for(var r=e-1;r>=0;r--)this.set(t+r+n,this.get(t+r));var i=t+e+n-this._length;if(i>0)for(this._length+=i;this._length>this.maxLength;)this._length--,this._startIndex++}else for(r=0;r=0}},{}],15:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=t("./CompositionHelper"),i=t("./EventEmitter"),o=t("./Viewport"),a=t("./handlers/Clipboard"),s=t("./utils/CircularList"),u=t("./EscapeSequences"),l=t("./InputHandler"),c=t("./Parser"),d=t("./Renderer"),h=t("./Linkifier"),f=t("./utils/CharMeasure"),p=t("./utils/Browser"),m="undefined"!=typeof window?window.document:null;function _(t){var e=this;if(!(this instanceof _))return new _(arguments[0],arguments[1],arguments[2]);e.browser=p,e.cancel=_.cancel,i.EventEmitter.call(this),"number"==typeof t&&(t={cols:arguments[0],rows:arguments[1],handler:arguments[2]}),t=t||{},Object.keys(_.defaults).forEach(function(n){null==t[n]&&(t[n]=_.options[n],_[n]!==_.defaults[n]&&(t[n]=_[n])),e[n]=t[n]}),8===t.colors.length?t.colors=t.colors.concat(_._colors.slice(8)):16===t.colors.length?t.colors=t.colors.concat(_._colors.slice(16)):10===t.colors.length?t.colors=t.colors.slice(0,-2).concat(_._colors.slice(8,-2),t.colors.slice(-2)):18===t.colors.length&&(t.colors=t.colors.concat(_._colors.slice(16,-2),t.colors.slice(-2))),this.colors=t.colors,this.options=t,this.parent=t.body||t.parent||(m?m.getElementsByTagName("body")[0]:null),this.cols=t.cols||t.geometry[0],this.rows=t.rows||t.geometry[1],this.geometry=[this.cols,this.rows],t.handler&&this.on("data",t.handler),this.ybase=0,this.ydisp=0,this.x=0,this.y=0,this.cursorState=0,this.cursorHidden=!1,this.convertEol,this.queue="",this.scrollTop=0,this.scrollBottom=this.rows-1,this.customKeydownHandler=null,this.applicationKeypad=!1,this.applicationCursor=!1,this.originMode=!1,this.insertMode=!1,this.wraparoundMode=!0,this.normal=null,this.charset=null,this.gcharset=null,this.glevel=0,this.charsets=[null],this.decLocator,this.x10Mouse,this.vt200Mouse,this.vt300Mouse,this.normalMouse,this.mouseEvents,this.sendFocus,this.utfMouse,this.sgrMouse,this.urxvtMouse,this.element,this.children,this.refreshStart,this.refreshEnd,this.savedX,this.savedY,this.savedCols,this.readable=!0,this.writable=!0,this.defAttr=131840,this.curAttr=this.defAttr,this.params=[],this.currentParam=0,this.prefix="",this.postfix="",this.inputHandler=new l.InputHandler(this),this.parser=new c.Parser(this.inputHandler,this),this.renderer=this.renderer||null,this.linkifier=this.linkifier||null,this.writeBuffer=[],this.writeInProgress=!1,this.xoffSentToCatchUp=!1,this.writeStopped=!1,this.surrogate_high="",this.lines=new s.CircularList(this.scrollback);for(var n=this.rows;n--;)this.lines.push(this.blankLine());this.tabs,this.setupStops(),this.userScrolling=!1}function v(t,e,n,r){Array.isArray(t)||(t=[t]),t.forEach(function(t){t.addEventListener(e,n,r||!1)})}function y(t,e,n,r){t.removeEventListener(e,n,r||!1)}function g(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n}function M(t,e){var n=t.browser.isMac&&e.altKey&&!e.ctrlKey&&!e.metaKey||t.browser.isMSWindows&&e.altKey&&e.ctrlKey&&!e.metaKey;return"keypress"==e.type?n:n&&(!e.keyCode||e.keyCode>47)}function b(t,e,n){var r=t<<16|e<<8|n;if(null!=b._cache[r])return b._cache[r];for(var i,o,a,s,u,l=1/0,c=-1,d=0;d<_.vcolors.length;d++){if(o=(i=_.vcolors[d])[0],a=i[1],s=i[2],0===(u=b.distance(t,e,n,o,a,s))){c=d;break}u>16&255,t>>8&255,255&t]);return e}(),_.defaults={colors:_.colors,theme:"default",convertEol:!1,termName:"xterm",geometry:[80,24],cursorBlink:!1,cursorStyle:"block",visualBell:!1,popOnBell:!1,scrollback:1e3,screenKeys:!1,debug:!1,cancelEvents:!1,disableStdin:!1,useFlowControl:!1,tabStopWidth:8},_.options={},_.focus=null,function(t,e,n){if(t.forEach)return t.forEach(e,n);for(var r=0;re){var n=this.lines.length-e,r=this.ydisp-n<0;this.lines.trimStart(n),this.ybase=Math.max(this.ybase-n,0),this.ydisp=Math.max(this.ydisp-n,0),r&&this.refresh(0,this.rows-1)}this.lines.maxLength=e,this.viewport.syncScrollArea()}}switch(this[t]=e,this.options[t]=e,t){case"cursorBlink":this.element.classList.toggle("xterm-cursor-blink",e);break;case"cursorStyle":this.element.classList.toggle("xterm-cursor-style-underline","underline"===e),this.element.classList.toggle("xterm-cursor-style-bar","bar"===e);break;case"tabStopWidth":this.setupStops()}},_.bindFocus=function(t){v(t.textarea,"focus",function(e){t.sendFocus&&t.send(u.C0.ESC+"[I"),t.element.classList.add("focus"),t.showCursor(),_.focus=t,t.emit("focus",{terminal:t})})},_.prototype.blur=function(){return this.textarea.blur()},_.bindBlur=function(t){v(t.textarea,"blur",function(e){t.refresh(t.y,t.y),t.sendFocus&&t.send(u.C0.ESC+"[O"),t.element.classList.remove("focus"),_.focus=null,t.emit("blur",{terminal:t})})},_.prototype.initGlobal=function(){var t=this;function e(e){a.rightClickHandler.call(this,e,t)}_.bindKeys(this),_.bindFocus(this),_.bindBlur(this),v(this.element,"copy",function(e){a.copyHandler.call(this,e,t)}),v(this.textarea,"paste",function(e){a.pasteHandler.call(this,e,t)}),v(this.element,"paste",function(e){a.pasteHandler.call(this,e,t)}),t.browser.isFirefox?v(this.element,"mousedown",function(t){2==t.button&&e(t)}):v(this.element,"contextmenu",e)},_.bindKeys=function(t){v(t.element,"keydown",function(e){m.activeElement==this&&t.keyDown(e)},!0),v(t.element,"keypress",function(e){m.activeElement==this&&t.keyPress(e)},!0),v(t.element,"keyup",function(e){(function(t){return 16===t.keyCode||17===t.keyCode||18===t.keyCode})(e)||t.focus(t)},!0),v(t.textarea,"keydown",function(e){t.keyDown(e)},!0),v(t.textarea,"keypress",function(e){t.keyPress(e),this.value=""},!0),v(t.textarea,"compositionstart",t.compositionHelper.compositionstart.bind(t.compositionHelper)),v(t.textarea,"compositionupdate",t.compositionHelper.compositionupdate.bind(t.compositionHelper)),v(t.textarea,"compositionend",t.compositionHelper.compositionend.bind(t.compositionHelper)),t.on("refresh",t.compositionHelper.updateCompositionElements.bind(t.compositionHelper)),t.on("refresh",function(e){t.queueLinkification(e.start,e.end)})},_.prototype.insertRow=function(t){return"object"!=typeof t&&(t=m.createElement("div")),this.rowContainer.appendChild(t),this.children.push(t),t},_.prototype.open=function(t){var e=this,n=0;if(this.parent=t||this.parent,!this.parent)throw new Error("Terminal requires a parent element.");for(this.context=this.parent.ownerDocument.defaultView,this.document=this.parent.ownerDocument,this.body=this.document.getElementsByTagName("body")[0],this.element=this.document.createElement("div"),this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.add("xterm-theme-"+this.theme),this.element.classList.toggle("xterm-cursor-blink",this.options.cursorBlink),this.element.style.height,this.element.setAttribute("tabindex",0),this.viewportElement=m.createElement("div"),this.viewportElement.classList.add("xterm-viewport"),this.element.appendChild(this.viewportElement),this.viewportScrollArea=m.createElement("div"),this.viewportScrollArea.classList.add("xterm-scroll-area"),this.viewportElement.appendChild(this.viewportScrollArea),this.rowContainer=m.createElement("div"),this.rowContainer.classList.add("xterm-rows"),this.element.appendChild(this.rowContainer),this.children=[],this.linkifier=new h.Linkifier(m,this.children),this.helperContainer=m.createElement("div"),this.helperContainer.classList.add("xterm-helpers"),this.element.appendChild(this.helperContainer),this.textarea=m.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.textarea.addEventListener("focus",function(){e.emit("focus",{terminal:e})}),this.textarea.addEventListener("blur",function(){e.emit("blur",{terminal:e})}),this.helperContainer.appendChild(this.textarea),this.compositionView=m.createElement("div"),this.compositionView.classList.add("composition-view"),this.compositionHelper=new r.CompositionHelper(this.textarea,this.compositionView,this),this.helperContainer.appendChild(this.compositionView),this.charSizeStyleElement=m.createElement("style"),this.helperContainer.appendChild(this.charSizeStyleElement);n0?64:65}r=t.shiftKey?4:0,i=t.metaKey?8:0,o=t.ctrlKey?16:0,a=r|i|o,e.vt200Mouse?a&=o:e.normalMouse||(a=0);return n=32+(a<<2)+n}(t),i=s(t))switch(a(r,i),t.overrideType||t.type){case"mousedown":n=r;break;case"mouseup":n=32}}function i(t){var e,r=n;(e=s(t))&&a(r+=32,e)}function o(t,n){if(e.utfMouse){if(2047===n)return t.push(0);n<127?t.push(n):(n>2047&&(n=2047),t.push(192|n>>6),t.push(128|63&n))}else{if(255===n)return t.push(0);n>127&&(n=127),t.push(n)}}function a(t,n){if(e.vt300Mouse){t&=3,n.x-=32,n.y-=32;var r=u.C0.ESC+"[24";if(0===t)r+="1";else if(1===t)r+="3";else if(2===t)r+="5";else{if(3===t)return;r+="0"}return r+="~["+n.x+","+n.y+"]\r",void e.send(r)}return e.decLocator?(t&=3,n.x-=32,n.y-=32,0===t?t=2:1===t?t=4:2===t?t=6:3===t&&(t=3),void e.send(u.C0.ESC+"["+t+";"+(3===t?4:0)+";"+n.y+";"+n.x+";"+(n.page||0)+"&w")):e.urxvtMouse?(n.x-=32,n.y-=32,n.x++,n.y++,void e.send(u.C0.ESC+"["+t+";"+n.x+";"+n.y+"M")):e.sgrMouse?(n.x-=32,n.y-=32,void e.send(u.C0.ESC+"[<"+((3==(3&t)?-4&t:t)-32)+";"+n.x+";"+n.y+(3==(3&t)?"m":"M"))):(o(r=[],t),o(r,n.x),o(r,n.y),void e.send(u.C0.ESC+"[M"+String.fromCharCode.apply(String,r)))}function s(t){var n,r,i;if(null!=t.pageX){for(n=t.pageX,r=t.pageY,i=e.element;i&&i!==e.document.documentElement;)n-=i.offsetLeft,r-=i.offsetTop,i="offsetParent"in i?i.offsetParent:i.parentNode;return n=Math.ceil(n/e.charMeasure.width),r=Math.ceil(r/e.charMeasure.height),n<0&&(n=0),n>e.cols&&(n=e.cols),r<0&&(r=0),r>e.rows&&(r=e.rows),{x:n+=32,y:r+=32,type:"wheel"}}}v(t,"mousedown",function(t){if(e.mouseEvents)return r(t),e.focus(),e.vt200Mouse?(t.overrideType="mouseup",r(t),e.cancel(t)):(e.normalMouse&&v(e.document,"mousemove",i),e.x10Mouse||v(e.document,"mouseup",function t(n){return r(n),e.normalMouse&&y(e.document,"mousemove",i),y(e.document,"mouseup",t),e.cancel(n)}),e.cancel(t))}),v(t,"wheel",function(t){if(e.mouseEvents&&!(e.x10Mouse||e.vt300Mouse||e.decLocator))return r(t),e.cancel(t)}),v(t,"wheel",function(t){if(!e.mouseEvents)return e.viewport.onWheel(t),e.cancel(t)})},_.prototype.destroy=function(){this.readable=!1,this.writable=!1,this._events={},this.handler=function(){},this.write=function(){},this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},_.prototype.refresh=function(t,e){this.renderer&&this.renderer.queueRefresh(t,e)},_.prototype.queueLinkification=function(t,e){if(this.linkifier)for(var n=t;n<=e;n++)this.linkifier.linkifyRow(n)},_.prototype.showCursor=function(){this.cursorState||(this.cursorState=1,this.refresh(this.y,this.y))},_.prototype.scroll=function(){var t;this.lines.length===this.lines.maxLength&&(this.lines.trimStart(1),this.ybase--,0!==this.ydisp&&this.ydisp--),this.ybase++,this.userScrolling||(this.ydisp=this.ybase),t=this.ybase+this.rows-1,(t-=this.rows-1-this.scrollBottom)===this.lines.length?this.lines.push(this.blankLine()):this.lines.splice(t,0,this.blankLine()),0!==this.scrollTop&&(0!==this.ybase&&(this.ybase--,this.userScrolling||(this.ydisp=this.ybase)),this.lines.splice(this.ybase+this.scrollTop,1)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom),this.emit("scroll",this.ydisp)},_.prototype.scrollDisp=function(t,e){t<0?this.userScrolling=!0:t+this.ydisp>=this.ybase&&(this.userScrolling=!1),this.ydisp+=t,this.ydisp>this.ybase?this.ydisp=this.ybase:this.ydisp<0&&(this.ydisp=0),e||this.emit("scroll",this.ydisp),this.refresh(0,this.rows-1)},_.prototype.scrollPages=function(t){this.scrollDisp(t*(this.rows-1))},_.prototype.scrollToTop=function(){this.scrollDisp(-this.ydisp)},_.prototype.scrollToBottom=function(){this.scrollDisp(this.ybase-this.ydisp)},_.prototype.write=function(t){if(this.writeBuffer.push(t),this.options.useFlowControl&&!this.xoffSentToCatchUp&&this.writeBuffer.length>=5&&(this.send(u.C0.DC3),this.xoffSentToCatchUp=!0),!this.writeInProgress&&this.writeBuffer.length>0){this.writeInProgress=!0;var e=this;setTimeout(function(){e.innerWrite()})}},_.prototype.innerWrite=function(){for(var t=this.writeBuffer.splice(0,300);t.length>0;){var e=t.shift();e.length;this.xoffSentToCatchUp&&0===t.length&&0===this.writeBuffer.length&&(this.send(u.C0.DC1),this.xoffSentToCatchUp=!1),this.refreshStart=this.y,this.refreshEnd=this.y,this.parser.parse(e),this.updateRange(this.y),this.refresh(this.refreshStart,this.refreshEnd)}if(this.writeBuffer.length>0){var n=this;setTimeout(function(){n.innerWrite()},0)}else this.writeInProgress=!1},_.prototype.writeln=function(t){this.write(t+"\r\n")},_.prototype.attachCustomKeydownHandler=function(t){this.customKeydownHandler=t},_.prototype.attachHypertextLinkHandler=function(t){if(!this.linkifier)throw new Error("Cannot attach a hypertext link handler before Terminal.open is called");this.linkifier.attachHypertextLinkHandler(t),this.refresh(0,this.rows-1)},_.prototype.registerLinkMatcher=function(t,e,n){if(this.linkifier){var r=this.linkifier.registerLinkMatcher(t,e,n);return this.refresh(0,this.rows-1),r}},_.prototype.deregisterLinkMatcher=function(t){this.linkifier&&this.linkifier.deregisterLinkMatcher(t)&&this.refresh(0,this.rows-1)},_.prototype.keyDown=function(t){if(this.customKeydownHandler&&!1===this.customKeydownHandler(t))return!1;if(!this.compositionHelper.keydown.bind(this.compositionHelper)(t))return this.ybase!==this.ydisp&&this.scrollToBottom(),!1;var e=this.evaluateKeyEscapeSequence(t);return e.key===u.C0.DC3?this.writeStopped=!0:e.key===u.C0.DC1&&(this.writeStopped=!1),e.scrollDisp?(this.scrollDisp(e.scrollDisp),this.cancel(t,!0)):!!M(this,t)||(e.cancel&&this.cancel(t,!0),!e.key||(this.emit("keydown",t),this.emit("key",e.key,t),this.showCursor(),this.handler(e.key),this.cancel(t,!0)))},_.prototype.evaluateKeyEscapeSequence=function(t){var e={cancel:!1,key:void 0,scrollDisp:void 0},n=t.shiftKey<<0|t.altKey<<1|t.ctrlKey<<2|t.metaKey<<3;switch(t.keyCode){case 8:if(t.shiftKey){e.key=u.C0.BS;break}e.key=u.C0.DEL;break;case 9:if(t.shiftKey){e.key=u.C0.ESC+"[Z";break}e.key=u.C0.HT,e.cancel=!0;break;case 13:e.key=u.C0.CR,e.cancel=!0;break;case 27:e.key=u.C0.ESC,e.cancel=!0;break;case 37:n?(e.key=u.C0.ESC+"[1;"+(n+1)+"D",e.key==u.C0.ESC+"[1;3D"&&(e.key=this.browser.isMac?u.C0.ESC+"b":u.C0.ESC+"[1;5D")):this.applicationCursor?e.key=u.C0.ESC+"OD":e.key=u.C0.ESC+"[D";break;case 39:n?(e.key=u.C0.ESC+"[1;"+(n+1)+"C",e.key==u.C0.ESC+"[1;3C"&&(e.key=this.browser.isMac?u.C0.ESC+"f":u.C0.ESC+"[1;5C")):this.applicationCursor?e.key=u.C0.ESC+"OC":e.key=u.C0.ESC+"[C";break;case 38:n?(e.key=u.C0.ESC+"[1;"+(n+1)+"A",e.key==u.C0.ESC+"[1;3A"&&(e.key=u.C0.ESC+"[1;5A")):this.applicationCursor?e.key=u.C0.ESC+"OA":e.key=u.C0.ESC+"[A";break;case 40:n?(e.key=u.C0.ESC+"[1;"+(n+1)+"B",e.key==u.C0.ESC+"[1;3B"&&(e.key=u.C0.ESC+"[1;5B")):this.applicationCursor?e.key=u.C0.ESC+"OB":e.key=u.C0.ESC+"[B";break;case 45:t.shiftKey||t.ctrlKey||(e.key=u.C0.ESC+"[2~");break;case 46:e.key=n?u.C0.ESC+"[3;"+(n+1)+"~":u.C0.ESC+"[3~";break;case 36:n?e.key=u.C0.ESC+"[1;"+(n+1)+"H":this.applicationCursor?e.key=u.C0.ESC+"OH":e.key=u.C0.ESC+"[H";break;case 35:n?e.key=u.C0.ESC+"[1;"+(n+1)+"F":this.applicationCursor?e.key=u.C0.ESC+"OF":e.key=u.C0.ESC+"[F";break;case 33:t.shiftKey?e.scrollDisp=-(this.rows-1):e.key=u.C0.ESC+"[5~";break;case 34:t.shiftKey?e.scrollDisp=this.rows-1:e.key=u.C0.ESC+"[6~";break;case 112:e.key=n?u.C0.ESC+"[1;"+(n+1)+"P":u.C0.ESC+"OP";break;case 113:e.key=n?u.C0.ESC+"[1;"+(n+1)+"Q":u.C0.ESC+"OQ";break;case 114:e.key=n?u.C0.ESC+"[1;"+(n+1)+"R":u.C0.ESC+"OR";break;case 115:e.key=n?u.C0.ESC+"[1;"+(n+1)+"S":u.C0.ESC+"OS";break;case 116:e.key=n?u.C0.ESC+"[15;"+(n+1)+"~":u.C0.ESC+"[15~";break;case 117:e.key=n?u.C0.ESC+"[17;"+(n+1)+"~":u.C0.ESC+"[17~";break;case 118:e.key=n?u.C0.ESC+"[18;"+(n+1)+"~":u.C0.ESC+"[18~";break;case 119:e.key=n?u.C0.ESC+"[19;"+(n+1)+"~":u.C0.ESC+"[19~";break;case 120:e.key=n?u.C0.ESC+"[20;"+(n+1)+"~":u.C0.ESC+"[20~";break;case 121:e.key=n?u.C0.ESC+"[21;"+(n+1)+"~":u.C0.ESC+"[21~";break;case 122:e.key=n?u.C0.ESC+"[23;"+(n+1)+"~":u.C0.ESC+"[23~";break;case 123:e.key=n?u.C0.ESC+"[24;"+(n+1)+"~":u.C0.ESC+"[24~";break;default:!t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?this.browser.isMac||!t.altKey||t.ctrlKey||t.metaKey||(t.keyCode>=65&&t.keyCode<=90?e.key=u.C0.ESC+String.fromCharCode(t.keyCode+32):192===t.keyCode?e.key=u.C0.ESC+"`":t.keyCode>=48&&t.keyCode<=57&&(e.key=u.C0.ESC+(t.keyCode-48))):t.keyCode>=65&&t.keyCode<=90?e.key=String.fromCharCode(t.keyCode-64):32===t.keyCode?e.key=String.fromCharCode(0):t.keyCode>=51&&t.keyCode<=55?e.key=String.fromCharCode(t.keyCode-51+27):56===t.keyCode?e.key=String.fromCharCode(127):219===t.keyCode?e.key=String.fromCharCode(27):220===t.keyCode?e.key=String.fromCharCode(28):221===t.keyCode&&(e.key=String.fromCharCode(29))}return e},_.prototype.setgLevel=function(t){this.glevel=t,this.charset=this.charsets[t]},_.prototype.setgCharset=function(t,e){this.charsets[t]=e,this.glevel===t&&(this.charset=e)},_.prototype.keyPress=function(t){var e;if(this.cancel(t),t.charCode)e=t.charCode;else if(null==t.which)e=t.keyCode;else{if(0===t.which||0===t.charCode)return!1;e=t.which}return!(!e||(t.altKey||t.ctrlKey||t.metaKey)&&!M(this,t))&&(e=String.fromCharCode(e),this.emit("keypress",e,t),this.emit("key",e,t),this.showCursor(),this.handler(e),!1)},_.prototype.send=function(t){var e=this;this.queue||setTimeout(function(){e.handler(e.queue),e.queue=""},1),this.queue+=t},_.prototype.bell=function(){if(this.visualBell){var t=this;this.element.style.borderColor="white",setTimeout(function(){t.element.style.borderColor=""},10),this.popOnBell&&this.focus()}},_.prototype.log=function(){if(this.debug&&this.context.console&&this.context.console.log){var t=Array.prototype.slice.call(arguments);this.context.console.log.apply(this.context.console,t)}},_.prototype.error=function(){if(this.debug&&this.context.console&&this.context.console.error){var t=Array.prototype.slice.call(arguments);this.context.console.error.apply(this.context.console,t)}},_.prototype.resize=function(t,e){var n,r,i,o,a;if(!isNaN(t)&&!isNaN(e)&&(t!==this.cols||e!==this.rows)){if(t<1&&(t=1),e<1&&(e=1),(i=this.cols)t;)this.lines.get(r).pop();if(this.cols=t,this.setupStops(this.cols),a=0,(i=this.rows)0&&this.lines.length<=this.ybase+this.y+a+1?(this.ybase--,a++,this.ydisp>0&&this.ydisp--):this.lines.push(this.blankLine())),this.children.lengthe;)if(this.lines.length>e+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++)),this.children.length>e){if(!(n=this.children.shift()))continue;n.parentNode.removeChild(n)}this.rows=e,this.y>=e&&(this.y=e-1),a&&(this.y+=a),this.x>=t&&(this.x=t-1),this.scrollTop=0,this.scrollBottom=e-1,this.charMeasure.measure(),this.refresh(0,this.rows-1),this.normal=null,this.geometry=[this.cols,this.rows],this.emit("resize",{terminal:this,cols:t,rows:e})}},_.prototype.updateRange=function(t){tthis.refreshEnd&&(this.refreshEnd=t)},_.prototype.maxRange=function(){this.refreshStart=0,this.refreshEnd=this.rows-1},_.prototype.setupStops=function(t){for(null!=t?this.tabs[t]||(t=this.prevStop(t)):(this.tabs={},t=0);t0;);return t>=this.cols?this.cols-1:t<0?0:t},_.prototype.nextStop=function(t){for(null==t&&(t=this.x);!this.tabs[++t]&&t=this.cols?this.cols-1:t<0?0:t},_.prototype.eraseRight=function(t,e){var n=this.lines.get(this.ybase+e);if(n){for(var r=[this.eraseAttr()," ",1];tthis.scrollBottom&&(this.y--,this.scroll()),this.x>=this.cols&&this.x--},_.prototype.reverseIndex=function(){this.y===this.scrollTop?(this.lines.shiftElements(this.y+this.ybase,this.rows-1,1),this.lines.set(this.y+this.ybase,this.blankLine(!0)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom)):this.y--},_.prototype.reset=function(){this.options.rows=this.rows,this.options.cols=this.cols;var t=this.customKeydownHandler;_.call(this,this.options),this.customKeydownHandler=t,this.refresh(0,this.rows-1),this.viewport.syncScrollArea()},_.prototype.tabSet=function(){this.tabs[this.x]=!0},_.prototype.matchColor=b,b._cache={},b.distance=function(t,e,n,r,i,o){return Math.pow(30*(t-r),2)+Math.pow(59*(e-i),2)+Math.pow(11*(n-o),2)},_.EventEmitter=i.EventEmitter,_.inherits=g,_.on=v,_.off=y,_.cancel=function(t,e){if(this.cancelEvents||e)return t.preventDefault(),t.stopPropagation(),!1},e.exports=_},{"./CompositionHelper":2,"./EscapeSequences":3,"./EventEmitter":4,"./InputHandler":5,"./Linkifier":6,"./Parser":7,"./Renderer":8,"./Viewport":9,"./handlers/Clipboard":10,"./utils/Browser":11,"./utils/CharMeasure":12,"./utils/CircularList":13}]},{},[15])(15)})},QLaP:function(t,e,n){"use strict";t.exports=function(t,e,n,r,i,o,a,s){if(!t){var u;if(void 0===e)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,i,o,a,s],c=0;(u=new Error(e.replace(/%s/g,function(){return l[c++]}))).name="Invariant Violation"}throw u.framesToPop=1,u}}},QMk7:function(t,e,n){"use strict";e.__esModule=!0;var r=s(n("sbe7")),i=(s(n("yRyW")),s(n("QLaP"))),o=s(n("sHu1")),a=n("GpkE");function s(t){return t&&t.__esModule?t:{default:t}}var u=r.default.PropTypes,l=u.string,c=u.object,d=r.default.createClass({displayName:"IndexRedirect",statics:{createRouteFromReactElement:function(t,e){e&&(e.indexRoute=o.default.createRouteFromReactElement(t))}},propTypes:{to:l.isRequired,query:c,state:c,onEnter:a.falsy,children:a.falsy},render:function(){(0,i.default)(!1)}});e.default=d,t.exports=e.default},QX43:function(t,e,n){"use strict";var r=n("xLLm"),i=n("qy1W"),o=n("qgc5"),a=n("2NuI"),s=r.canUseDOM?document.createElement("div"):null,u=/^\s*<(\w+)/;t.exports=function(t,e){var n=s;s||a(!1);var r=function(t){var e=t.match(u);return e&&e[1].toLowerCase()}(t),l=r&&o(r);if(l){n.innerHTML=l[1]+t+l[2];for(var c=l[0];c--;)n=n.lastChild}else n.innerHTML=t;var d=n.getElementsByTagName("script");d.length&&(e||a(!1),i(d).forEach(e));for(var h=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return h}},QgBv:function(t,e,n){"use strict";var r=n("MgzW"),i=n("4RLn"),o=n("OUwc"),a=n("z0le"),s=n("4Ssj"),u=(n("rqkW"),n("DdJX")),l=n("88lf"),c=[{initialize:s.getSelectionInformation,close:s.restoreSelection},{initialize:function(){var t=a.isEnabled();return a.setEnabled(!1),t},close:function(t){a.setEnabled(t)}},{initialize:function(){this.reactMountReady.reset()},close:function(){this.reactMountReady.notifyAll()}}];function d(t){this.reinitializeTransaction(),this.renderToStaticMarkup=!1,this.reactMountReady=i.getPooled(null),this.useCreateElement=t}var h={getTransactionWrappers:function(){return c},getReactMountReady:function(){return this.reactMountReady},getUpdateQueue:function(){return l},checkpoint:function(){return this.reactMountReady.checkpoint()},rollback:function(t){this.reactMountReady.rollback(t)},destructor:function(){i.release(this.reactMountReady),this.reactMountReady=null}};r(d.prototype,u.Mixin,h),o.addPoolingTo(d),t.exports=d},Qj4J:function(t,e,n){!function(t){"use strict";t.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n("wd/R"))},Qqih:function(t,e,n){"use strict";e.__esModule=!0;var r=n("sbe7");e.default=r.PropTypes.shape({dispatch:r.PropTypes.func.isRequired,evaluate:r.PropTypes.func.isRequired,evaluateToJS:r.PropTypes.func.isRequired,observe:r.PropTypes.func.isRequired}),t.exports=e.default},R8ie:function(t,e,n){"use strict";var r=n("xLLm"),i=n("HVDA"),o=n("5ddN");function a(t,e,n,r){return t===n&&e===r}var s=r.canUseDOM&&"selection"in document&&!("getSelection"in window),u={getOffsets:s?function(t){var e=document.selection.createRange(),n=e.text.length,r=e.duplicate();r.moveToElementText(t),r.setEndPoint("EndToStart",e);var i=r.text.length;return{start:i,end:i+n}}:function(t){var e=window.getSelection&&window.getSelection();if(!e||0===e.rangeCount)return null;var n=e.anchorNode,r=e.anchorOffset,i=e.focusNode,o=e.focusOffset,s=e.getRangeAt(0);try{s.startContainer.nodeType,s.endContainer.nodeType}catch(t){return null}var u=a(e.anchorNode,e.anchorOffset,e.focusNode,e.focusOffset)?0:s.toString().length,l=s.cloneRange();l.selectNodeContents(t),l.setEnd(s.startContainer,s.startOffset);var c=a(l.startContainer,l.startOffset,l.endContainer,l.endOffset)?0:l.toString().length,d=c+u,h=document.createRange();h.setStart(n,r),h.setEnd(i,o);var f=h.collapsed;return{start:f?d:c,end:f?c:d}},setOffsets:s?function(t,e){var n,r,i=document.selection.createRange().duplicate();void 0===e.end?r=n=e.start:e.start>e.end?(n=e.end,r=e.start):(n=e.start,r=e.end),i.moveToElementText(t),i.moveStart("character",n),i.setEndPoint("EndToStart",i),i.moveEnd("character",r-n),i.select()}:function(t,e){if(window.getSelection){var n=window.getSelection(),r=t[o()].length,a=Math.min(e.start,r),s=void 0===e.end?a:Math.min(e.end,r);if(!n.extend&&a>s){var u=s;s=a,a=u}var l=i(t,a),c=i(t,s);if(l&&c){var d=document.createRange();d.setStart(l.node,l.offset),n.removeAllRanges(),a>s?(n.addRange(d),n.extend(c.node,c.offset)):(d.setEnd(c.node,c.offset),n.addRange(d))}}}};t.exports=u},RAwQ:function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?i[n][0]:i[n][1]}function n(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10,r=t/10;return n(0===e?r:e)}if(t<1e4){for(;t>=10;)t/=10;return n(t)}return n(t/=1e3)}t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(t){return n(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t},past:function(t){return n(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t},s:"e puer Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n("wd/R"))},RF01:function(t,e,n){"use strict";e.__esModule=!0;var r=o(n("gDiQ")),i=o(n("ar35"));function o(t){return t&&t.__esModule?t:{default:t}}e.default=(0,i.default)(r.default),t.exports=e.default},Rc3x:function(t,e,n){"use strict";var r=n("YuV3"),i=n("YOAC"),o=n("6vZf"),a=n("y6YS"),s=n("rTRO"),u=(n("2mcs"),r.PropagationPhases),l=i.getListener;function c(t,e,n){var r=function(t,e,n){var r=e.dispatchConfig.phasedRegistrationNames[n];return l(t,r)}(t,n,e?u.bubbled:u.captured);r&&(n._dispatchListeners=a(n._dispatchListeners,r),n._dispatchInstances=a(n._dispatchInstances,t))}function d(t){t&&t.dispatchConfig.phasedRegistrationNames&&o.traverseTwoPhase(t._targetInst,c,t)}function h(t){if(t&&t.dispatchConfig.phasedRegistrationNames){var e=t._targetInst,n=e?o.getParentInstance(e):null;o.traverseTwoPhase(n,c,t)}}function f(t,e,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,i=l(t,r);i&&(n._dispatchListeners=a(n._dispatchListeners,i),n._dispatchInstances=a(n._dispatchInstances,t))}}function p(t){t&&t.dispatchConfig.registrationName&&f(t._targetInst,0,t)}var m={accumulateTwoPhaseDispatches:function(t){s(t,d)},accumulateTwoPhaseDispatchesSkipTarget:function(t){s(t,h)},accumulateDirectDispatches:function(t){s(t,p)},accumulateEnterLeaveDispatches:function(t,e,n,r){o.traverseEnterLeave(n,r,f,t,e)}};t.exports=m},Rh62:function(t,e,n){"use strict";var r=n("4ezM"),i=(n("2mcs"),r.isUnitlessNumber);t.exports=function(t,e,n){return null==e||"boolean"==typeof e||""===e?"":isNaN(e)||0===e||i.hasOwnProperty(t)&&i[t]?""+e:("string"==typeof e&&(e=e.trim()),e+"px")}},RsHC:function(t,e,n){"use strict";t.exports=function(t){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,n,r,i){MSApp.execUnsafeLocalFunction(function(){return t(e,n,r,i)})}:t}},RttE:function(t,e,n){"use strict";var r=n("1IEh"),i=n("qtIE"),o=e.toInt=function(t){return parseInt(t,10)||0},a=e.clone=function(t){if(t){if(t.constructor===Array)return t.map(a);if("object"==typeof t){var e={};for(var n in t)e[n]=a(t[n]);return e}return t}return null};e.extend=function(t,e){var n=a(t);for(var r in e)n[r]=a(e[r]);return n},e.isEditable=function(t){return i.matches(t,"input,[contenteditable]")||i.matches(t,"select,[contenteditable]")||i.matches(t,"textarea,[contenteditable]")||i.matches(t,"button,[contenteditable]")},e.removePsClasses=function(t){for(var e=r.list(t),n=0;n-1||r("96",t),!l.plugins[n]){e.extractEvents||r("97",t),l.plugins[n]=e;var a=e.eventTypes;for(var u in a)s(a[u],e,u)||r("98",u,t)}}}function s(t,e,n){l.eventNameDispatchConfigs.hasOwnProperty(n)&&r("99",n),l.eventNameDispatchConfigs[n]=t;var i=t.phasedRegistrationNames;if(i){for(var o in i){if(i.hasOwnProperty(o))u(i[o],e,n)}return!0}return!!t.registrationName&&(u(t.registrationName,e,n),!0)}function u(t,e,n){l.registrationNameModules[t]&&r("100",t),l.registrationNameModules[t]=e,l.registrationNameDependencies[t]=e.eventTypes[n].dependencies}var l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(t){i&&r("101"),i=Array.prototype.slice.call(t),a()},injectEventPluginsByName:function(t){var e=!1;for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];o.hasOwnProperty(n)&&o[n]===i||(o[n]&&r("102",n),o[n]=i,e=!0)}e&&a()},getPluginModuleForEvent:function(t){var e=t.dispatchConfig;if(e.registrationName)return l.registrationNameModules[e.registrationName]||null;for(var n in e.phasedRegistrationNames)if(e.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[e.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){for(var t in i=null,o)o.hasOwnProperty(t)&&delete o[t];l.plugins.length=0;var e=l.eventNameDispatchConfigs;for(var n in e)e.hasOwnProperty(n)&&delete e[n];var r=l.registrationNameModules;for(var a in r)r.hasOwnProperty(a)&&delete r[a]}};t.exports=l},S6ln:function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}t.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n("wd/R"))},SA7x:function(t,e,n){"use strict";var r=n("7+8C");function i(t,e,n,i){return r.call(this,t,e,n,i)}r.augmentClass(i,{relatedTarget:null}),t.exports=i},SFxW:function(t,e,n){!function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(t){return/^(gündüz|axşam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gecə":t<12?"səhər":t<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(t){if(0===t)return t+"-ıncı";var n=t%10,r=t%100-n,i=t>=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}})}(n("wd/R"))},SQ0G:function(t,e,n){"use strict";var r=n("94Z+");t.exports=function(t){return r(t)&&3==t.nodeType}},SWRL:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e4&&void 0!==arguments[4]?arguments[4]:[],s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:[];void 0===i&&("/"!==e.pathname.charAt(0)&&(e=r({},e,{pathname:"/"+e.pathname})),i=e.pathname),(0,o.loopAsync)(t.length,function(n,r,o){d(t[n],e,i,a,s,function(t,e){t||e?o(t,e):r()})},n)}t.exports=e.default},SatO:function(t,e,n){!function(t){"use strict";t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n("wd/R"))},Se41:function(t,e,n){"use strict";t.exports=n("5AAG")},SgGt:function(t,e,n){"use strict";var r=n("iubj")({INSERT_MARKUP:null,MOVE_EXISTING:null,REMOVE_NODE:null,SET_MARKUP:null,TEXT_CONTENT:null});t.exports=r},T0Rg:function(t,e,n){"use strict";var r=n("Hpnx"),i=(n("Mlyf"),n("Tb/Z")),o=n("ZCYj"),a=(n("2NuI"),n("YeCh")),s=(n("2mcs"),"."),u=":";function l(t,e){return t&&"object"==typeof t&&null!=t.key?a.escape(t.key):e.toString(36)}t.exports=function(t,e,n){return null==t?0:function t(e,n,c,d){var h,f=typeof e;if("undefined"!==f&&"boolean"!==f||(e=null),null===e||"string"===f||"number"===f||i.isValidElement(e))return c(d,e,""===n?s+l(e,0):n),1;var p=0,m=""===n?s:n+u;if(Array.isArray(e))for(var _=0;_0&&void 0!==arguments[0]?arguments[0]:{},n=e.hideSiblingNodes,r=void 0===n||n,i=e.handleContainerOverflow,o=void 0===i||i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.hideSiblingNodes=r,this.handleContainerOverflow=o,this.modals=[],this.containers=[],this.data=[]}return r(t,[{key:"add",value:function(t,e,n){var r=this.modals.indexOf(t),l=this.containers.indexOf(e);if(-1!==r)return r;if(r=this.modals.length,this.modals.push(t),this.hideSiblingNodes&&(0,u.hideSiblings)(e,t.mountNode),-1!==l)return this.data[l].modals.push(t),r;var c={modals:[t],classes:n?n.split(/\s+/):[],overflowing:(0,s.default)(e)};return this.handleContainerOverflow&&function(t,e){var n={overflow:"hidden"};t.style={overflow:e.style.overflow,paddingRight:e.style.paddingRight},t.overflowing&&(n.paddingRight=parseInt((0,i.default)(e,"paddingRight")||0,10)+(0,a.default)()+"px"),(0,i.default)(e,n)}(c,e),c.classes.forEach(o.default.addClass.bind(null,e)),this.containers.push(e),this.data.push(c),r}},{key:"remove",value:function(t){var e=this.modals.indexOf(t);if(-1!==e){var n=function(t,e){return function(t,e){var n=-1;return t.some(function(t,r){if(e(t,r))return n=r,!0}),n}(t,function(t){return-1!==t.modals.indexOf(e)})}(this.data,t),r=this.data[n],i=this.containers[n];r.modals.splice(r.modals.indexOf(t),1),this.modals.splice(e,1),0===r.modals.length?(r.classes.forEach(o.default.removeClass.bind(null,i)),this.handleContainerOverflow&&function(t,e){var n=t.style;Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}(r,i),this.hideSiblingNodes&&(0,u.showSiblings)(i,t.mountNode),this.containers.splice(n,1),this.data.splice(n,1)):this.hideSiblingNodes&&(0,u.ariaHidden)(!1,r.modals[r.modals.length-1].mountNode)}}},{key:"isTopModal",value:function(t){return!!this.modals.length&&this.modals[this.modals.length-1]===t}}]),t}();e.default=c,t.exports=e.default},T9VG:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,n,o){return(0,r.default)(t,e,n,o),{remove:function(){(0,i.default)(t,e,n,o)}}};var r=o(n("raBC")),i=o(n("c0Fl"));function o(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},TNOg:function(t,e,n){"use strict";e.__esModule=!0;var r=Object.assign||function(t){for(var e=1;e1){for(var p=Array(f),m=0;m1){for(var v=Array(_),y=0;y<_;y++)v[y]=arguments[y+2];h.children=v}return c(t.type,f,p,0,0,m,h)},c.isValidElement=function(t){return"object"==typeof t&&null!==t&&t.$$typeof===a},c.REACT_ELEMENT_TYPE=a,t.exports=c},TglN:function(t,e,n){"use strict";var r=n("4BeY"),i=n.n(r),o=n("IaFt"),a=n.n(o),s=new i.a({id:"grv-tlpt-logo-full",use:"grv-tlpt-logo-full-usage",viewBox:"0 0 340 100",content:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'});a.a.add(s);e.a=s},TyYH:function(t,e,n){"use strict";n("2mcs");var r={isMounted:function(t){return!1},enqueueCallback:function(t,e){},enqueueForceUpdate:function(t){},enqueueReplaceState:function(t,e){},enqueueSetState:function(t,e){}};t.exports=r},UAY6:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return(0,i.default)(r.default.findDOMNode(t))};var r=o(n("i8i4")),i=o(n("0Ttc"));function o(t){return t&&t.__esModule?t:{default:t}}t.exports=e.default},UDhR:function(t,e,n){!function(t){"use strict";t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n("wd/R"))},UIfy:function(t,e,n){"use strict";e.__esModule=!0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},i=a(n("sbe7")),o=a(n("PZZ8"));function a(t){return t&&t.__esModule?t:{default:t}}e.default=(0,o.default)(function(t,e,n,o,a){var s=t[e],u=void 0===s?"undefined":r(s);return i.default.isValidElement(s)?new Error("Invalid "+o+" `"+a+"` of type ReactElement supplied to `"+n+"`, expected an element type (a string or a ReactClass)."):"function"!==u&&"string"!==u?new Error("Invalid "+o+" `"+a+"` of value `"+s+"` supplied to `"+n+"`, expected an element type (a string or a ReactClass)."):null})},UpQW:function(t,e,n){!function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n("wd/R"))},Ur1D:function(t,e,n){!function(t){"use strict";t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n("wd/R"))},V2x9:function(t,e,n){!function(t){"use strict";t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n("wd/R"))},V84M:function(t,e,n){"use strict";var r=n("n6KM"),i=n("DwY2"),o=n("O+UP");t.exports={initialize:i,update:o,destroy:r}},VOcB:function(t,e,n){"use strict";function r(t,e){return t.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}t.exports=function(t,e){t.classList?t.classList.remove(e):"string"==typeof t.className?t.className=r(t.className,e):t.setAttribute("class",r(t.className&&t.className.baseVal||"",e))}},"VSY+":function(t,e){ -/*! - * Bootstrap v3.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;t(this).one("bsTransitionEnd",function(){n=!0});return setTimeout(function(){n||t(r).trigger(t.support.transition.end)},e),this},t(function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',n=function(n){t(n).on("click",e,this.close)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.close=function(e){var r=t(this),i=r.attr("data-target");i||(i=(i=r.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),i="#"===i?[]:i;var o=t(document).find(i);function a(){o.detach().trigger("closed.bs.alert").remove()}e&&e.preventDefault(),o.length||(o=r.closest(".alert")),o.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",a).emulateTransitionEnd(n.TRANSITION_DURATION):a())};var r=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var r=t(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),"string"==typeof e&&i[e].call(r)})},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on("click.bs.alert.data-api",e,n.prototype.close)}(jQuery),function(t){"use strict";var e=function(n,r){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,r),this.isLoading=!1};function n(n){return this.each(function(){var r=t(this),i=r.data("bs.button"),o="object"==typeof n&&n;i||r.data("bs.button",i=new e(this,o)),"toggle"==n?i.toggle():n&&i.setState(n)})}e.VERSION="3.4.1",e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var n="disabled",r=this.$element,i=r.is("input")?"val":"html",o=r.data();e+="Text",null==o.resetText&&r.data("resetText",r[i]()),setTimeout(t.proxy(function(){r[i](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),t&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var r=t.fn.button;t.fn.button=n,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=r,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(e){var r=t(e.target).closest(".btn");n.call(r,"toggle"),t(e.target).is('input[type="radio"], input[type="checkbox"]')||(e.preventDefault(),r.is("input,button")?r.trigger("focus"):r.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";var e=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};function n(n){return this.each(function(){var r=t(this),i=r.data("bs.carousel"),o=t.extend({},e.DEFAULTS,r.data(),"object"==typeof n&&n),a="string"==typeof n?n:o.slide;i||r.data("bs.carousel",i=new e(this,o)),"number"==typeof n?i.to(n):a?i[a]():o.interval&&i.pause().cycle()})}e.VERSION="3.4.1",e.TRANSITION_DURATION=600,e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},e.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},e.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if(("prev"==t&&0===n||"next"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var r=(n+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(r)},e.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",this.$items.eq(t))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide("next")},e.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},e.prototype.slide=function(n,r){var i=this.$element.find(".item.active"),o=r||this.getItemForDirection(n,i),a=this.interval,s="next"==n?"left":"right",u=this;if(o.hasClass("active"))return this.sliding=!1;var l=o[0],c=t.Event("slide.bs.carousel",{relatedTarget:l,direction:s});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=t(this.$indicators.children()[this.getItemIndex(o)]);d&&d.addClass("active")}var h=t.Event("slid.bs.carousel",{relatedTarget:l,direction:s});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(n),"object"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one("bsTransitionEnd",function(){o.removeClass([n,s].join(" ")).addClass("active"),i.removeClass(["active",s].join(" ")),u.sliding=!1,setTimeout(function(){u.$element.trigger(h)},0)}).emulateTransitionEnd(e.TRANSITION_DURATION)):(i.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(h)),a&&this.cycle(),this}};var r=t.fn.carousel;t.fn.carousel=n,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=r,this};var i=function(e){var r=t(this),i=r.attr("href");i&&(i=i.replace(/.*(?=#[^\s]+$)/,""));var o=r.attr("data-target")||i,a=t(document).find(o);if(a.hasClass("carousel")){var s=t.extend({},a.data(),r.data()),u=r.attr("data-slide-to");u&&(s.interval=!1),n.call(a,s),u&&a.data("bs.carousel").to(u),e.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",i).on("click.bs.carousel.data-api","[data-slide-to]",i),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),function(t){"use strict";var e=function(n,r){this.$element=t(n),this.options=t.extend({},e.DEFAULTS,r),this.$trigger=t('[data-toggle="collapse"][href="#'+n.id+'"],[data-toggle="collapse"][data-target="#'+n.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(e){var n,r=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(r)}function r(n){return this.each(function(){var r=t(this),i=r.data("bs.collapse"),o=t.extend({},e.DEFAULTS,r.data(),"object"==typeof n&&n);!i&&o.toggle&&/show|hide/.test(n)&&(o.toggle=!1),i||r.data("bs.collapse",i=new e(this,o)),"string"==typeof n&&i[n]()})}e.VERSION="3.4.1",e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var n,i=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(i&&i.length&&(n=i.data("bs.collapse"))&&n.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){i&&i.length&&(r.call(i,"hide"),n||i.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return s.call(this);var u=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(e.TRANSITION_DURATION)[a](this.$element[0][u])}}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var n=t.Event("hide.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){var r=this.dimension();this.$element[r](this.$element[r]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return i.call(this);this.$element[r](0).one("bsTransitionEnd",t.proxy(i,this)).emulateTransitionEnd(e.TRANSITION_DURATION)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},e.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(e,r){var i=t(r);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},e.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var i=t.fn.collapse;t.fn.collapse=r,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(e){var i=t(this);i.attr("data-target")||e.preventDefault();var o=n(i),a=o.data("bs.collapse")?"toggle":i.data();r.call(o,a)})}(jQuery),function(t){"use strict";var e=".dropdown-backdrop",n='[data-toggle="dropdown"]',r=function(e){t(e).on("click.bs.dropdown",this.toggle)};function i(e){var n=e.attr("data-target");n||(n=(n=e.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r="#"!==n?t(document).find(n):null;return r&&r.length?r:e.parent()}function o(r){r&&3===r.which||(t(e).remove(),t(n).each(function(){var e=t(this),n=i(e),o={relatedTarget:this};n.hasClass("open")&&(r&&"click"==r.type&&/input|textarea/i.test(r.target.tagName)&&t.contains(n[0],r.target)||(n.trigger(r=t.Event("hide.bs.dropdown",o)),r.isDefaultPrevented()||(e.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}r.VERSION="3.4.1",r.prototype.toggle=function(e){var n=t(this);if(!n.is(".disabled, :disabled")){var r=i(n),a=r.hasClass("open");if(o(),!a){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",o);var s={relatedTarget:this};if(r.trigger(e=t.Event("show.bs.dropdown",s)),e.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger(t.Event("shown.bs.dropdown",s))}return!1}},r.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var r=t(this);if(e.preventDefault(),e.stopPropagation(),!r.is(".disabled, :disabled")){var o=i(r),a=o.hasClass("open");if(!a&&27!=e.which||a&&27==e.which)return 27==e.which&&o.find(n).trigger("focus"),r.trigger("click");var s=o.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var u=s.index(e.target);38==e.which&&u>0&&u--,40==e.which&&udocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},e.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},e.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:r},u.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var i=this.options.trigger.split(" "),o=i.length;o--;){var a=i[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",u="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(u+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},u.prototype.getDefaults=function(){return u.DEFAULTS},u.prototype.getOptions=function(n){var r=this.$element.data();for(var i in r)r.hasOwnProperty(i)&&-1!==t.inArray(i,e)&&delete r[i];return(n=t.extend({},this.getDefaults(),r,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=s(n.template,n.whiteList,n.sanitizeFn)),n},u.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,r){n[t]!=r&&(e[t]=r)}),e},u.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)}},u.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},u.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)}},u.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var r=this,i=this.tip(),o=this.getUID(this.type);this.setContent(),i.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&i.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement,s=/\s?auto?\s?/i,l=s.test(a);l&&(a=a.replace(s,"")||"top"),i.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?i.appendTo(t(document).find(this.options.container)):i.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),d=i[0].offsetWidth,h=i[0].offsetHeight;if(l){var f=a,p=this.getPosition(this.$viewport);a="bottom"==a&&c.bottom+h>p.bottom?"top":"top"==a&&c.top-hp.width?"left":"left"==a&&c.left-da.top+a.height&&(i.top=a.top+a.height-u)}else{var l=e.left-o,c=e.left+o+n;la.right&&(i.left=a.left+a.width-c)}return i},u.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},u.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},u.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},u.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},u.prototype.enable=function(){this.enabled=!0},u.prototype.disable=function(){this.enabled=!1},u.prototype.toggleEnabled=function(){this.enabled=!this.enabled},u.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data("bs."+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},u.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},u.prototype.sanitizeHtml=function(t){return s(t,this.options.whiteList,this.options.sanitizeFn)};var l=t.fn.tooltip;t.fn.tooltip=function(e){return this.each(function(){var n=t(this),r=n.data("bs.tooltip"),i="object"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||n.data("bs.tooltip",r=new u(this,i)),"string"==typeof e&&r[e]())})},t.fn.tooltip.Constructor=u,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=l,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.4.1",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();if(this.options.html){var r=typeof n;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===r&&(n=this.sanitizeHtml(n))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===r?"html":"append"](n)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(n);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=t.fn.popover;t.fn.popover=function(n){return this.each(function(){var r=t(this),i=r.data("bs.popover"),o="object"==typeof n&&n;!i&&/destroy|hide/.test(n)||(i||r.data("bs.popover",i=new e(this,o)),"string"==typeof n&&i[n]())})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=n,this}}(jQuery),function(t){"use strict";function e(n,r){this.$body=t(document.body),this.$scrollElement=t(n).is(document.body)?t(window):t(n),this.options=t.extend({},e.DEFAULTS,r),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var r=t(this),i=r.data("bs.scrollspy"),o="object"==typeof n&&n;i||r.data("bs.scrollspy",i=new e(this,o)),"string"==typeof n&&i[n]()})}e.VERSION="3.4.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n="offset",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n="position",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),i=e.data("target")||e.attr("href"),o=/^#./.test(i)&&t(i);return o&&o.length&&o.is(":visible")&&[[o[n]().top+r,i]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),i=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=r)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e=i[t]&&(void 0===i[t+1]||e .active"),a=i&&t.support.transition&&(o.length&&o.hasClass("fade")||!!r.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),n.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(n[0].offsetWidth,n.addClass("in")):n.removeClass("fade"),n.parent(".dropdown-menu").length&&n.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&a?o.one("bsTransitionEnd",s).emulateTransitionEnd(e.TRANSITION_DURATION):s(),o.removeClass("in")};var r=t.fn.tab;t.fn.tab=n,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(e){e.preventDefault(),n.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(t){"use strict";var e=function(n,r){this.options=t.extend({},e.DEFAULTS,r);var i=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each(function(){var r=t(this),i=r.data("bs.affix"),o="object"==typeof n&&n;i||r.data("bs.affix",i=new e(this,o)),"string"==typeof n&&i[n]()})}e.VERSION="3.4.1",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return i=t-r&&"bottom"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var n=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof r&&(o=i=r),"function"==typeof i&&(i=r.top(this.$element)),"function"==typeof o&&(o=r.bottom(this.$element));var s=this.getState(a,n,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var u="affix"+(s?"-"+s:""),l=t.Event(u+".bs.affix");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(u).trigger(u.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-n-o})}};var r=t.fn.affix;t.fn.affix=n,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var e=t(this),r=e.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),n.call(e,r)})})}(jQuery)},Vclq:function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");t.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"MM/DD/YYYY",LL:"MMMM [de] D [de] YYYY",LLL:"MMMM [de] D [de] YYYY H:mm",LLLL:"dddd, MMMM [de] D [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n("wd/R"))},Vljt:function(t,e,n){"use strict";var r=n("Hpnx"),i=n("Tb/Z");n("2NuI");t.exports=function(t){return i.isValidElement(t)||r("143"),t}},"W+Et":function(t,e,n){"use strict";var r=n("MgzW"),i=n("W3G3"),o=n("xLLm"),a=n("OUwc"),s=n("Ohsa"),u=n("bUsS"),l=n("ehmr"),c=n("MxAa");function d(t){for(;t._hostParent;)t=t._hostParent;var e=s.getNodeFromInstance(t).parentNode;return s.getClosestInstanceFromNode(e)}function h(t,e){this.topLevelType=t,this.nativeEvent=e,this.ancestors=[]}function f(t){var e=l(t.nativeEvent),n=s.getClosestInstanceFromNode(e),r=n;do{t.ancestors.push(r),r=r&&d(r)}while(r);for(var i=0;i=0||null!=e.is}var Q=1;function Z(t){var e=t.type;!function(t){G.call(J,t)||($.test(t)||r("65",t),J[t]=!0)}(e),this._currentElement=t,this._tag=e.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}Z.displayName="ReactDOMComponent",Z.Mixin={mountComponent:function(t,e,n,r){this._rootNodeID=Q++,this._domID=n._idCounter++,this._hostParent=e,this._hostContainerInfo=n;var i,a,l,d=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},t.getReactMountReady().enqueue(F,this);break;case"button":d=m.getHostProps(this,d,e);break;case"input":y.mountWrapper(this,d,e),d=y.getHostProps(this,d),t.getReactMountReady().enqueue(F,this);break;case"option":g.mountWrapper(this,d,e),d=g.getHostProps(this,d);break;case"select":M.mountWrapper(this,d,e),d=M.getHostProps(this,d),t.getReactMountReady().enqueue(F,this);break;case"textarea":b.mountWrapper(this,d,e),d=b.getHostProps(this,d),t.getReactMountReady().enqueue(F,this)}if(I(this,d),null!=e?(i=e._namespaceURI,a=e._tag):n._tag&&(i=n._namespaceURI,a=n._tag),(null==i||i===u.svg&&"foreignobject"===a)&&(i=u.html),i===u.html&&("svg"===this._tag?i=u.svg:"math"===this._tag&&(i=u.mathml)),this._namespaceURI=i,t.useCreateElement){var h,f=n._ownerDocument;if(i===u.html)if("script"===this._tag){var p=f.createElement("div"),_=this._currentElement.type;p.innerHTML="<"+_+">",h=p.removeChild(p.firstChild)}else h=d.is?f.createElement(this._currentElement.type,d.is):f.createElement(this._currentElement.type);else h=f.createElementNS(i,this._currentElement.type);v.precacheNode(this,h),this._flags|=D.hasCachedChildNodes,this._hostParent||c.setAttributeForRoot(h),this._updateDOMProperties(null,d,t);var w=s(h);this._createInitialChildren(t,d,r,w),l=w}else{var L=this._createOpenTagMarkupAndPutListeners(t,d),k=this._createContentMarkup(t,d,r);l=!k&&B[this._tag]?L+"/>":L+">"+k+""}switch(this._tag){case"input":t.getReactMountReady().enqueue(N,this),d.autoFocus&&t.getReactMountReady().enqueue(o.focusDOMComponent,this);break;case"textarea":t.getReactMountReady().enqueue(W,this),d.autoFocus&&t.getReactMountReady().enqueue(o.focusDOMComponent,this);break;case"select":case"button":d.autoFocus&&t.getReactMountReady().enqueue(o.focusDOMComponent,this);break;case"option":t.getReactMountReady().enqueue(U,this)}return l},_createOpenTagMarkupAndPutListeners:function(t,e){var n="<"+this._currentElement.type;for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];if(null!=o)if(E.hasOwnProperty(r))o&&j(this,r,o,t);else{r===O&&(o&&(o=this._previousStyleCopy=i({},e.style)),o=a.createMarkupForStyles(o,this));var s=null;null!=this._tag&&X(this._tag,e)?A.hasOwnProperty(r)||(s=c.createMarkupForCustomAttribute(r,o)):s=c.createMarkupForProperty(r,o),s&&(n+=" "+s)}}return t.renderToStaticMarkup?n:(this._hostParent||(n+=" "+c.createMarkupForRoot()),n+=" "+c.createMarkupForID(this._domID))},_createContentMarkup:function(t,e,n){var r="",i=e.dangerouslySetInnerHTML;if(null!=i)null!=i.__html&&(r=i.__html);else{var o=C[typeof e.children]?e.children:null,a=null!=o?null:e.children;if(null!=o)r=k(o);else if(null!=a){r=this.mountChildren(a,t,n).join("")}}return V[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(t,e,n,r){var i=e.dangerouslySetInnerHTML;if(null!=i)null!=i.__html&&s.queueHTML(r,i.__html);else{var o=C[typeof e.children]?e.children:null,a=null!=o?null:e.children;if(null!=o)s.queueText(r,o);else if(null!=a)for(var u=this.mountChildren(a,t,n),l=0;l0&&e-1 in t))}v.fn=v.prototype={jquery:_,constructor:v,selector:"",length:0,toArray:function(){return s.call(this)},get:function(t){return null!=t?0>t?this[t+this.length]:this[t]:s.call(this)},pushStack:function(t){var e=v.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return v.each(this,t,e)},map:function(t){return this.pushStack(v.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(0>t?e:0);return this.pushStack(n>=0&&e>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:l,sort:a.sort,splice:a.splice},v.extend=v.fn.extend=function(){var t,e,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v.isFunction(a)||(a={}),s===u&&(a=this,s--);u>s;s++)if(null!=(t=arguments[s]))for(e in t)n=a[e],a!==(r=t[e])&&(l&&r&&(v.isPlainObject(r)||(i=v.isArray(r)))?(i?(i=!1,o=n&&v.isArray(n)?n:[]):o=n&&v.isPlainObject(n)?n:{},a[e]=v.extend(l,o,r)):void 0!==r&&(a[e]=r));return a},v.extend({expando:"jQuery"+(_+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===v.type(t)},isArray:Array.isArray,isWindow:function(t){return null!=t&&t===t.window},isNumeric:function(t){return!v.isArray(t)&&t-parseFloat(t)>=0},isPlainObject:function(t){return"object"===v.type(t)&&!t.nodeType&&!v.isWindow(t)&&!(t.constructor&&!f.call(t.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?d[h.call(t)]||"object":typeof t},globalEval:function(t){var e,n=eval;(t=v.trim(t))&&(1===t.indexOf("use strict")?((e=m.createElement("script")).text=t,m.head.appendChild(e).parentNode.removeChild(e)):n(t))},camelCase:function(t){return t.replace(g,"ms-").replace(M,b)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,n){var r=0,i=t.length,o=w(t);if(n){if(o)for(;i>r&&!1!==e.apply(t[r],n);r++);else for(r in t)if(!1===e.apply(t[r],n))break}else if(o)for(;i>r&&!1!==e.call(t[r],r,t[r]);r++);else for(r in t)if(!1===e.call(t[r],r,t[r]))break;return t},trim:function(t){return null==t?"":(t+"").replace(y,"")},makeArray:function(t,e){var n=e||[];return null!=t&&(w(Object(t))?v.merge(n,"string"==typeof t?[t]:t):l.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:c.call(e,t,n)},merge:function(t,e){for(var n=+e.length,r=0,i=t.length;n>r;r++)t[i++]=e[r];return t.length=i,t},grep:function(t,e,n){for(var r=[],i=0,o=t.length,a=!n;o>i;i++)!e(t[i],i)!==a&&r.push(t[i]);return r},map:function(t,e,n){var r,i=0,o=t.length,a=[];if(w(t))for(;o>i;i++)null!=(r=e(t[i],i,n))&&a.push(r);else for(i in t)null!=(r=e(t[i],i,n))&&a.push(r);return u.apply([],a)},guid:1,proxy:function(t,e){var n,r,i;return"string"==typeof e&&(n=t[e],e=t,t=n),v.isFunction(t)?(r=s.call(arguments,2),(i=function(){return t.apply(e||this,r.concat(s.call(arguments)))}).guid=t.guid=t.guid||v.guid++,i):void 0},now:Date.now,support:p}),v.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){d["[object "+e+"]"]=e.toLowerCase()});var L=function(t){var e,n,r,i,o,a,s,u,l,c,d,h,f,p,m,_,v,y,g,M="sizzle"+-new Date,b=t.document,w=0,L=0,k=ot(),T=ot(),D=ot(),S=function(t,e){return t===e&&(d=!0),0},x="undefined",Y=1<<31,E={}.hasOwnProperty,C=[],O=C.pop,P=C.push,A=C.push,R=C.slice,I=C.indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(this[e]===t)return e;return-1},j="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",H="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=N.replace("w","w#"),U="\\["+H+"*("+N+")(?:"+H+"*([*^$|!~]?=)"+H+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+W+"))|)"+H+"*\\]",z=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+U+")*)|.*)\\)|)",F=new RegExp("^"+H+"+|((?:^|[^\\\\])(?:\\\\.)*)"+H+"+$","g"),q=new RegExp("^"+H+"*,"+H+"*"),B=new RegExp("^"+H+"*([>+~]|"+H+")"+H+"*"),V=new RegExp("="+H+"*([^\\]'\"]*?)"+H+"*\\]","g"),K=new RegExp(z),$=new RegExp("^"+W+"$"),J={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+U),PSEUDO:new RegExp("^"+z),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+H+"*(even|odd|(([+-]|)(\\d*)n|)"+H+"*(?:([+-]|)"+H+"*(\\d+)|))"+H+"*\\)|)","i"),bool:new RegExp("^(?:"+j+")$","i"),needsContext:new RegExp("^"+H+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+H+"*((?:-\\d)?\\d*)"+H+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=/'|\\/g,nt=new RegExp("\\\\([\\da-f]{1,6}"+H+"?|("+H+")|.)","ig"),rt=function(t,e,n){var r="0x"+e-65536;return r!=r||n?e:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{A.apply(C=R.call(b.childNodes),b.childNodes),C[b.childNodes.length].nodeType}catch(t){A={apply:C.length?function(t,e){P.apply(t,R.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function it(t,e,r,i){var o,s,l,c,d,p,v,y,w,L;if((e?e.ownerDocument||e:b)!==f&&h(e),e=e||f,r=r||[],!t||"string"!=typeof t)return r;if(1!==(c=e.nodeType)&&9!==c)return[];if(m&&!i){if(o=Z.exec(t))if(l=o[1]){if(9===c){if(!(s=e.getElementById(l))||!s.parentNode)return r;if(s.id===l)return r.push(s),r}else if(e.ownerDocument&&(s=e.ownerDocument.getElementById(l))&&g(e,s)&&s.id===l)return r.push(s),r}else{if(o[2])return A.apply(r,e.getElementsByTagName(t)),r;if((l=o[3])&&n.getElementsByClassName&&e.getElementsByClassName)return A.apply(r,e.getElementsByClassName(l)),r}if(n.qsa&&(!_||!_.test(t))){if(y=v=M,w=e,L=9===c&&t,1===c&&"object"!==e.nodeName.toLowerCase()){for(p=a(t),(v=e.getAttribute("id"))?y=v.replace(et,"\\$&"):e.setAttribute("id",y),y="[id='"+y+"'] ",d=p.length;d--;)p[d]=y+mt(p[d]);w=tt.test(t)&&ft(e.parentNode)||e,L=p.join(",")}if(L)try{return A.apply(r,w.querySelectorAll(L)),r}catch(t){}finally{v||e.removeAttribute("id")}}}return u(t.replace(F,"$1"),e,r,i)}function ot(){var t=[];return function e(n,i){return t.push(n+" ")>r.cacheLength&&delete e[t.shift()],e[n+" "]=i}}function at(t){return t[M]=!0,t}function st(t){var e=f.createElement("div");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ut(t,e){for(var n=t.split("|"),i=t.length;i--;)r.attrHandle[n[i]]=e}function lt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||Y)-(~t.sourceIndex||Y);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ct(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function dt(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function ht(t){return at(function(e){return e=+e,at(function(n,r){for(var i,o=t([],n.length,e),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ft(t){return t&&typeof t.getElementsByTagName!==x&&t}for(e in n=it.support={},o=it.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},h=it.setDocument=function(t){var e,i=t?t.ownerDocument||t:b,a=i.defaultView;return i!==f&&9===i.nodeType&&i.documentElement?(f=i,p=i.documentElement,m=!o(i),a&&a!==a.top&&(a.addEventListener?a.addEventListener("unload",function(){h()},!1):a.attachEvent&&a.attachEvent("onunload",function(){h()})),n.attributes=st(function(t){return t.className="i",!t.getAttribute("className")}),n.getElementsByTagName=st(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(i.getElementsByClassName)&&st(function(t){return t.innerHTML="
",t.firstChild.className="i",2===t.getElementsByClassName("i").length}),n.getById=st(function(t){return p.appendChild(t).id=M,!i.getElementsByName||!i.getElementsByName(M).length}),n.getById?(r.find.ID=function(t,e){if(typeof e.getElementById!==x&&m){var n=e.getElementById(t);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(t){var e=t.replace(nt,rt);return function(t){return t.getAttribute("id")===e}}):(delete r.find.ID,r.filter.ID=function(t){var e=t.replace(nt,rt);return function(t){var n=typeof t.getAttributeNode!==x&&t.getAttributeNode("id");return n&&n.value===e}}),r.find.TAG=n.getElementsByTagName?function(t,e){return typeof e.getElementsByTagName!==x?e.getElementsByTagName(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if("*"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){return typeof e.getElementsByClassName!==x&&m?e.getElementsByClassName(t):void 0},v=[],_=[],(n.qsa=Q.test(i.querySelectorAll))&&(st(function(t){t.innerHTML="",t.querySelectorAll("[msallowclip^='']").length&&_.push("[*^$]="+H+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||_.push("\\["+H+"*(?:value|"+j+")"),t.querySelectorAll(":checked").length||_.push(":checked")}),st(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&_.push("name"+H+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||_.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),_.push(",.*:")})),(n.matchesSelector=Q.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&st(function(t){n.disconnectedMatch=y.call(t,"div"),y.call(t,"[s!='']:x"),v.push("!=",z)}),_=_.length&&new RegExp(_.join("|")),v=v.length&&new RegExp(v.join("|")),e=Q.test(p.compareDocumentPosition),g=e||Q.test(p.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},S=e?function(t,e){if(t===e)return d=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t===i||t.ownerDocument===b&&g(b,t)?-1:e===i||e.ownerDocument===b&&g(b,e)?1:c?I.call(c,t)-I.call(c,e):0:4&r?-1:1)}:function(t,e){if(t===e)return d=!0,0;var n,r=0,o=t.parentNode,a=e.parentNode,s=[t],u=[e];if(!o||!a)return t===i?-1:e===i?1:o?-1:a?1:c?I.call(c,t)-I.call(c,e):0;if(o===a)return lt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?lt(s[r],u[r]):s[r]===b?-1:u[r]===b?1:0},i):f},it.matches=function(t,e){return it(t,null,null,e)},it.matchesSelector=function(t,e){if((t.ownerDocument||t)!==f&&h(t),e=e.replace(V,"='$1']"),!(!n.matchesSelector||!m||v&&v.test(e)||_&&_.test(e)))try{var r=y.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return it(e,f,null,[t]).length>0},it.contains=function(t,e){return(t.ownerDocument||t)!==f&&h(t),g(t,e)},it.attr=function(t,e){(t.ownerDocument||t)!==f&&h(t);var i=r.attrHandle[e.toLowerCase()],o=i&&E.call(r.attrHandle,e.toLowerCase())?i(t,e,!m):void 0;return void 0!==o?o:n.attributes||!m?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},it.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},it.uniqueSort=function(t){var e,r=[],i=0,o=0;if(d=!n.detectDuplicates,c=!n.sortStable&&t.slice(0),t.sort(S),d){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return c=null,t},i=it.getText=function(t){var e,n="",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},(r=it.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(nt,rt),t[3]=(t[3]||t[4]||t[5]||"").replace(nt,rt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||it.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&it.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return J.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&K.test(n)&&(e=a(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(nt,rt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=k[t+" "];return e||(e=new RegExp("(^|"+H+")"+t+"("+H+"|$)"))&&k(t,function(t){return e.test("string"==typeof t.className&&t.className||typeof t.getAttribute!==x&&t.getAttribute("class")||"")})},ATTR:function(t,e,n){return function(r){var i=it.attr(r,t);return null==i?"!="===e:!e||(i+="","="===e?i===n:"!="===e?i!==n:"^="===e?n&&0===i.indexOf(n):"*="===e?n&&i.indexOf(n)>-1:"$="===e?n&&i.slice(-n.length)===n:"~="===e?(" "+i+" ").indexOf(n)>-1:"|="===e&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,r,i){var o="nth"!==t.slice(0,3),a="last"!==t.slice(-4),s="of-type"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,u){var l,c,d,h,f,p,m=o!==a?"nextSibling":"previousSibling",_=e.parentNode,v=s&&e.nodeName.toLowerCase(),y=!u&&!s;if(_){if(o){for(;m;){for(d=e;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===t&&!p&&"nextSibling"}return!0}if(p=[a?_.firstChild:_.lastChild],a&&y){for(f=(l=(c=_[M]||(_[M]={}))[t]||[])[0]===w&&l[1],h=l[0]===w&&l[2],d=f&&_.childNodes[f];d=++f&&d&&d[m]||(h=f=0)||p.pop();)if(1===d.nodeType&&++h&&d===e){c[t]=[w,f,h];break}}else if(y&&(l=(e[M]||(e[M]={}))[t])&&l[0]===w)h=l[1];else for(;(d=++f&&d&&d[m]||(h=f=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++h||(y&&((d[M]||(d[M]={}))[t]=[w,h]),d!==e)););return(h-=i)===r||h%r==0&&h/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||it.error("unsupported pseudo: "+t);return i[M]?i(e):i.length>1?(n=[t,t,"",e],r.setFilters.hasOwnProperty(t.toLowerCase())?at(function(t,n){for(var r,o=i(t,e),a=o.length;a--;)t[r=I.call(t,o[a])]=!(n[r]=o[a])}):function(t){return i(t,0,n)}):i}},pseudos:{not:at(function(t){var e=[],n=[],r=s(t.replace(F,"$1"));return r[M]?at(function(t,e,n,i){for(var o,a=r(t,null,i,[]),s=t.length;s--;)(o=a[s])&&(t[s]=!(e[s]=o))}):function(t,i,o){return e[0]=t,r(e,null,o,n),!n.pop()}}),has:at(function(t){return function(e){return it(t,e).length>0}}),contains:at(function(t){return function(e){return(e.textContent||e.innerText||i(e)).indexOf(t)>-1}}),lang:at(function(t){return $.test(t||"")||it.error("unsupported lang: "+t),t=t.replace(nt,rt).toLowerCase(),function(e){var n;do{if(n=m?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===p},focus:function(t){return t===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return!1===t.disabled},disabled:function(t){return!0===t.disabled},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return G.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:ht(function(){return[0]}),last:ht(function(t,e){return[e-1]}),eq:ht(function(t,e,n){return[0>n?n+e:n]}),even:ht(function(t,e){for(var n=0;e>n;n+=2)t.push(n);return t}),odd:ht(function(t,e){for(var n=1;e>n;n+=2)t.push(n);return t}),lt:ht(function(t,e,n){for(var r=0>n?n+e:n;--r>=0;)t.push(r);return t}),gt:ht(function(t,e,n){for(var r=0>n?n+e:n;++re;e++)r+=t[e].value;return r}function _t(t,e,n){var r=e.dir,i=n&&"parentNode"===r,o=L++;return e.first?function(e,n,o){for(;e=e[r];)if(1===e.nodeType||i)return t(e,n,o)}:function(e,n,a){var s,u,l=[w,o];if(a){for(;e=e[r];)if((1===e.nodeType||i)&&t(e,n,a))return!0}else for(;e=e[r];)if(1===e.nodeType||i){if((s=(u=e[M]||(e[M]={}))[r])&&s[0]===w&&s[1]===o)return l[2]=s[2];if(u[r]=l,l[2]=t(e,n,a))return!0}}}function vt(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function yt(t,e,n,r,i){for(var o,a=[],s=0,u=t.length,l=null!=e;u>s;s++)(o=t[s])&&(!n||n(o,r,i))&&(a.push(o),l&&e.push(s));return a}function gt(t,e,n,r,i,o){return r&&!r[M]&&(r=gt(r)),i&&!i[M]&&(i=gt(i,o)),at(function(o,a,s,u){var l,c,d,h=[],f=[],p=a.length,m=o||function(t,e,n){for(var r=0,i=e.length;i>r;r++)it(t,e[r],n);return n}(e||"*",s.nodeType?[s]:s,[]),_=!t||!o&&e?m:yt(m,h,t,s,u),v=n?i||(o?t:p||r)?[]:a:_;if(n&&n(_,v,s,u),r)for(l=yt(v,f),r(l,[],s,u),c=l.length;c--;)(d=l[c])&&(v[f[c]]=!(_[f[c]]=d));if(o){if(i||t){if(i){for(l=[],c=v.length;c--;)(d=v[c])&&l.push(_[c]=d);i(null,v=[],l,u)}for(c=v.length;c--;)(d=v[c])&&(l=i?I.call(o,d):h[c])>-1&&(o[l]=!(a[l]=d))}}else v=yt(v===a?v.splice(p,v.length):v),i?i(null,a,v,u):A.apply(a,v)})}function Mt(t){for(var e,n,i,o=t.length,a=r.relative[t[0].type],s=a||r.relative[" "],u=a?1:0,c=_t(function(t){return t===e},s,!0),d=_t(function(t){return I.call(e,t)>-1},s,!0),h=[function(t,n,r){return!a&&(r||n!==l)||((e=n).nodeType?c(t,n,r):d(t,n,r))}];o>u;u++)if(n=r.relative[t[u].type])h=[_t(vt(h),n)];else{if((n=r.filter[t[u].type].apply(null,t[u].matches))[M]){for(i=++u;o>i&&!r.relative[t[i].type];i++);return gt(u>1&&vt(h),u>1&&mt(t.slice(0,u-1).concat({value:" "===t[u-2].type?"*":""})).replace(F,"$1"),n,i>u&&Mt(t.slice(u,i)),o>i&&Mt(t=t.slice(i)),o>i&&mt(t))}h.push(n)}return vt(h)}function bt(t,e){var n=e.length>0,i=t.length>0,o=function(o,a,s,u,c){var d,h,p,m=0,_="0",v=o&&[],y=[],g=l,M=o||i&&r.find.TAG("*",c),b=w+=null==g?1:Math.random()||.1,L=M.length;for(c&&(l=a!==f&&a);_!==L&&null!=(d=M[_]);_++){if(i&&d){for(h=0;p=t[h++];)if(p(d,a,s)){u.push(d);break}c&&(w=b)}n&&((d=!p&&d)&&m--,o&&v.push(d))}if(m+=_,n&&_!==m){for(h=0;p=e[h++];)p(v,y,a,s);if(o){if(m>0)for(;_--;)v[_]||y[_]||(y[_]=O.call(u));y=yt(y)}A.apply(u,y),c&&!o&&y.length>0&&m+e.length>1&&it.uniqueSort(u)}return c&&(w=b,l=g),v};return n?at(o):o}return pt.prototype=r.filters=r.pseudos,r.setFilters=new pt,a=it.tokenize=function(t,e){var n,i,o,a,s,u,l,c=T[t+" "];if(c)return e?0:c.slice(0);for(s=t,u=[],l=r.preFilter;s;){for(a in(!n||(i=q.exec(s)))&&(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=B.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(F," ")}),s=s.slice(n.length)),r.filter)!(i=J[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return e?s.length:s?it.error(t):T(t,u).slice(0)},s=it.compile=function(t,e){var n,r=[],i=[],o=D[t+" "];if(!o){for(e||(e=a(t)),n=e.length;n--;)(o=Mt(e[n]))[M]?r.push(o):i.push(o);(o=D(t,bt(i,r))).selector=t}return o},u=it.select=function(t,e,i,o){var u,l,c,d,h,f="function"==typeof t&&t,p=!o&&a(t=f.selector||t);if(i=i||[],1===p.length){if((l=p[0]=p[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&n.getById&&9===e.nodeType&&m&&r.relative[l[1].type]){if(!(e=(r.find.ID(c.matches[0].replace(nt,rt),e)||[])[0]))return i;f&&(e=e.parentNode),t=t.slice(l.shift().value.length)}for(u=J.needsContext.test(t)?0:l.length;u--&&(c=l[u],!r.relative[d=c.type]);)if((h=r.find[d])&&(o=h(c.matches[0].replace(nt,rt),tt.test(l[0].type)&&ft(e.parentNode)||e))){if(l.splice(u,1),!(t=o.length&&mt(l)))return A.apply(i,o),i;break}}return(f||s(t,p))(o,e,!m,i,tt.test(t)&&ft(e.parentNode)||e),i},n.sortStable=M.split("").sort(S).join("")===M,n.detectDuplicates=!!d,h(),n.sortDetached=st(function(t){return 1&t.compareDocumentPosition(f.createElement("div"))}),st(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||ut("type|href|height|width",function(t,e,n){return n?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),n.attributes&&st(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||ut("value",function(t,e,n){return n||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue}),st(function(t){return null==t.getAttribute("disabled")})||ut(j,function(t,e,n){var r;return n?void 0:!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null}),it}(i);v.find=L,v.expr=L.selectors,v.expr[":"]=v.expr.pseudos,v.unique=L.uniqueSort,v.text=L.getText,v.isXMLDoc=L.isXML,v.contains=L.contains;var k=v.expr.match.needsContext,T=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,D=/^.[^:#\[\.,]*$/;function S(t,e,n){if(v.isFunction(e))return v.grep(t,function(t,r){return!!e.call(t,r,t)!==n});if(e.nodeType)return v.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(D.test(e))return v.filter(e,t,n);e=v.filter(e,t)}return v.grep(t,function(t){return c.call(e,t)>=0!==n})}v.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?v.find.matchesSelector(r,t)?[r]:[]:v.find.matches(t,v.grep(e,function(t){return 1===t.nodeType}))},v.fn.extend({find:function(t){var e,n=this.length,r=[],i=this;if("string"!=typeof t)return this.pushStack(v(t).filter(function(){for(e=0;n>e;e++)if(v.contains(i[e],this))return!0}));for(e=0;n>e;e++)v.find(t,i[e],r);return(r=this.pushStack(n>1?v.unique(r):r)).selector=this.selector?this.selector+" "+t:t,r},filter:function(t){return this.pushStack(S(this,t||[],!1))},not:function(t){return this.pushStack(S(this,t||[],!0))},is:function(t){return!!S(this,"string"==typeof t&&k.test(t)?v(t):t||[],!1).length}});var x,Y=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(v.fn.init=function(t,e){var n,r;if(!t)return this;if("string"==typeof t){if(!(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:Y.exec(t))||!n[1]&&e)return!e||e.jquery?(e||x).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof v?e[0]:e,v.merge(this,v.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:m,!0)),T.test(n[1])&&v.isPlainObject(e))for(n in e)v.isFunction(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return(r=m.getElementById(n[2]))&&r.parentNode&&(this.length=1,this[0]=r),this.context=m,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):v.isFunction(t)?void 0!==x.ready?x.ready(t):t(v):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),v.makeArray(t,this))}).prototype=v.fn,x=v(m);var E=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};function O(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}v.extend({dir:function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&v(t).is(n))break;r.push(t)}return r},sibling:function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n}}),v.fn.extend({has:function(t){var e=v(t,this),n=e.length;return this.filter(function(){for(var t=0;n>t;t++)if(v.contains(this,e[t]))return!0})},closest:function(t,e){for(var n,r=0,i=this.length,o=[],a=k.test(t)||"string"!=typeof t?v(t,e||this.context):0;i>r;r++)for(n=this[r];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&v.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?v.unique(o):o)},index:function(t){return t?"string"==typeof t?c.call(v(t),this[0]):c.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(v.unique(v.merge(this.get(),v(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),v.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return v.dir(t,"parentNode")},parentsUntil:function(t,e,n){return v.dir(t,"parentNode",n)},next:function(t){return O(t,"nextSibling")},prev:function(t){return O(t,"previousSibling")},nextAll:function(t){return v.dir(t,"nextSibling")},prevAll:function(t){return v.dir(t,"previousSibling")},nextUntil:function(t,e,n){return v.dir(t,"nextSibling",n)},prevUntil:function(t,e,n){return v.dir(t,"previousSibling",n)},siblings:function(t){return v.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return v.sibling(t.firstChild)},contents:function(t){return t.contentDocument||v.merge([],t.childNodes)}},function(t,e){v.fn[t]=function(n,r){var i=v.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=v.filter(r,i)),this.length>1&&(C[t]||v.unique(i),E.test(t)&&i.reverse()),this.pushStack(i)}});var P,A=/\S+/g,R={};function I(){m.removeEventListener("DOMContentLoaded",I,!1),i.removeEventListener("load",I,!1),v.ready()}v.Callbacks=function(t){var e,n,r,i,o,a,s=[],u=!(t="string"==typeof t?R[t]||function(t){var e=R[t]={};return v.each(t.match(A)||[],function(t,n){e[n]=!0}),e}(t):v.extend({},t)).once&&[],l=function(d){for(e=t.memory&&d,n=!0,a=i||0,i=0,o=s.length,r=!0;s&&o>a;a++)if(!1===s[a].apply(d[0],d[1])&&t.stopOnFalse){e=!1;break}r=!1,s&&(u?u.length&&l(u.shift()):e?s=[]:c.disable())},c={add:function(){if(s){var n=s.length;!function e(n){v.each(n,function(n,r){var i=v.type(r);"function"===i?t.unique&&c.has(r)||s.push(r):r&&r.length&&"string"!==i&&e(r)})}(arguments),r?o=s.length:e&&(i=n,l(e))}return this},remove:function(){return s&&v.each(arguments,function(t,e){for(var n;(n=v.inArray(e,s,n))>-1;)s.splice(n,1),r&&(o>=n&&o--,a>=n&&a--)}),this},has:function(t){return t?v.inArray(t,s)>-1:!(!s||!s.length)},empty:function(){return s=[],o=0,this},disable:function(){return s=u=e=void 0,this},disabled:function(){return!s},lock:function(){return u=void 0,e||c.disable(),this},locked:function(){return!u},fireWith:function(t,e){return!s||n&&!u||(e=[t,(e=e||[]).slice?e.slice():e],r?u.push(e):l(e)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},v.extend({Deferred:function(t){var e=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var t=arguments;return v.Deferred(function(n){v.each(e,function(e,o){var a=v.isFunction(t[e])&&t[e];i[o[1]](function(){var t=a&&a.apply(this,arguments);t&&v.isFunction(t.promise)?t.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[o[0]+"With"](this===r?n.promise():this,a?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?v.extend(t,r):r}},i={};return r.pipe=r.then,v.each(e,function(t,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},e[1^t][2].disable,e[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),t&&t.call(i,i),i},when:function(t){var e,n,r,i=0,o=s.call(arguments),a=o.length,u=1!==a||t&&v.isFunction(t.promise)?a:0,l=1===u?t:v.Deferred(),c=function(t,n,r){return function(i){n[t]=this,r[t]=arguments.length>1?s.call(arguments):i,r===e?l.notifyWith(n,r):--u||l.resolveWith(n,r)}};if(a>1)for(e=new Array(a),n=new Array(a),r=new Array(a);a>i;i++)o[i]&&v.isFunction(o[i].promise)?o[i].promise().done(c(i,r,o)).fail(l.reject).progress(c(i,n,e)):--u;return u||l.resolveWith(r,o),l.promise()}}),v.fn.ready=function(t){return v.ready.promise().done(t),this},v.extend({isReady:!1,readyWait:1,holdReady:function(t){t?v.readyWait++:v.ready(!0)},ready:function(t){(!0===t?--v.readyWait:v.isReady)||(v.isReady=!0,!0!==t&&--v.readyWait>0||(P.resolveWith(m,[v]),v.fn.triggerHandler&&(v(m).triggerHandler("ready"),v(m).off("ready"))))}}),v.ready.promise=function(t){return P||(P=v.Deferred(),"complete"===m.readyState?setTimeout(v.ready):(m.addEventListener("DOMContentLoaded",I,!1),i.addEventListener("load",I,!1))),P.promise(t)},v.ready.promise();var j=v.access=function(t,e,n,r,i,o,a){var s=0,u=t.length,l=null==n;if("object"===v.type(n))for(s in i=!0,n)v.access(t,e,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v.isFunction(r)||(a=!0),l&&(a?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(v(t),n)})),e))for(;u>s;s++)e(t[s],n,a?r:r.call(t[s],s,e(t[s],n)));return i?t:l?e.call(t):u?e(t[0],n):o};function H(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=v.expando+Math.random()}v.acceptData=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType},H.uid=1,H.accepts=v.acceptData,H.prototype={key:function(t){if(!H.accepts(t))return 0;var e={},n=t[this.expando];if(!n){n=H.uid++;try{e[this.expando]={value:n},Object.defineProperties(t,e)}catch(r){e[this.expando]=n,v.extend(t,e)}}return this.cache[n]||(this.cache[n]={}),n},set:function(t,e,n){var r,i=this.key(t),o=this.cache[i];if("string"==typeof e)o[e]=n;else if(v.isEmptyObject(o))v.extend(this.cache[i],e);else for(r in e)o[r]=e[r];return o},get:function(t,e){var n=this.cache[this.key(t)];return void 0===e?n:n[e]},access:function(t,e,n){var r;return void 0===e||e&&"string"==typeof e&&void 0===n?void 0!==(r=this.get(t,e))?r:this.get(t,v.camelCase(e)):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,r,i,o=this.key(t),a=this.cache[o];if(void 0===e)this.cache[o]={};else{v.isArray(e)?r=e.concat(e.map(v.camelCase)):(i=v.camelCase(e),e in a?r=[e,i]:r=(r=i)in a?[r]:r.match(A)||[]),n=r.length;for(;n--;)delete a[r[n]]}},hasData:function(t){return!v.isEmptyObject(this.cache[t[this.expando]]||{})},discard:function(t){t[this.expando]&&delete this.cache[t[this.expando]]}};var N=new H,W=new H,U=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,z=/([A-Z])/g;function F(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r="data-"+e.replace(z,"-$1").toLowerCase(),"string"==typeof(n=t.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:U.test(n)?v.parseJSON(n):n)}catch(t){}W.set(t,e,n)}else n=void 0;return n}v.extend({hasData:function(t){return W.hasData(t)||N.hasData(t)},data:function(t,e,n){return W.access(t,e,n)},removeData:function(t,e){W.remove(t,e)},_data:function(t,e,n){return N.access(t,e,n)},_removeData:function(t,e){N.remove(t,e)}}),v.fn.extend({data:function(t,e){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===t){if(this.length&&(i=W.get(o),1===o.nodeType&&!N.get(o,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&(0===(r=a[n].name).indexOf("data-")&&(r=v.camelCase(r.slice(5)),F(o,r,i[r])));N.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof t?this.each(function(){W.set(this,t)}):j(this,function(e){var n,r=v.camelCase(t);if(o&&void 0===e){if(void 0!==(n=W.get(o,t)))return n;if(void 0!==(n=W.get(o,r)))return n;if(void 0!==(n=F(o,r,void 0)))return n}else this.each(function(){var n=W.get(this,r);W.set(this,r,e),-1!==t.indexOf("-")&&void 0!==n&&W.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){W.remove(this,t)})}}),v.extend({queue:function(t,e,n){var r;return t?(e=(e||"fx")+"queue",r=N.get(t,e),n&&(!r||v.isArray(n)?r=N.access(t,e,v.makeArray(n)):r.push(n)),r||[]):void 0},dequeue:function(t,e){e=e||"fx";var n=v.queue(t,e),r=n.length,i=n.shift(),o=v._queueHooks(t,e);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===e&&n.unshift("inprogress"),delete o.stop,i.call(t,function(){v.dequeue(t,e)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return N.get(t,n)||N.access(t,n,{empty:v.Callbacks("once memory").add(function(){N.remove(t,[e+"queue",n])})})}}),v.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.lengthx",p.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var $="undefined";p.focusinBubbles="onfocusin"in i;var J=/^key/,G=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Q=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function tt(){return!1}function et(){try{return m.activeElement}catch(t){}}v.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,d,h,f,p,m,_=N.get(t);if(_)for(n.handler&&(n=(o=n).handler,i=o.selector),n.guid||(n.guid=v.guid++),(u=_.events)||(u=_.events={}),(a=_.handle)||(a=_.handle=function(e){return typeof v!==$&&v.event.triggered!==e.type?v.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(A)||[""]).length;l--;)f=m=(s=Q.exec(e[l])||[])[1],p=(s[2]||"").split(".").sort(),f&&(d=v.event.special[f]||{},f=(i?d.delegateType:d.bindType)||f,d=v.event.special[f]||{},c=v.extend({type:f,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&v.expr.match.needsContext.test(i),namespace:p.join(".")},o),(h=u[f])||((h=u[f]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(t,r,p,a)||t.addEventListener&&t.addEventListener(f,a,!1)),d.add&&(d.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,c):h.push(c),v.event.global[f]=!0)},remove:function(t,e,n,r,i){var o,a,s,u,l,c,d,h,f,p,m,_=N.hasData(t)&&N.get(t);if(_&&(u=_.events)){for(l=(e=(e||"").match(A)||[""]).length;l--;)if(f=m=(s=Q.exec(e[l])||[])[1],p=(s[2]||"").split(".").sort(),f){for(d=v.event.special[f]||{},h=u[f=(r?d.delegateType:d.bindType)||f]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=h.length;o--;)c=h[o],!i&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(h.splice(o,1),c.selector&&h.delegateCount--,d.remove&&d.remove.call(t,c));a&&!h.length&&(d.teardown&&!1!==d.teardown.call(t,p,_.handle)||v.removeEvent(t,f,_.handle),delete u[f])}else for(f in u)v.event.remove(t,f+e[l],n,r,!0);v.isEmptyObject(u)&&(delete _.handle,N.remove(t,"events"))}},trigger:function(t,e,n,r){var o,a,s,u,l,c,d,h=[n||m],p=f.call(t,"type")?t.type:t,_=f.call(t,"namespace")?t.namespace.split("."):[];if(a=s=n=n||m,3!==n.nodeType&&8!==n.nodeType&&!X.test(p+v.event.triggered)&&(p.indexOf(".")>=0&&(p=(_=p.split(".")).shift(),_.sort()),l=p.indexOf(":")<0&&"on"+p,(t=t[v.expando]?t:new v.Event(p,"object"==typeof t&&t)).isTrigger=r?2:3,t.namespace=_.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+_.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:v.makeArray(e,[t]),d=v.event.special[p]||{},r||!d.trigger||!1!==d.trigger.apply(n,e))){if(!r&&!d.noBubble&&!v.isWindow(n)){for(u=d.delegateType||p,X.test(u+p)||(a=a.parentNode);a;a=a.parentNode)h.push(a),s=a;s===(n.ownerDocument||m)&&h.push(s.defaultView||s.parentWindow||i)}for(o=0;(a=h[o++])&&!t.isPropagationStopped();)t.type=o>1?u:d.bindType||p,(c=(N.get(a,"events")||{})[t.type]&&N.get(a,"handle"))&&c.apply(a,e),(c=l&&a[l])&&c.apply&&v.acceptData(a)&&(t.result=c.apply(a,e),!1===t.result&&t.preventDefault());return t.type=p,r||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(h.pop(),e)||!v.acceptData(n)||l&&v.isFunction(n[p])&&!v.isWindow(n)&&((s=n[l])&&(n[l]=null),v.event.triggered=p,n[p](),v.event.triggered=void 0,s&&(n[l]=s)),t.result}},dispatch:function(t){t=v.event.fix(t);var e,n,r,i,o,a=[],u=s.call(arguments),l=(N.get(this,"events")||{})[t.type]||[],c=v.event.special[t.type]||{};if(u[0]=t,t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){for(a=v.event.handlers.call(this,t,l),e=0;(i=a[e++])&&!t.isPropagationStopped();)for(t.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!t.isImmediatePropagationStopped();)(!t.namespace_re||t.namespace_re.test(o.namespace))&&(t.handleObj=o,t.data=o.data,void 0!==(r=((v.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(t.result=r)&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,r,i,o,a=[],s=e.delegateCount,u=t.target;if(s&&u.nodeType&&(!t.button||"click"!==t.type))for(;u!==this;u=u.parentNode||this)if(!0!==u.disabled||"click"!==t.type){for(r=[],n=0;s>n;n++)void 0===r[i=(o=e[n]).selector+" "]&&(r[i]=o.needsContext?v(i,this).index(u)>=0:v.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s]*)\/>/gi,rt=/<([\w:]+)/,it=/<|&#?\w+;/,ot=/<(?:script|style|link)/i,at=/checked\s*(?:[^=]|=\s*.checked.)/i,st=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function dt(t,e){return v.nodeName(t,"table")&&v.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function ht(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function ft(t){var e=ut.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function pt(t,e){for(var n=0,r=t.length;r>n;n++)N.set(t[n],"globalEval",!e||N.get(e[n],"globalEval"))}function mt(t,e){var n,r,i,o,a,s,u,l;if(1===e.nodeType){if(N.hasData(t)&&(o=N.access(t),a=N.set(e,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;r>n;n++)v.event.add(e,i,l[i][n]);W.hasData(t)&&(s=W.access(t),u=v.extend({},s),W.set(e,u))}}function _t(t,e){var n=t.getElementsByTagName?t.getElementsByTagName(e||"*"):t.querySelectorAll?t.querySelectorAll(e||"*"):[];return void 0===e||e&&v.nodeName(t,e)?v.merge([t],n):n}function vt(t,e){var n=e.nodeName.toLowerCase();"input"===n&&K.test(t.type)?e.checked=t.checked:("input"===n||"textarea"===n)&&(e.defaultValue=t.defaultValue)}ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,v.extend({clone:function(t,e,n){var r,i,o,a,s=t.cloneNode(!0),u=v.contains(t.ownerDocument,t);if(!(p.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||v.isXMLDoc(t)))for(a=_t(s),r=0,i=(o=_t(t)).length;i>r;r++)vt(o[r],a[r]);if(e)if(n)for(o=o||_t(t),a=a||_t(s),r=0,i=o.length;i>r;r++)mt(o[r],a[r]);else mt(t,s);return(a=_t(s,"script")).length>0&&pt(a,!u&&_t(t,"script")),s},buildFragment:function(t,e,n,r){for(var i,o,a,s,u,l,c=e.createDocumentFragment(),d=[],h=0,f=t.length;f>h;h++)if((i=t[h])||0===i)if("object"===v.type(i))v.merge(d,i.nodeType?[i]:i);else if(it.test(i)){for(o=o||c.appendChild(e.createElement("div")),a=(rt.exec(i)||["",""])[1].toLowerCase(),s=ct[a]||ct._default,o.innerHTML=s[1]+i.replace(nt,"<$1>")+s[2],l=s[0];l--;)o=o.lastChild;v.merge(d,o.childNodes),(o=c.firstChild).textContent=""}else d.push(e.createTextNode(i));for(c.textContent="",h=0;i=d[h++];)if((!r||-1===v.inArray(i,r))&&(u=v.contains(i.ownerDocument,i),o=_t(c.appendChild(i),"script"),u&&pt(o),n))for(l=0;i=o[l++];)st.test(i.type||"")&&n.push(i);return c},cleanData:function(t){for(var e,n,r,i,o=v.event.special,a=0;void 0!==(n=t[a]);a++){if(v.acceptData(n)&&((i=n[N.expando])&&(e=N.cache[i]))){if(e.events)for(r in e.events)o[r]?v.event.remove(n,r):v.removeEvent(n,r,e.handle);N.cache[i]&&delete N.cache[i]}delete W.cache[n[W.expando]]}}}),v.fn.extend({text:function(t){return j(this,function(t){return void 0===t?v.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=t)})},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||dt(this,t).appendChild(t)})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=dt(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var n,r=t?v.filter(t,this):this,i=0;null!=(n=r[i]);i++)e||1!==n.nodeType||v.cleanData(_t(n)),n.parentNode&&(e&&v.contains(n.ownerDocument,n)&&pt(_t(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(v.cleanData(_t(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return v.clone(this,t,e)})},html:function(t){return j(this,function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!ot.test(t)&&!ct[(rt.exec(t)||["",""])[1].toLowerCase()]){t=t.replace(nt,"<$1>");try{for(;r>n;n++)1===(e=this[n]||{}).nodeType&&(v.cleanData(_t(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,v.cleanData(_t(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=u.apply([],t);var n,r,i,o,a,s,l=0,c=this.length,d=this,h=c-1,f=t[0],m=v.isFunction(f);if(m||c>1&&"string"==typeof f&&!p.checkClone&&at.test(f))return this.each(function(n){var r=d.eq(n);m&&(t[0]=f.call(this,n,r.html())),r.domManip(t,e)});if(c&&(r=(n=v.buildFragment(t,this[0].ownerDocument,!1,this)).firstChild,1===n.childNodes.length&&(n=r),r)){for(o=(i=v.map(_t(n,"script"),ht)).length;c>l;l++)a=n,l!==h&&(a=v.clone(a,!0,!0),o&&v.merge(i,_t(a,"script"))),e.call(this[l],a,l);if(o)for(s=i[i.length-1].ownerDocument,v.map(i,ft),l=0;o>l;l++)a=i[l],st.test(a.type||"")&&!N.access(a,"globalEval")&&v.contains(s,a)&&(a.src?v._evalUrl&&v._evalUrl(a.src):v.globalEval(a.textContent.replace(lt,"")))}return this}}),v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){v.fn[t]=function(t){for(var n,r=[],i=v(t),o=i.length-1,a=0;o>=a;a++)n=a===o?this:this.clone(!0),v(i[a])[e](n),l.apply(r,n.get());return this.pushStack(r)}});var yt,gt={};function Mt(t,e){var n,r=v(e.createElement(t)).appendTo(e.body),o=i.getDefaultComputedStyle&&(n=i.getDefaultComputedStyle(r[0]))?n.display:v.css(r[0],"display");return r.detach(),o}function bt(t){var e=m,n=gt[t];return n||("none"!==(n=Mt(t,e))&&n||((e=(yt=(yt||v("